Docs / Claude Code & Codex
Claude Code & Codex
How Flanner connects to your coding agent, and the MCP tools it exposes.
What init registers, and where
Three agents, three different files. flanner init registers the server in Claude Desktop's config, writes a project-scoped .mcp.json that Claude Code reads, and adds managed blocks to CLAUDE.md and AGENTS.md. Codex registers MCP servers in its own file. When Codex is installed, init appends flanner's entry to ~/.codex/config.toml, checks the file still parses, and leaves everything else in it untouched. Where it cannot do that safely, it prints this for you to add:
[mcp_servers.flanner]
command = "flanner-mcp"flanner status shows one row per agent, each checked where that agent actually looks. Narrow what init registers with --setup codex, or turn it off with --skip-claude. On a team with messages on, init also adds a messages hook to whichever of Claude Code and Codex it sets up, described in Messages.
flanner status # One row per agent, checked where each looksManual registration
If needed, you can redo it by hand. flanner setup re-runs the global registration with every agent. It does not rewrite the repository's files; flanner init does that. It does not add the messages hook either; run flanner init for that.
flanner setup # Every agentflanner register # Claude Desktop onlyflanner unregister # Claude Desktop onlyGuidance and the guard hook
flanner init sets up two things so your agent uses Flanner without being reminded. The guidance works with Claude Code and Codex; the guard hook is Claude Code only.
Guidance the agent reads
flanner init writes a managed block into CLAUDE.md and AGENTS.md, which Claude Code and Codex read every session, and installs flanner-plan and flanner-memory skills where each agent reads them. Together they tell the agent where it is, to save plans and memory through the MCP tools, and to leave installing skills to you.
A guard hook as backstop
A guard-write PreToolUse hook denies any raw write into the plan directory and points the agent back to create_plan_file_tool. It fails open and never blocks writes elsewhere.
MCP tools the agent calls
project_contextWhere you are: the project, whether review is enforced, and what memory keepsinitialize_project_toolAdopt a repository so its plan documents are trackedcreate_project_toolCreate a project with git integrationlist_projectsEvery project and its configurationget_plan_configConfirm the plan directory and header formatconfigure_project_toolChange a project's settingsdelete_project_toolDelete a project and its plan files from the databasecreate_plan_file_toolCreate a plan file (adds the YAML header, records v1)update_plan_file_toolRevise a plan and record a new versionget_plan_file_toolRead a plan filelist_plan_files_toolList plan files in a projectget_plan_history_toolGet the full version history of a planget_plan_freshness_toolCheck a plan's freshness status and evidence before trusting itpropose_plan_revision_toolOffer a plan version for reviewrecord_plan_review_decision_toolRecord a decision against a proposalget_plan_workflow_status_toolA plan's open proposals and its accepted baselineget_plan_assurance_toolWhether a plan is safe to implement, and exactly what it is if notmemory_rememberSave one durable fact for later sessionsmemory_recallSearch memory, with the reason each result matchedmemory_getRead one memory in fullmemory_listBrowse memories in a projectmemory_supersedeCorrect a memory by replacing itmemory_tagAdd or remove topic tags on a memory, without a new versionmemory_tagsThe tags already in use, so new ones reuse themmemory_forgetStop recalling a memorymemory_considerPropose a memory for the person to approvememory_pendingSuggestions still waiting on a decisionmemory_decideApprove or reject a suggestion the user decided onmemory_policyWhat this project will let be rememberedmemory_attachAttach a file to a memory as evidencememory_detachRemove an attachmentmemory_shareShare one memory with the team, when asked tomemory_withdrawAsk peers to stop recalling a shared memoryrequest_actionBring back a forgotten memoryskills_reportWhich copy of each skill loads, and what is wrong with themskills_usageWhich skills were used here, and whether anything was watchingskills_submit_evidenceHand over work to learn from, and see what was handed overskills_proposeDraft, revise and read skill proposalsskills_reviseDraft, revise and read skill proposalsmesh_statusSigned-in identity, workspaces, peers and skill transfers, read offlinemessages_inboxUnread messages, or one whole threadmessages_sendMessage teammates or a workspace, after a previewmessages_replyAnswer everyone on a thread, after a previewmessages_muteMute or unmute a teammate on this devicemessages_quiet_hoursShow, set or clear quiet hours on this deviceCurb has no MCP tools
None of the tools above belongs to Flanner Curb, and that is deliberate. flanner curb map reports which credentials an agent could read and which channels could carry them away. flanner curb sweep reports where secrets were left behind. That is a target list for a prompt-injected agent, so it is not offered as a tool.
Your agent can still run the commands in its shell, where you see and approve each one. It gets back what every caller gets: severities, categories and counts. Never a credential's name, a location or a value.
For names and locations, you run flanner curb show yourself. It opens a window on your screen, and nothing from it comes back to the command. An agent that runs it gets only a notice.
flanner init also installs the agent-blast-radius skill for Claude Code and Codex. It tells the agent which Curb commands to run, to leave the hidden details alone, and to ask you to open flanner curb show when you want them. See the skill.