Understand your system as AI agents change its code.
A map of what your code does and why, kept as Markdown in your repository
and read by both you and your coding agent.
Download for macOS · Try it in the browser · Guide

Why
Coding agents now change code faster than a team can keep a picture of it in their heads. Atlas keeps that picture beside the code: what each part is for, which files implement it, what depends on what, and what nobody knows yet. Your agent reads it before a task and proposes updates after; you keep, correct or reject each change as a Markdown diff.
- Your agent starts with context. Claude Code, Codex, Cursor and Antigravity read the concepts, code paths, dependencies and open questions a task touches, over MCP.
- You own the record. One Markdown file per concept in an
atlas/folder, versioned and reviewed in Git like the code. - You decide what is true. Agent proposals stay proposals until you accept them.
- It says what it does not know. A line on the map is a declared relationship, not proof of runtime impact; missing evidence shows as unknown, never as safe. Compact task handoffs preserve whole uncertainty statements or report omissions with the document reads needed to inspect them. Initial analysis also excludes literal Markdown examples and marks truncated document evidence for review with a hash-bound original-source follow-up. Task matching and navigation use authored evidence; code examples, hidden comments and blockquotes cannot supply capability claims or work coordinates.
See it
![]() Projects — every project and how much of it has code evidence. | ![]() Library — documents in, cited wiki pages out. |
![]() Planning — read a project folder's Markdown in place, without copying it. | ![]() Briefing — what changed in a period, as pull requests, commits and files. |
![]() Analysis — which parts depend on which, with the evidence beside each claim. | ![]() Git — the exact Markdown diff before you save. |
![]() Harness — what your repository tells, blocks and watches for agents. | ![]() Automations — scheduled checks that keep the folder current. |
New in v1.9: Git and pull request briefings, which read a repository's pull requests, commits and files in separate views, and Planning, which reads a project folder's Markdown in place. See the releases.
A few things worth knowing before you start:
- The map shows declared relationships, not proof of runtime impact; its key explains every mark and direction. Map
- An empty folder offers its start actions, and a failed start can be retried without overwriting files. Popup tours are retired. First run
- Library setup and checks need the app; a browser offers the app or adding files. Library
- Planning is read-only and works in the macOS app on a folder you choose; it shows Markdown and PNG/JPEG images. Planning
- Before a folder is connected, the app keeps Library, Planning, Agents and Briefing reachable. Features
Quick start
- Install the app from the download page, or open the browser version.
- Open a folder. Atlas reads its Markdown in place, or starts an
atlas/folder in your repository, and shows the path before it writes anything. - Connect your agent. In Agents › MCP, press Connect for your tool, restart the agent, and ask about your next task.
macOS (Apple Silicon) is signed and notarized and carries the MCP server inside the app. Windows x64 is an unsigned beta. On Linux, use the browser version or run the CLI and MCP server from a source checkout. Releases list each version's files and checksums.
How it works
your-repo/
├── src/
└── atlas/ ← cloned, branched and reviewed with the code
├── project.md
├── domains/ capabilities/ elements/
├── sources/ documents kept exactly as they arrived
└── wiki/ pages written from those sources, every fact citedA Markdown file whose frontmatter has kind: is one concept. Its uid never
changes, its slug is its current address, and its path names the code it
describes. The map, documents, Library, Insights and Git screens all read these
files.
Your agent reaches the folder two ways:
- MCP: the agent starts the Atlas MCP server, which reads and writes the folder on disk, even with the app closed. Connect an agent · MCP reference
- ACP: Claude Agent and Codex also run in the app's own chat; each write waits until you allow it. Agents
A project's source-path repair opens the affected concept and recorded relative path; stale or missing targets require remeasurement.
Project checks distinguish a document changed since its last meaning review from malformed input. They ask for review and explicit re-finalization; supported code paths and saved changes do not accept the meaning. Analysis filters capabilities by changed, missing or unchecked source evidence while keeping the selected claim open.
Codex's locally configured permission profiles are excluded from the in-app mode picker because their effective approval behavior is not disclosed. Read-only startup stays required; an unsolicited move into a profile is reported as unverified, without claiming the runtime was stopped.
The full project editor confirms leaving unsaved changes inside the app, so Cancel and Back work in the macOS WebView as well as the browser.
The Analysis review summary lists the agent-authored concepts without a recorded human review, with exact concept links and five more entries per expansion. Opening a concept does not mark it reviewed.
Analysis compares recorded dependencies between responsibilities, then opens the exact concepts and declaring document beside the selected claim. Implementation records, unchecked source and missing explanations stay distinct. In the macOS app, documents and cited files can be dated in their respective bound Git repositories; missing access or history stays unknown, and a folder chosen for reading must match the existing connection. Analysis
Local-first
The installed app's Briefing prototype opens a chosen Git repository without requiring an ontology. Pull requests, commits and files have separate reading views. An explicit public GitHub read lists PRs updated in the selected local dates, including open and closed work; a moving, paginated list may be incomplete. Each PR original is attributed and remains inspectable. Commit-only summaries use a local model, while the separately labelled earlier combined briefing retains matched PR descriptions and earlier results. Private PR access and in-app ACP explanations are not yet available in the PR inventory. Failed reads retain the session's earlier results. Inspect individual commit messages and bounded, endpoint-based file comparisons inside Atlas. Author records and optional ontology grouping do not establish verified behavior changes. Change briefing
- No backend, account or telemetry. The folder stays plain Markdown on your disk.
- Model calls with your API key or a local model are opt-in, and each records its destination in
.ontology-atlas/llm-audit.jsonl. - A connected coding agent may send your prompt and what it reads to its own provider; Atlas's log does not cover those transfers.
Status
Atlas is early. Our benchmark has not yet shown better answers with Atlas, and Atlas was slower (the correction). Construction trials, their failures and limits are in the construction measurements.
Documentation
What is Atlas? · First five minutes · What becomes a node? · Relations · Specification · Features · CLI · Architecture
Contributing
Read CONTRIBUTING.md; external pull requests come from forks. AGENTS.md is the contract for people and agents alike.
pnpm install
pnpm dev
pnpm checks:changed -- --runpnpm pr:land <number> merges a reviewed pull request and keeps its original
commits. Development checks is the full gate reference.
Pre-push checks the commit being pushed and runs affected lint, unit and Node tests in parallel with the relevant cheap checks. CI owns browser, full contract and dependency-graph verification. Test-only edits to CI tooling run their regressions without starting unrelated product suites; changes to the planner implementation still require exhaustive CI.
Repository commands
| Command | What it answers |
|---|---|
node scripts/ci/run-playwright-ci.mjs --help | Browser shard options, without discovering or running tests; unknown options fail before execution |
pnpm agents:check | Each harness's instruction files are valid; Codex and Claude files need not match |
pnpm brief:new -- --slug=<slug> --owns=<path,...> | A delegation brief with the port, scratch, checks and merge lines filled in |
pnpm build:static | Reuse out/ only for matching build inputs; fail without a reuse stamp if inputs change during the build |
pnpm bundle:plan · pnpm bundle:prune | Plan merging several branches as one, then prune the branches main contains (/merge) |
pnpm checks:changed | Which gates this change needs |
pnpm conflicts:scan | Which open pull requests change the same files as this branch, and whether a trial merge conflicts |
pnpm decisions:find <terms> · pnpm decisions:check | The decision to cite or overturn, and whether this change owes one |
pnpm design:tokens -- [--prefix=<name>] | The current token ramps, resolved from app/styles |
pnpm doc:new -- --type=<kind> --area=<area> --slug=<slug> | A new living document from its template in docs/.templates/ |
pnpm docs:check | Docs gates, including pnpm docs:language, pnpm source:language, pnpm changelog:check, pnpm dev-checks:check, pnpm docs:meta |
pnpm docs:meta · pnpm doc:history -- <path> | Every living document's kind, status and area; one document's commits across moves |
pnpm docs:move | Moves the documents in docs/.moved.json and rewrites references (-- --check only reports) |
pnpm e2e:durations -- <timings dir> | Rebalances the browser shards from downloaded playwright-timings-* reports |
pnpm e2e:sleeps:check | Refuses a new fixed waitForTimeout without a // measurement window: note |
pnpm gates:yield -- --runs=200 | Which CI checks ever failed, per run, from the lane reports CI uploads |
pnpm gateway:capture -- --base-url=<static export> | Re-shoots the six app screens on the download page, in Korean and English |
pnpm harness:tokens -- --since=<date> | Where Claude Code tokens went per agent type, from local transcripts, and which runs broke the compaction window or turn caps (budget) |
pnpm knip | Dead files, exports and types |
pnpm licenses:check · pnpm notice:build · pnpm notice:check | Shipped packages are on the license allow-list, and NOTICE.md is current (rules) |
pnpm messages:build · pnpm messages:check · pnpm messages:adopt | Compose messages/<locale>.json from one file per namespace, prove it current, and carry an old branch's edits |
pnpm messages:coverage -- --locale <code> | Checks one locale's strings against en: arguments, plurals, script, keep-terms and typography |
pnpm perf:mcp:memory · pnpm perf:mcp:memory:check | Whether the MCP server releases memory across repeated calls; about a minute |
pnpm pr:ci <n> | Fire CI on a draft now |
pnpm pr:land --plan <n...> · pnpm pr:land --conduct | Dry-run a merge, or merge queued pull requests until the queue is empty |
pnpm pr:land <n> · pnpm pr:queue | Queue a pull request to merge (green ones merge together behind one CI run), and show the queue |
pnpm review:facts -- --base=<ref> | The mechanical facts a reviewer would otherwise count by hand: line growth, 800-line files, export and dependency changes, untouched sibling tests, security paths |
pnpm seo:check | After pnpm build: every sitemap URL in out/ canonicalizes to itself, / and each locale root point at /{locale}/download/, and titles and descriptions are unique per locale |
pnpm typecheck | Types across every file, with Next's generated route and page types |
pnpm ui:audit -- --url=<base> --route=<path> [--setup=<module.mjs>] | Prepare an interactive state with an optional local module, then measure rendered facts per width: horizontal overflow, occluded or unreachable controls, small touch targets, off-ramp type/radius/shadow values, low contrast, unequal repeated sets, scroll-end reserve |
Use --scope=<selector> to audit one visible modal or region. The selector must match exactly one visible element; the report includes its measured element count.
License
MIT. Third-party notices are in NOTICE.md, and the full license texts in public/third-party-licenses.txt. The pixel mascot and its sources are described in Brand.







