Keep Every LangSmith Trace Without the 10 Retention Bill The open-source langsmith-cli project merged a new archive workflow that lets teams keep every LangSmith trace without paying for extended retention. The tool continuously exports traces to organization-owned S3 as Parquet, queryable via DuckDB, avoiding the 10x cost of LangSmith's extended-retention tier. It also addresses the risk of online evaluators and automation rules inadvertently upgrading traces to extended retention. LangSmith is excellent for debugging live AI systems. But keeping every trace in its extended-retention tier can turn observability into a surprisingly large line item. Today we merged a new archive workflow into langsmith-cli https://github.com/gigaverse-app/langsmith-cli that changes that tradeoff: keep LangSmith for live debugging, continuously archive verified traces to organization-owned private S3, and query the retained Parquet directly with DuckDB. In other words, you can preserve your complete trace history without placing every trace on LangSmith's extended-retention tier. LangSmith currently documents two trace-retention tiers: | Tier | Retention | Published trace price | |---|---|---| | Base | 14 days | 0.05¢ | | Extended | 400 days | 0.50¢ total | The 0.45¢ extended-retention upgrade makes an extended trace cost 10× as much as a base trace. That difference becomes material at production volume: | Monthly traces | Base, 14 days | Extended, 400 days | Added retention cost | |---|---|---|---| | 100,000 | $50 | $500 | $450 | | 1,000,000 | $500 | $5,000 | $4,500 | | 10,000,000 | $5,000 | $50,000 | $45,000 | These examples use the published per-trace rates before free allowances, plan terms, negotiated pricing, or taxes. Always check the official LangSmith usage and billing documentation https://docs.langchain.com/langsmith/usage-and-billing data-retention before making budget decisions. There is another subtle risk: online evaluators and automation rules can upgrade matching traces when retention extension is enabled. A rule that matches one run upgrades the whole trace, and a thread-level rule can upgrade every trace in that thread. LangSmith currently enables retention extension by default for new online evaluators and automation rules, although you can opt out. At scale, an innocent-looking evaluator or rule can therefore create a much larger bill than expected. langsmith-cli archive workflow The new workflow separates live observability from long-term retention: LangSmith live traces 14 days │ ├── D+2 primary export ───────┐ └── D+12 reconciliation ──────┤ deduplicate by run ID ▼ private S3 / Parquet │ ▼ runs ... --archive DuckDB The D+2 export captures traces after normal late-arriving data has settled. The D+12 reconciliation pass catches delayed updates before the 14-day base-retention window closes. Both passes deduplicate by run ID, so retries are safe and the archive converges on the latest exported data. The result is long-term trace history in storage your organization owns and controls. Projects can be routed to separate buckets or prefixes—for example, to isolate development and production data: archive.yaml routes: - name: dev project pattern: "dev/ " archive uri: s3://my-langsmith-traces-dev/langsmith - name: production project pattern: "prd/ " archive uri: s3://my-langsmith-traces-prd/langsmith Point the CLI at that configuration and schedule the sync using cron, a Kubernetes CronJob, or your existing scheduler: export LANGSMITH ARCHIVE CONFIG=/etc/langsmith-cli/archive.yaml langsmith-cli --json archive sync \ --all-routes \ --retention-days 14 The organization supplies the scheduler, LangSmith API key used during export, AWS workload identity, private buckets, encryption, lifecycle policies, and reader IAM. The CLI owns the archive and query mechanism—not your infrastructure. Archived traces remain searchable through familiar commands. Reads use DuckDB over Parquet in S3 and do not require a LangSmith API key: List production runs from the last 90 days langsmith-cli --json runs list \ --archive \ --project prd/my-agent \ --last 90d Search historical runs langsmith-cli --json runs search "timeout" \ --archive \ --project prd/my-agent Inspect a run and its children langsmith-cli --json runs get