Atlas is source control for agents.

Source control for agents. Use multiple coding agents, track their changes and query them in one place.

Trusted by engineers at
Netflix Google Kilo Code Cloudflare Shopify Cisco Stripe Amazon Web Services OpenAI
Atlas — a session on the timeline, with the agent chat, terminal and team chat open in one window
01 · Agents

Install any coding agent.
Run them everywhere.

Run any agent. Claude Code, Codex, OpenCode, Atlas's own agent, or anything from the registry — side by side, against the same codebase. Agents keep their own authentication and model choices. Switch mid-task without starting over. Try the picker.

Read the docs
Idempotent webhook handlers for checkout
Make the Stripe webhook handlers idempotent. Keys in Redis, 24h TTL, and don't touch the ledger writes.

Done. Every handler now runs behind an idempotency guard keyed on the event id. A replayed event returns the cached 200 instead of re-running the side effects.

Ledger writes are untouched, as asked. The guard sits one layer above them in webhooks/guard.ts, so a retry never reaches the ledger at all.

Verified. 38 handler tests pass, plus 6 new ones that replay each event twice and assert a single ledger row.

6 files readSave
Rsrc/billing/webhooks/stripe.ts
Rsrc/billing/webhooks/guard.ts
Rsrc/billing/ledger.ts
Ask Claude Code…
Options
Parallel agents

Run a team of agents at once.

Every thread gets its own session worker, so you can fan work out across agents and projects simultaneously — one writing tests, one refactoring, one researching — and watch each one stream its tool calls live.

  • True concurrency. Rust-owned session state means threads run independently — not a queue pretending to be parallel.
  • Mix your agents. Claude Code, Codex, and ACP agents side by side — each on the task it's best at.
  • Intervene anytime. Jump into any running thread, steer it, or approve a permission — the rest keep going.
3 agents running across 2 workspaces
Claude Code · tests running
vitest run auth.test.ts
Added 6 cases for token refresh
atlas-core14.2k tok
Codex · refactor running
edit session-worker.rs
atlas-core8.9k tok
Claude Code · research running
web.search "stripe webhooks"
Comparing idempotency strategies…
billing-svc21.7k tok
Claude Code · docs done
committed 3 files
docs-site5.1k tok
workspaces 5 projects · 2 running
Pinned
atlas-core main · Wire ACP driver into chat panel 2 +128−44
web-app feat/checkout · Add Stripe payment intent +12−3
payments · group
infra main · chore: bump terraform providers 1
billing-svc fix/webhooks · Retry on idempotency clash −9
Recent
docs-site main · Publish 0.1.15 release notes
Workspaces

Every project. One window.

An Arc-style switcher holds all your projects in a single window. Hit ⌘. to flip between them — each carries its own editor tabs, terminals, git state, and agent threads, restored exactly as you left it.

  • Instant switch. State swaps from an in-RAM snapshot — no remount, no cold reload of the editor or terminal.
  • Group & pin. Organise projects into custom groups, pin the ones you live in, and see live git +/− at a glance.
  • Running, everywhere. A badge marks workspaces with agents still working — even the ones you're not looking at.
02 · Session capture

Source control
for coding agents.

The record of what an agent did disappears the moment the terminal scrolls. Atlas keeps it. Every session lands on the timeline. Every commit an agent makes becomes a checkpoint, linked back to the session that produced it. Open a session to read the prompt, the tool calls and the response, or ask it questions. Click a row.

  • Local-first capture. Sessions live in .atlas/sessions.db next to the repo — yours to grep, export, or delete.
  • Checkpoints link commits to sessions. Open any commit and see the agent run that produced it, reasoning included.
  • Organisation timeline. One board across every member and project — the shape of a week's agent work at a glance.
  • Redacted at the source. Keys, tokens and secrets are scrubbed on the way into the store, never on the way out.
Tracked
115h
agent time · 80 sessions
Tokens
391.0K
in + out · 80.62M cached
Checkpoints
167
from 25 sessions
Live
1
recording now
17h 50m
31 Aug – 6 Sep
Today6 Sep3 sessions · 6h 12m · 375.1K tok
Make the Stripe webhook handlers idempotent — keys in Redis, 24h TTL, ledger untouched
main · checkout-service · 741.0K / 1.00M ctx · 7 checkpoints
Fable 5 1h 44m
Shared memory — checkout runbook
· checkout-service · 375.1K tok
Fable 5 3h 01m
Port the notification service to the new queue and keep the retry semantics
feat/queue · notify-svc · 638.4K / 1.00M ctx · 39 checkpoints
Opus 11h 37m
Monday 31 Aug31 Aug2 sessions · 1h 28m
Disable the composer when the org has no AI access grant, and say why
main · checkout-service · 57.3K / 1.00M ctx · 1 checkpoint
default 2m
Fix the three regressions from the 0.3.1 merge
main · checkout-service · 253.9K / 1.00M ctx · 29 checkpoints
default 1h 27m
Sunday 30 Aug30 Aug1 session · 1h 08m
The TUI login breaks when the embedded terminal loses raw mode
main · infra · 502.6K / 1.00M ctx · 2 checkpoints
default 1h 08m
#general
#general 2
Shared from Claude Code · checkout-service
What shipped
  • Idempotency guard (webhooks/guard.ts) — Redis keys, 24h TTL
  • Replay tests — every event twice, one ledger row
  • Verified — 44 tests green, lint clean
ML
Mei Lin 18:27
Preview for checkout is up. Link's in #checkout.
4 September
TH
Tomás Herrera 20:20
Reviewing the webhook PR now.
Priya Nair ended a call · 2 min 21:52
No transcript arrived for this call.
Today
PN
Priya Nair 19:05
Merged. Idempotency keys are in.
JA
Jonah Adeyemi 21:16
Nice. Kicking off the load test.
Message #general
☺@BIS</>🔗≡1.❝
03 · Teams

Onboard your team.
Start chatting.

Create an organisation. Invite people with a link. The same window grows channels, direct messages and calls with recordings and transcripts. Draft prompts together in real time. Sketch on a canvas per conversation. Hand any message straight to an agent. Everything is scoped to the organisation, so switching orgs switches the whole workspace. Open a channel, switch tabs, try the canvas.

  • Organisations with roles. Admins, product owners, developers, members — invite by link, manage from the switcher.
  • Chat that knows the code. Mention a branch, drop a diff, or send a thread to an agent from the message itself.
  • Calls, drafts, canvases. Voice and video with transcripts, live co-edited prompt drafts, and a shared canvas — the same ones the web app uses.
  • Local stays local. Sync is per organisation and opt-in. An unsynced org is still a full workspace.
04 · The workspace

Everything in one window.
No more tab-switching.

Chat with agents, run terminals, read code, browse docs, and capture plans — without leaving the room. Atlas keeps the loop tight.

Refactor memory.ts to use streams.
→ read src/memory.ts
→ edit src/memory.ts +47 -12
→ run pnpm test ✓ 142
All 142 tests pass.
Chat

Coding agents, native.

Claude Code, Codex, OpenCode — any ACP agent. Stream responses, watch tool calls, and intervene mid-flight.

Merge #412 from chopratejas/fix-pypi f94a9d2
fix(ci): publish skip-existing 6a191b4
Merge #410 hotfix WS responses 1050e00
fix(proxy): inline WebSocket 4a50313
style(ci): ruff format 4f65421
fix(codex): drop env_key from blocks 32f499c
Deployed a7e1f93 with MkDocs 948b712
Deployed 0c46c7e with MkDocs 392e66f
Git Graph

Read the whole history.

Branches, merges, deploys — rendered inline. Click any commit to walk diffs without leaving your chat.

Atlas Proxy
2m ago
Wrap LLM calls with atlas_wrap() for memory + traces.
API Design
1m ago
Design from the ground up. Three primitives: Client, Session, Tool.
Open Q
5m
Cache policy?
Spaces

Plans, on a canvas.

Capture ideas as notes on an infinite canvas. Drag them into chat to give agents fresh context.

Terminal · browser · diffs · logs

Engineered for the long session.

Atlas is a desktop application. Compact, AMOLED, fast. Every detail is tuned for ten-hour days at the keyboard.

Integrated terminal

Split panes, tabs, search across history. Agents share the same shell — no context smuggling.

zsh · bash · fish

Built-in browser

Read docs, copy snippets, save to Knowledge — without losing your place. Atlas indexes what you save.

WebKit · indexed

Side-by-side diff

Every agent edit as a real diff — changed-files tree, minimap, hunk staging, conflict resolution. The view you'd use to review a PR.

unified · side-by-side

Activity log

Every agent action, every tool call, every commit — timestamped, searchable, replayable.

JSONL · grep-friendly

Blast radius analysis

See exactly which files, symbols, and tests an edit will touch — before the agent commits a single line.

/analysis · realtime

Token transparency

Per-thread token, call, and dollar counters live in the status bar. No surprise bills, ever.

live · BYO key
Git Graph

The real shape of your repo.

A custom lane-assignment graph renders every branch, merge, and deploy as you actually committed it — not as a flat list. Click any node to see the diff inline, without leaving your thread.

  • Lane-aware rendering — reads merges the way git log --graph can't.
  • Stage, unstage, commit — full git client. No terminal context-switch.
  • Branch picker — @branch in any thread to give the agent that branch's context.
atlas-core · git graph 128 commits · 6 branches
mainHEADWire ACP driver into chat panel pacifio f94a9d2
feat(acp): register codex + opencode adapters pacifio 6a191b4
Merge #410 from knowledge/sync-stream pacifio 1050e00
knowledge/sync-streamfix(knowledge): JSONL append race pacifio 4a50313
refactor(chat): lift session sidebar state pacifio c0baaf0
Merge #406 from canvas/note-inspector pacifio 1a3098a
canvas/note-inspectorfeat(canvas): tag panel contributor 32f499c
feat(canvas): note-node drag handles contributor bf1e31b
style: prettier on all features/ pacifio d54c5b6
feat(knowledge): markdown frontmatter contributor 1c6ae45
chore: bump tauri to 2.4 pacifio 09b8510
feat: branch-popover with checkout/create/delete pacifio a7e1f93
knowledge · auth-flow.md .atlas/knowledge/

Auth flow

architecture/auth-flow.md · updated 2h ago · 4 references
@architecture @auth @security

Token-refresh is opportunistic, not scheduled. The frontend never sees the refresh token; it lives only in the keychain proxy.

Boundaries

  • Access tokens live in memory for the duration of the session.
  • Refresh tokens are written to the OS keychain via tauri-plugin-stronghold.
  • Renewal happens on the backend; failures surface as a single auth.refresh.failed event.

Open questions

  • Do we eagerly refresh on app focus or wait for a 401?
  • How long should the keychain entry persist after logout?
Knowledge

Markdown for humans. System prompt for agents.

Atlas treats your project's knowledge base as a first-class surface. Notes live as plain markdown in .atlas/knowledge/ next to your code — one source of truth, read by you and by every agent thread in the project.

  • Files, not a database. Subdirectories, frontmatter, real markdown. Versioned with your repo.
  • Save threads as knowledge. Pick any agent thread, export it as a note. The agent learns from your last conversation, not your repo's hot air.
  • Plays nicely with CLAUDE.md & AGENTS.md — no migration. Atlas reads what's already there.
Reference system

@ anything in your project.

Pull files, folders, branches, knowledge notes, commits, and entire threads into your prompts. Atlas resolves the references locally and hands the agent exactly the context it asked for — nothing more.

  • File and line refs. @src/auth.ts#L40-80 sends a slice, not the whole file.
  • Branches, commits, knowledge. @branch, @commit, @knowledge/auth-flow. Same syntax.
  • Cross-thread references. @thread:plan-acp-driver gives the agent a teammate's prior reasoning.
chat · plan-acp-driver @-mention active
References · 6 results
main branch · HEAD
knowledge/sync-stream branch
src/features/chat/lib/acp-api.ts file
knowledge/architecture/auth-flow.md knowledge
thread:plan-acp-driver 2h ago
↑↓ navigate ↵ select esc close
Apply the same lane-assignment from @src/features/git/components/commit-node.tsx to the new @knowledge/sync-stream
Default @
editor · app.rs CodeMirror 6 · rust-analyzer
chat
axiosInstance.ts
queryClient.ts
app.rs
crates›abstract-cli›src›app.rs
1//! Application state, agent construction, and lifecycle management.
2
3use crate::config::AppConfig;
4use crate::permissions::CliPermissionPolicy;
5use crate::sessions;
6use atlas_native_agent::AgentSessionEffort;
7use atlas_agent_manager::AgentManager;
8use atlas_memory::retrieve::Retriever;
9use tokio_util::sync::CancellationToken;
10
11/// Run the application (REPL or single-shot).
12pub async fn run(cli: Cli, mut config: AppConfig) -> anyhow::Result<()> {
13 let theme = Theme::from_name(&config.theme);
14
15 // Resolve or create session ID
16 let session_id = if let Some(resume) = cli.resume {
17 sessions::last_session_id(&config)
18 .ok_or_else(|| anyhow::anyhow!("No previous session found"))?
19 } else {
20 uuid::Uuid::new_v4().to_string()
21 };
22
23 let memory_manager = build_memory_manager(&config)?;
24 let cancel_token = CancellationToken::new();
Editor

A real editor, not a textbox.

CodeMirror 6 with first-class support for JS, TS, Python, Rust, Go, Java, C++, JSON, YAML, Markdown, SQL, CSS, HTML, XML. Files are real files — ⌘S writes to disk.

  • Multi-tab. Open as many files as your project needs. Tab dedupe means no duplicates.
  • Save = event. Every save emits to the activity log; agent threads see your edits without polling.
  • No fork. Files on disk are the source of truth — you can close Atlas and pick up in vim.
Spaces · Canvas

An infinite canvas for thinking out loud.

Drop notes onto a spatial board. Link them with edges. Pin the ones the agent should treat as context. Everything persists as plain JSON in .atlas/canvas.json — so your thinking versions with your code.

  • Spatial notes. ReactFlow under the hood. Pan, zoom, group, connect.
  • Drag into chat. Pull any note into the composer to give the agent fresh context.
  • One canvas per project. Open Atlas, your map of the codebase is right where you left it.
spaces · canvas 4 notes · 3 edges
ACP driver plan just now

Three things to land before we can register Codex.

  • Adapter trait in atlas-agents
  • PID registry per stream
  • Permission policy mux
Adapter shape 2m ago

What every ACP adapter must implement:

fn spawn(&self) -> Result<Stream>
Open Q 5m

How do we surface streaming bytes from a long-running adapter to the chat panel without coupling to Claude's JSONL shape?

Refs 12m

The native agent's session lifecycle; Claude Code subprocess hand-off.

inbox · 8 unread ⌘⇧I
Unread All Mentions filtering: all sources
permission claude-code · session 8c4f
Agent wants to run cargo test --workspace — approve?
12s ago
stream-done claude-code · session a2b9
Refactored acp-driver.rs — 3 files changed, +47 -12, all tests pass.
1m ago
tool-use claude-code · session a2b9
Read src/features/chat/lib/acp-api.ts (148 lines).
2m ago
knowledge canvas
Saved thread "plan-acp-driver" to knowledge/threads/acp.md.
4m ago
branch git
Created branch acp/codex-adapter from main.
12m ago
stream-error claude-code · session 5e2d
Anthropic API returned 529 — overloaded. Retried 3 times, backed off.
28m ago
Inbox

Never miss what your agents did.

Every meaningful agent event — permission prompts, completed streams, tool calls, knowledge saves, branch operations — surfaces in a unified inbox. Approve, dismiss, jump back to the thread.

  • Permission prompts up front. Agents don't run destructive commands without your eyes on them.
  • Per-session filtering. Many threads running? Filter to one. Mute noisy sources.
  • One-key jump. ⌘⇧I from anywhere. Click a row to land in the source thread.
Activity Log

Replay any session. Replay any week.

Every meaningful event — chat sends, tool calls, file edits, git ops, terminal commands, knowledge writes — flows through a 500-event ring buffer in memory plus an append-only pinned log on disk. Searchable, filterable, JSON-expandable per row.

  • Survives restart. Pinned rows persist to ~/.atlas/log/pinned.jsonl.
  • Source & project filters. Drill into one agent, one project, one kind of event.
  • Grep-friendly. Plain JSONL on disk. Pipe it to jq from your terminal.
log · 500 events buffered 12 pinned · 2 projects
Search activity… All Pinned Chat Git Editor 5 / 500
Time Source Kind Summary
37s ago agent stream-done Refactored acp-driver — 3 files changed, +47 -12, all tests pass.
{
  "source": "agent",
  "kind": "stream-done",
  "sessionId": "a2b9727-634b-4129",
  "exitCode": 0,
  "durationMs": 18404
}
1m ago canvas note-add New note: "ACP driver plan"
2m ago editor file-save app.rs · 24 lines changed
2m ago chat send-agent "Wire the codex adapter into the chat panel."
4m ago git branch Created branch acp/codex-adapter from main.
memory · rust-owns-business-logic ~/.claude/projects/…/memory

Rust owns business logic

name: rust-owns-business-logic
type: feedback
description: all logic in Rust, React is view-only
feedback

Architectural rule: every piece of state and business logic lives in Rust. React is a view layer — it renders store snapshots and forwards intent over Tauri IPC, nothing more.

Why: a single source of truth survives window reloads and keeps performance predictable.

How to apply: new state goes in a Rust command + event, not a React hook. See [[permission-mode-sync]].

Memory inspector

See what your agents remember.

Atlas surfaces the memory your agents accumulate — Claude Code's per-project markdown and Codex threads — as a browsable, read-only inspector. Every fact, with its frontmatter, in one place.

  • Typed & categorised. User, feedback, project, reference — colour-coded so behavioural rules stand apart from facts.
  • Frontmatter, rendered. Read the exact name / type / description the agent keys recall on.
  • Wikilinked. Memories reference each other with [[links]] — follow the chain of reasoning.
Graph & timeline

Memory in space and time.

See the whole memory as a semantic graph — on-device embeddings cluster related facts and wikilinks draw the edges. Then scrub a timeline that lays commits, agent sessions, and memory on one axis to watch what your agents knew, and when.

  • On-device semantics. A local MiniLM model embeds every note — nearest-neighbour links, no data leaves your machine.
  • Ask in plain English. Query the graph in natural language and watch the relevant cluster light up.
  • Scrub the history. Branch swimlanes tie every agent session to the commit it produced — drag to replay.
memory · graph 42 notes · MiniLM-L6
rust-owns-logic
permission-sync
git-refresh
flex-minh0
agent-result
multi-window
bash-toolcall
timeline · last 14 daysjun 16, 14:20
jun 2 jun 7 jun 11 jun 16 session · 1050e00
On the roadmap

Teams shipped. Here's what's next.

Organisations, accounts, team chat and the session timeline are live. What is still missing is a knowledge base that humans and agents both consume across a team — the multiplayer half of what ships today.

"The capture, the chat and the timeline are the substrate. The next thing we ship is shared knowledge on top of them."
01

Shared knowledge bases

The same markdown files, mirrored across the team. Humans read them in Atlas; agents consume them as system prompt. One source of truth, both audiences.

Planning
02

Thread sync across teams

Save any agent thread to the team knowledge base. Teammates pick up exactly where the agent left off, with full reasoning history attached.

Planning
03

Version control for agent knowledge

Incremental versioning for CLAUDE.md, AGENTS.md, and every knowledge note. Diff agent context the same way you diff code. Roll back when an instruction regresses behaviour.

Exploring
04

Cloud integrations

Import knowledge from Jira and Confluence. Map tickets to threads, sync designs to notes. Stop copy-pasting context into prompts.

Exploring
05

Prompt polling & tickets in one surface

Open a ticket, post the prompt, gather team votes on the agent's plan, then approve the run. Plan and execution, no Notion ↔ Linear ↔ Slack pinball.

Exploring
06

Team-level agent reference systems

Aggregate knowledge and system traces across the team into shared reference indices. Every agent inherits the team's best context automatically.

Exploring
Pricing

Free for your team. Pay when it grows.

The app is free and your own keys always work. Plans add seats, synced projects, session storage and included AI for the team. Questions, or help choosing? Ask us on Discord.

Plans compared
Free $0/ month Get started Pro $20/ month Upgrade Team $100/ month Upgrade Business $200/ month Upgrade
Usage
Members325100
Synced projectsUnlimited50Unlimited
Session storageStandard100 GB500 GB
AI each monthNot included$40$80
Vectorization tokens / monthUnlimited100M300M
Meeting minutes / monthStandardStandardStandard
Features
Shared ThreadsIncludedIncludedIncluded
Participants per thread8825
Concurrent Runs per thread4410
Remote RunsNot includedIncludedIncluded
Also included
Highlights
  • Team chat and voice calls
  • Session timeline
  • 5× the AI of Pro
  • Remote Runs
  • 10× the AI of Pro
  • Remote Runs

Make agents part of the team.

Free during the alpha. Bring your own keys. Native binary for Apple Silicon, Intel and Windows, no Electron. The Atlas account is optional — nothing is gated behind it.

v0.3.4 · macOS 13+ (Apple Silicon & Intel) · Windows 10+ (x64) · alpha