The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Agentic Task System listing page.
Your task manager is the best agent memory you're not using.
ats is an MCP server and CLI that keeps AI-agent context in the task systems you already maintain — TickTick, Taskmaster, Beads, Obsidian, Notion, GitHub, Airtable, Google, or several at once through the composite adapter. It retrieves relevant tasks, notes, decisions, and runbooks with provenance, then can write results back when the active adapter supports writes. Works with Claude Code, Claude Desktop, Cursor, and any MCP client.
Adapter, not migration. Your task app, repository, or vault remains authoritative. ATS maps that source into a common task contract; optional caches and vector indexes improve retrieval but never become a second record that people must edit. It is task-first: the task is the spine, while supporting material such as GitHub issues and Notion specs is retrieved as context behind it.
Two layers, one CLI: tasks and a knowledge graph. The task layer is record-based on purpose — every entry lives in one backend's projects and fields, and that backend stays authoritative. A record-based layer structurally cannot hold the other thing agents accumulate: durable knowledge written from any source, about mixed subjects, into one space. The knowledge-graph layer — ats kg (kg = knowledge graph) — is ATS's answer to exactly that: subject–predicate–object facts with provenance and temporal validity, proposed by agents from anywhere (a call, a task, a repo, a chat), ratified by a human, and queried in one place no matter which backend the surrounding work lives in. The built-in store is embedded and dependency-free. For a dedicated graph engine, the recommended pairing is Graphiti as the graph database server and LadybugDB as the embedded graph database: ats kg export --cypher emits a LadybugDB-loadable script, and ats kg export (JSON, full provenance) is ready for a Graphiti ingest pipeline.
One ats find across GitHub + Notion + TickTick. ATS ranks the available retrieval branches with RRF and retains result provenance.
ATS separates the authoritative record from the retrieval machinery around it:
degraded and warnings. Known omission paths inside adapter fallbacks are called out under Tradeoffs and limits.find --explain exposes RRF contributions; writes use patch semantics, and supported writes can retain before-images for undo.The corpus cache can contain full task records; the query log contains search text; the action ledger can contain write before-images; and Qdrant payloads can contain task text and metadata in addition to embeddings. ATS does not apply application-level encryption or runtime redaction to these copies. Scope host access, backups, retention, and deployment to the sensitivity of the underlying task systems. See retrieval, state integrity, and the deployment guide for the exact behavior.
| Mode | Retrieval | Trust and operations boundary |
|---|---|---|
| Local stdio | Keyword/native retrieval by default; dense retrieval only when the adapter provides it | The MCP endpoint is not network-exposed. Adapter calls may still reach their source systems; credentials and cache files stay on the machine running ATS. |
| Composite adapter | One combined child corpus; Core ranks keyword and unioned native-search branches, with RRF across those available branches. The composite does not currently expose child vector search. | Each child owns its auth and mapping but runs in the same ATS process. A top-level child corpus failure is reported as degraded; see the known fallback gaps below. |
| Hosted blueprint | Keyword/native retrieval plus private Qdrant/Ollama services | A bearer-token MCP gateway and separate optional operator-deck backend are public; Qdrant and Ollama stay on the private service network. Qdrant/Ollama have disks, while ats-mcp runtime files are ephemeral by default. You operate token rotation, persistence, backups, availability, and hosting cost. |
“No migration” means no second source of truth. It does not mean zero derived storage.
| Approach | Authoritative record | Additional state | Retrieval |
|---|---|---|---|
CLAUDE.md / memory files | Markdown maintained for the agent | The files themselves | Whole-file or harness-specific lookup |
| Separate memory service | Agent-specific database | A corpus and ingestion path to maintain | Product-specific |
| Plain backend connector | Source task app, repository, or vault | Usually none beyond connector state | Direct fetch or backend-native search |
| ATS | Source task app, repository, or vault | Cache, query/action/event state; optional derived vector index | Keyword + native + optional dense retrieval, RRF, provenance, typed context |
ATS is a good fit when operational context already lives in task systems or connected work tools and agents need ranked, traceable retrieval across them. If clean Markdown is already the complete source of truth and whole-file loading stays small, a file-native workflow may be simpler.
find carries a confidence verdict from branch agreement (--min-sources N is the matching gate), --project binds it to one project, a stale corpus cache answers immediately while it refreshes in the background, and an empty exact match (notes find, search, get) answers with the nearest items instead of nothing.update --append / --prepend add to the body that is there; --if-match <contentHash> lands only while the body is unchanged; create --if-absent and --idempotency-key make a retried create return what the first one produced. One retry policy (Retry-After, jittered backoff, transient 5xx, dropped connections) sits under every adapter's HTTP path.decision / depends-on / output / supersedes link; a later agent in a fresh context receives it via ats context. The handoff lives in the task app, not a chat log.ats intent captures outcome/why/done-when; ats lifecycle keeps stale context from steering current work; ats security records scoped allow/deny decisions for cooperating clients; ats ledger records what an agent did and whether the task advanced; ats promote turns exploration into a committed goal; ats hierarchy evaluate checks local work still supports its parent.ats events watch --json emits deterministic task.created/updated/completed/... NDJSON, spooled 0600 with pending/ack recovery and stable dedup IDs. ATS only emits observations — a consumer still evaluates intent, validity, and security before acting.docs/task-graph-for-agents.md.ats kg keeps durable subject–predicate–object knowledge beside the tasks: agents propose, a human ratifies (the only write path), and ats kg ask answers with deterministic lexical scoring plus full provenance — no LLM, no graph server, an append-only file that travels with ats state export. Retraction closes a fact's validity interval instead of deleting it, and ats kg export --cypher loads the graph into embedded engines (LadybugDB/Kùzu).docs/agent-session-index.md.ATS-managed execution metadata can be encoded in the task body, with typed links under ## Related and consulted sources under ## References. Managed helpers are designed to preserve human-authored rows and links; update --content replaces the complete body, so callers that add to a body use --append / --prepend, present the contentHash they read with --if-match, and verify the result. npm run prove:intent runs a deterministic synthetic proof of the execution-context path.
ats config use <adapter>, authenticate as its README describes, then run ats doctor.ats find "deployment runbook" --json ranks the branches available from that adapter and retains provenance.ats context <project> <task> uses the common adapter contract and does not require an adapter-specific notes layer.ats intent set <project> <task> --outcome "..." --done-when "a,b" and ats link add <src-project> <src-task> <dst-project> <dst-task> --type depends-on.ats context <project> <task> to read back linked decisions, dependencies, proof, lifecycle state, and relevant retrieval results.The optional operator deck is a static phone-oriented web app deployable to Cloudflare Pages. The supplied Render blueprint builds the MCP gateway/server plus private Qdrant and Ollama services.
After deploy, copy the auto-generated ATS_MCP_TOKEN from the ats-mcp service's Environment tab, point your MCP client at https://<your-mcp-url>/mcp with header Authorization: Bearer <ATS_MCP_TOKEN>, and set TICKTICK_ACCESS_TOKEN to read your real tasks. Prefer your own machine or a VPS? Same pieces as plain Docker containers — see the deploy guide.
Backend connectors let an agent reach Notion, GitHub, and task systems, but access alone does not provide one ranked answer to a question such as "what do I know about the auth migration?" ATS adds a common retrieval layer: the composite adapter combines installed child corpora, namespaces their project IDs, unions supported native-search results, and lets Core rank the available branches with provenance. Each child reads its own credentials, but all configured children execute in the same ATS process.
| Adapter | Authoritative source | Retrieval or write notes |
|---|---|---|
ticktick | TickTick OpenAPI v1 | Keyword/native retrieval works without vectors; optional Qdrant + Ollama add dense retrieval. |
obsidian | Local Markdown vault | File-native, patch-style writes preserve unknown frontmatter. |
okf | Open Knowledge Format Markdown bundle | Local bundle. |
taskmaster | Local .taskmaster/tasks/tasks.json | Repository-local task state. |
beads | Repository-local Beads via bd --json | Dependency-aware local task state. |
airtable | Airtable REST API (table = project) | Adapter-scoped API access. |
google | Google Sheets / Docs / Slides | Read-only. |
notion | Notion databases + pages | Integration-scoped access. |
github | GitHub issues + discussions | Repository-scoped access. |
composite | Installed child backends | Combines child corpora, namespaces project IDs, unions native-search hits, and routes writes; it is not an independent record store and does not currently expose child embeddings. |
things / apple-notes / google-tasks | — | Wishlist, not implemented. |
Per-adapter auth and mapping live in each package's README. PRs welcome — scaffold and verify against the contract:
ats cache sync refreshes the cache on demand (cron-friendly) — incrementally when the adapter implements bulkFetchDelta(), as a full refetch otherwise.find still returns keyword/native results when vectors are unavailable, although an attempted vector branch can make the response degraded; vector-only hybrid and similar operations still require that infrastructure.warnings says what is missing, not whether it mattered.ats dedup is a separate analysis command. Fusion identity is namespaced per backend (<backend>:<taskId>), so identical raw ids from different backends stay distinct results; semantically duplicate tasks still appear separately until you link them.ats-mcp; its cache, query log, action ledger and undo before-images, event spool, and vector-sync metadata disappear on a restart or redeploy.ats events watch can report task changes, but a consumer must still evaluate intent, validity, and security before taking an external action.ats kg ask is deterministic keyword scoring with provenance, not semantic search, and nothing reaches the fact store without human ratification — a burst of agent proposals waits for review by design.intent.approvalRequired or lists the action in security.approvalRequiredFor stages into ats review instead of reaching the backend (ATS_REVIEW_ALL=1 gates every write) — but this guards ATS's own write path only. ats security check remains an application-level decision point for cooperating clients, and nothing here intercepts shell, filesystem, network, model, or secret access outside ATS. A client calling an adapter directly bypasses the CLI gate."trust": "public" child that matches a pattern is blocked, not silently stripped (see the composite README). That screen guards ATS's own composite write path; it is not general data-loss prevention.Task mapping, result provenance, and explainable RRF contributions.These gates verify repository behavior; they are not a production availability or security certification.
@reneza/ats-mcp exposes the active adapter as a tool set spanning retrieval, CRUD, and execution context (find, get_task, create_task, set_task_intent, add_task_link, resolve_task_links, context_for_task, record_action, undo_write, poll_task_events, and more). For Claude Code this provides persistent context between sessions without replacing the task system as the source of truth; optional caches and vector indexes remain derived retrieval state.
ATS speaks MCP over stdio, so any client that can launch a stdio MCP server works. Only the config file and the wrapper key differ; the binary (ats-mcp) and its ATS_ADAPTER env are the same everywhere.
| Client | Where the config lives | Wrapper key |
|---|---|---|
| Claude Code | claude mcp add (below) | n/a |
| Claude Desktop | claude_desktop_config.json | mcpServers |
| Cursor | ~/.cursor/mcp.json | mcpServers |
| Windsurf | ~/.codeium/windsurf/mcp_config.json | mcpServers |
| OpenCode | opencode.json | mcp (shape differs, below) |
Install the binary on PATH first (npm i -g @reneza/ats-cli), or use an absolute path to ats-mcp if your client does not inherit your shell PATH.
Permanent Notes) holds durable knowledge; others hold ephemeral tasks.json / yaml block, extracted via ats get <title> --extract json.ats url <title>, don't hand-write.docs/wiki-conventions.md.ATS tests managed metadata rewrites for preservation of human-authored fields, requires explicit store-to-Task mapping, and carries result provenance (sources, find --explain). Coverage and raw-update behavior remain adapter-specific. A publication-safety gate (check-no-pii.mjs) fails the build when covered personal-data patterns appear in repository or package surfaces. Full note: docs/state-integrity.md.
For the agent-side operating model, see docs/task-graph-for-agents.md: task text is the human projection, but the execution layer needs structured links, proof commands, review requirements, and writeback targets.
Contributions welcome — bug fixes and especially new adapters under packages/adapter-*.
See CONTRIBUTING.md for the dev setup and adapter pattern, and
AGENTS.md if you drive a coding agent over the repo. Working on the source,
pi-codegraph gives your agent a
call-graph of the monorepo — the adapter pattern and the blast radius of a core change —
so it stops re-reading the whole tree each session.
v0.10.0 added partial-retrieval reporting, optional reranking, usage observability, duplicate/contradiction detection, and reactive OAuth refresh. v0.9.0 added reversible writes, forward/dangling links, Obsidian path hardening, and verified stdio configuration for more clients. Full history: CHANGELOG.md.
MIT. See LICENSE.
If ATS is useful, consider a ⭐ — it helps others find it.