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 reads AGENTS.md but registers MCP servers in its own file, which flanner does not edit. Add this to ~/.codex/config.toml:
[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.
flanner claude-info # Check integration statusManual registration
If needed, you can register, update or remove it by hand. flanner setup re-runs everything init would have done.
flanner registerflanner register --force # Force updateflanner unregister # UnregisterGuidance and the guard hook
flanner init sets up two things so your agent saves plans through Flanner without being reminded. Both work with Claude Code and Codex.
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 a flanner-plan skill. Together they tell the agent to save plans through the MCP tools.
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
create_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 itlink_plan_to_linear_toolLink a plan to a Linear issuelink_plan_to_jira_toolLink a plan to a Jira issueget_plan_configConfirm the plan directory and header formatget_plan_assurance_toolWhether a plan is safe to implement, and exactly what it is if notinitialize_project_toolAdopt a repository so its plan documents are trackedcreate_project_toolCreate a project with git integrationlist_projectsEvery project and its configurationconfigure_project_toolChange a project's settingsdelete_project_toolDelete a project and its plan files from the databasepropose_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 baselineconfigure_jira_toolSet up the Jira connectionget_jira_config_toolShow the Jira connectionget_jira_links_toolWhich Jira issues one plan is linked tolist_jira_links_toolEvery Jira link in a projectunlink_jira_issue_toolRemove a Jira linkconfigure_linear_toolSet up the Linear connectionget_linear_config_toolShow the Linear connectionget_linear_links_toolWhich Linear issues one plan is linked tolist_linear_links_toolEvery Linear link in a projectunlink_linear_issue_toolRemove a Linear linkmemory_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_forgetStop recalling a memorymemory_considerPropose a memory for the person to approvememory_pendingSuggestions still waiting on a decisionmemory_decideApprove or reject a suggestionmemory_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 memory