Docs
Own your context. Carry it between agents.
Pantheon stores your saved context in one private GitHub repository you control. Start with the guided setup, then learn handoff, resume, skills, sharing, and every command.
Installation and setup
Vault → agent → first handoff. Follow these in order.
About two minutes.
- 1VaultCreate your private repo
- 2AgentConfigure a desktop app
- 3First handoffSave one conversation
Create and connect your private vault
Create one dedicated private repository in your GitHub account, then install Pantheon with access only to that vault. 100% of your saved context stays there as readable files; the web app stores only account and connection metadata.
Create private vaultConnect a desktop agent
Desktop agents · Full transcript
Cursor, Claude Desktop, Claude Code, Codex, and Windsurf. Running Pantheon locally is what preserves the real conversation, recorded tool activity, and files instead of a model-written summary.
Why the npm command is recommended
It gives this machine the current pantheon command and lets one setup configure every detected agent. It is not a desktop app or background daemon. It runs only when you invoke it or an agent starts Pantheon MCP. Node.js 20 or newer is required.
Install the Pantheon command
npm install -g pantheon-cli@latestKeep @latest so a new setup does not inherit stale connection behavior.
Pair this machine
pantheon connect <pairing-code> --host https://www.pantheonvault.spaceOverview gives you this command with the short-lived code already filled in. Pairing saves the vault connection locally; it does not copy conversations into the web app.
Configure detected agent apps
pantheon mcp-installThen reload MCP or restart each agent app. Pantheon writes the supported configuration files and preserves unrelated MCP servers.
Prefer to configure only one desktop app without a global command? Use the manual, token-based setup under Manual desktop setup; its config launches npx -y pantheon-cli@latest mcp when that app starts.
Save your first conversation
/pantheon-handoff my-projectType this in the chat, not a shell. The name you pick is the space; the first handoff creates it and archives the current conversation.
Resume that conscience
/pantheon-resume my-projectType this in another connected desktop agent—or in a later chat—to load the space packet, durable memory, session map, stored files, and relevant skill triggers.
How Pantheon works
Every agent starts empty. Pantheon stores a conscience — the real conversation, the durable facts, and the files you made — in a private GitHub repo on your account. You own that repository and 100% of the context saved inside it. A project conscience is called a space: a short name you choose, like preorders or annotation-design.
Agent A
/pantheon-handoff
Your vault
your private repo · only vault connected
Agent B
/pantheon-resume
This is not a transcript copier. Handoff archives the conversation verbatim and writes a distilled packet on top of it — the packet is a layer, never a replacement. Hand the same chat off twice and only the new turns are added; hand off a different chat and it joins the space as another session. Nothing a space has ever held is overwritten.
Your context belongs to you
The private vault repository is the source of truth—not a backup or export. Pantheon's database stores account and pairing records plus the credentials needed to connect to your vault, but never your conversations, memories, decisions, or artifact contents.
One private vault
Install Pantheon with “Only select repositories” and choose pantheon-vault. Pantheon receives no access to your other private repositories.
Plain, inspectable files
Sessions, memory, artifacts, and skills remain readable in GitHub with ordinary commits and history. Pantheon is not required to inspect them.
Control stays with you
Clone, export, audit, revoke access, or delete the vault whenever you choose. Pantheon keeps no separate database copy of your saved context.
GitHub notes that public repositories remain readable because they are already public. The selected installation gives Pantheon write access only to your dedicated private vault.
Context continuity
A context window is temporary working memory. Context continuity is the system property that carries the state of the work across a fresh chat, a model switch, or a different agent application—and reconstructs only the part the next task needs.
Outside the model
The conversation, decisions, files, and reviewed lessons persist in your vault after the active context disappears.
Bounded on resume
The next agent receives a compact packet and a complete map rather than spending its window on the whole archive.
Evidence remains openable
A summary points back to addressable sessions, turns, tool calls, and artifacts instead of becoming the only surviving account.
Portable across agents
The conscience is stored independently of one model and exposed through the same MCP retrieval tools to supported desktop clients.
Long context stores more tokens inside one run. Continuity preserves the project when that run ends. The research page reviews the evidence from long-context and long-term-memory benchmarks and documents Pantheon's design boundaries.
Resume and retrieval
Resume does not pour the archive into the model — that would spend the context window it is trying to save. It hands over a complete map and lets the agent fetch what it needs.
handoffThe space packet: current and earlier summaries, stored files, and the latest fourteen spoken turns across sessions.
memoryEvery durable fact ever saved to this space, appended across all handoffs.
storyPackets from earlier handoffs, oldest first, so the narrative outlives any single session.
sessionsEvery archived conversation with its turn count and dates. Each id opens directly.
turnsHow many turns the whole space holds — not just the session the packet describes.
artifactsFile names across every session. The actual bytes are fetched on demand with pantheon_get_artifact.
sessions and story are what stop a thin handoff hiding a long project. handoff.md is written for the space rather than the last chat — its totals, its stored files, its most recent turns wherever they happened — so ten minutes of tidying cannot overwrite the account of a month’s work. Resume also reports the total turn count across the space and names every conversation in it, so the agent knows the rest exists and can open it.
When the packet does not cover what you are asking about, the agent searches rather than guessing. pantheon_search reads tool calls as well as messages — a file is findable by name even if nobody typed that name in prose — and takes a context window so a hit comes back with the turns around it. From a hit it can widen with pantheon_get_turns or read a whole conversation with pantheon_get_session.
If a resumed agent says it has no context for something you know you discussed, ask it to search the space. Missing context is nearly always unsearched rather than unsaved.
Skills
A skill is a lesson this project already learned, written down so the next agent starts with it. Memory is fetched when an agent goes looking; resume hands over every promoted skill's name and trigger, then the agent fetches the body only when the work matches. That is the whole difference, and it is why there are never many.
When a successful handoff adds turns, the agent compares recurring signals with existing live and draft lessons, reads the cited turns, and batch-saves at most five justified drafts without interrupting you. Run this command to review again at any time:
/pantheon-skills my-projectSkills walkthrough
Review evidence, promote a draft, and watch the next agent apply it.
What it reads: the corrections you had to repeat across conversations, the commands that recur across sessions, and any failure that hit more than once. It also checks your AGENTS.md and README, and will not write something they already say.
The strongest evidence usually is not in the vault at all. Most agents record which tools they called but not what came back — Cursor writes no tool results to disk — so what a command actually printed when it failed exists only in the live conversation. That is why the review runs during handoff, where the agent can weigh what it saw alongside what was stored.
You approve on the space page
The agent writes at most five drafts without interrupting the chat. A draft is inert and given to no agent until you promote it; discard anything that did not earn its place.
A lesson is recorded once
Review exposes existing live and draft triggers before writing. The vault also refuses repeated names, candidate keys, triggers, and bodies instead of quietly creating another copy.
Every claim cites its source
A skill records the sessions and turns it came from, and the vault refuses to save a citation that does not resolve to a real turn. You can open the moment and judge it yourself.
Twelve live skills per space
Resume carries each promoted skill's name and trigger. The agent fetches its body only when the work matches, and promoting a thirteenth is refused rather than silently dropping another.
Drafts wait on the space's own page in this app, under Skills, with the turns each one cites listed beside it. Promote one and every future resume of that space names it; retire it and it stops being served. An agent reads the guidance itself with pantheon_get_skill when it is about to work in an area a skill covers — resume only carries the names and triggers, so an unopened skill costs a line rather than a page.
Data fidelity: what gets saved
Pantheon setup focuses on desktop agents because that is where the real session record exists. A local MCP process can read the conversation the client already stored on disk, including recorded tool activity and files, without asking the model to reconstruct its own history.
Desktop connection · Full transcript
Cursor · Claude Desktop · Claude Code · Codex · ChatGPT.app · Windsurf
- Every user and assistant turn
- Word for word
- Recorded tool activity
- Included
- Files made during the chat
- Collected automatically
- Durable facts and decisions
- Distilled on top
Pantheon starts on your computer and reads the session files the agent already records there. That local access is what makes a handoff more than a summary.
Browser-only agents are not offered in the setup flow. A remote server cannot read their session files, tool results, or locally generated artifacts, so a handoff would depend on whatever summary the model chose to send. Resume remains most useful when both the leaving and receiving agents use the desktop connection.
Supported apps
Pantheon supports agent apps that can start a local MCP process. That local process is what gives the handoff enough fidelity to be a conscience rather than another summary.
Cursor
Workspantheon mcp-install writes ~/.cursor/mcp.json (Windows: %USERPROFILE%\.cursor\mcp.json)
Reload MCP, then type /pantheon-handoff <space> in a new chat.
Claude Code
WorksWrites ~/.claude.json and ~/.claude/commands/pantheon-*.md (same paths under %USERPROFILE% on Windows)
Restart Claude Code so the slash commands load.
Claude Desktop
WorksWrites Claude Desktop mcpServers (macOS Application Support or Windows %APPDATA%\Claude). Launches Node directly — no bash.
Fully quit and reopen Claude Desktop after install.
ChatGPT.app / Codex
WorksWrites ~/.codex/config.toml (Windows: %USERPROFILE%\.codex\config.toml). On macOS also writes ChatGPT.app's shared MCP file when that app exists.
Use the new ChatGPT.app (Chat or Codex), not Classic. Settings → MCP servers, then /mcp in a new chat.
Windsurf
WorksWrites ~/.codeium/windsurf/mcp_config.json when that folder exists
Reload the window after install.
ChatGPT Classic
Not local MCPNo local MCP config. OpenAI left this as the legacy chat app.
Local stdio MCP lives in ChatGPT.app / Codex. Classic cannot start pantheon-mcp, so /pantheon-spaces will guess.
Replit Desktop
Not local MCPReplit Desktop cannot start the local MCP process Pantheon needs for transcript capture.
The reduced-fidelity HTTPS setup is no longer offered; use a desktop agent that records a local session file.
The complete desktop instructions live at the top under Installation and setup, so there is one setup sequence to follow. After changing any MCP configuration, reload MCP or restart the app before the first handoff.
ChatGPT.app and Codex share ~/.codex/config.toml. ChatGPT Classic is the legacy app and cannot start a local MCP server.
Command reference
Type these to a connected agent. Behind each one is a pantheon_* tool the model calls; if those tools are missing it should say so rather than invent spaces.
/pantheon-handoff <space>Archive the real back-and-forth — read off disk, every turn and tool call, not a recap the model retypes — attach the files that thread produced, then commit and push. Repeating it on the same chat adds only the new turns. The name you type is the space. First handoff creates it, so the agent must not refuse because the name is new.
/pantheon-resume [space]Pull the vault, then load that conscience: the latest packet, every durable fact, the packets from earlier handoffs, every archived conversation with its turn count, and the stored file names. The packet describes only the last session, so the agent can search and open the rest. If you omit the name it lists live spaces and asks which one; the space must already exist.
/pantheon-park <space>Archive turns or files into that conscience without rewriting the latest packet, then push. A new name is allowed — park can create the space.
/pantheon-remember <space> <fact>Save one durable fact on that conscience, then push. Does not dump the chat. A new name is allowed.
/pantheon-spacesList consciences from the vault. The agent must call pantheon_list_spaces and show only that result. It must not invent names from memory.
/pantheon-skills <space>Re-run the post-handoff skill review for a space. The agent checks recurring corrections, procedures, and failures against existing lessons, then batch-saves up to five justified drafts. Approve or reject them on the space page.
/pantheon-helpShow the Pantheon guide inside the agent.
Naming spaces
A space is the short name you give a conscience. Letters, numbers, dots, underscores, hyphens — one token, not a sentence.
- Handoff, park, remember — if you typed the name, the agent calls the tool. First write creates the space. It must not say the space “still needs to be created.”
- Resume — existing spaces only. If you omit the name the agent lists live spaces and asks which one; if the name is not in the vault it should say so rather than pick a neighbour.
- /pantheon-spaces — the live vault list and nothing else. Never memory, this chat, or another app.
Files
If the chat produced a PDF, letter, CV, or spreadsheet, handoff attaches it as an artifact. Naming a .pdf without attaching it is rejected, so a space never promises a file it does not hold. Desktop agents pass an existing local path, agents without a shared filesystem can pass a downloadable HTTPS URL, and inline base64 remains a fallback. Pantheon never needs the agent to regenerate or convert a file for handoff. Named code fences are stored automatically.
Resume lists file names without loading their bytes into the context window. When one is needed, pantheon_get_artifact returns the actual file as an MCP resource. A local desktop agent can instead restore it into the current workspace with save_to; Pantheon confines the destination to that workspace and will not overwrite an existing file.
Host it yourself
The control plane is a Next.js app backed by Postgres. It stores accounts, tokens, and paired machines — never conversation content, which lives only in your own GitHub repo. The App installation is restricted to that dedicated vault and receives no access to your other private repositories. Nothing depends on a persistent disk, so it runs happily on Vercel or any container host.
- Create a Supabase project and copy the Transaction pooler URI — port 6543, not the direct connection, which resolves to IPv6 only.
- Put it in DATABASE_URL, then create the schema. Tables live in a dedicated pantheon schema so Supabase never exposes them through PostgREST.
cd apps/webpnpm db:migrate- Set NEXT_PUBLIC_APP_URL to your HTTPS origin before building — it is compiled into the client bundle, not read at runtime.
- Point the GitHub App callback to https://your-domain/api/github/callback and the setup URL to https://your-domain/api/github/setup.
- On Vercel, set the root directory to apps/web and leave “include files outside the root directory” on — the app depends on workspace packages, so the install has to run at the repo root.
Confirm it came up. A green check here means Postgres is reachable, not merely that HTML is being served.
curl https://your-domain/api/healthFree Supabase projects pause after about a week of inactivity, so point an uptime check at that endpoint — it runs a real query, which keeps the project awake.
Troubleshooting
Open the one that matches what you are seeing.
Does Pantheon access all my GitHub repositories?
No. Choose Only select repositories and select pantheon-vault. Pantheon refuses installations that can access all or multiple private repositories. GitHub may still mention read-only access to public repositories because those repositories are already public. You can revoke the vault installation at any time.
The agent lists spaces that do not exist
It is answering from memory because the Pantheon tools are not attached — either MCP is not connected, or you are in ChatGPT Classic, which cannot start one. Ask the agent what it actually has before trusting the list.
/mcpA handoff saved a summary instead of the real thread
A browser-only connection cannot read the agent's session files. Pantheon no longer offers that reduced-fidelity setup in onboarding; connect the desktop app through Settings → Manual desktop setup. Nothing is lost — the next desktop handoff fills in the full history.
It refuses a space name I just made up
First handoff creates the space; there is no separate create step. Tell the agent to call the tool rather than check a list first.
pantheon_handoffHandoff mentions a PDF and then errors
Naming a file without attaching it is rejected on purpose, so a space never promises something it does not hold. Attach the existing file by local path or downloadable HTTPS URL and retry; inline base64 is only the fallback. Do not regenerate a new file for the handoff.
command not found: pantheon
Apps launched from the dock often start without your shell's PATH. Use the npx config, which needs nothing installed, or point the config at the absolute path.
which pantheonHandoff captured the wrong conversation
Pantheon normally selects the session whose latest human message contains the handoff command, then falls back to the most recently recorded session. Every receipt reports the last message it read. If that is ever wrong, list the sessions on this machine, retry with the correct sessionKey, then delete the wrong archive because an unrelated transcript misleads every later resume.
pantheon_local_sessionspantheon_forget_sessionHandoff says it cannot read my chat
Capture reads the host app's own log, and only Cursor, Codex and Claude Code keep one Pantheon can parse. Claude Desktop, Windsurf and web chats run locally or remotely but store conversations elsewhere, so there is nothing on disk to read. Rather than archive whichever unrelated chat happens to be newest — which is what it used to do — Pantheon refuses and asks the agent to send the thread itself. The handoff still works; it just costs the agent tokens to retype the conversation.
A resumed agent says it has no context for something we discussed
The packet covers the whole space, but it is a summary — the detail of an older conversation is in the archive rather than in it. Ask the agent to search the space: it reads tool calls as well as messages, and resume already told it every session id it can open.
pantheon_searchThe push failed
A handoff says so rather than pretending it worked, so nothing is silently lost. Check the app is reachable and retry; this is the escape hatch that commits, pulls, and pushes the vault by hand.
pantheon syncReady to keep one?
Create one private vault in your GitHub account and connect Pantheon only to it. Your context stays in readable files you own and control.
Create private vault