Repository navigation
Spike: run the plugin in Codex, Cursor and Kiro as well as Claude Code #61
Copy link
Copy link
Open
Labels
triageNot yet classified by a maintainerNot yet classified by a maintainer
Description
Component
Something else
Question
What would it take for the freethinking plugin to run in Codex, Cursor and Kiro as well as Claude Code, part by part, and which tool should come first?
Experience
- Operator (an engineer who works in Codex, Cursor or Kiro, or moves between them): today the plugin's skills, rules and agents exist only in Claude Code, so switching tools means losing the spec flow, the rules and the hand-backs, or switching back to Claude Code for them. The author built the plugin partly to stop switching between Kiro and Claude.
- User (who uses what the operator builds): gets the plugin's discipline (reproduce before fixing, specs approved before code, tests with each change) only when the operator happens to be in Claude Code.
- Owner (maintains the plugin): one plugin per tool would mean several copies to keep in step; the question is how much can be shared and what each tool needs of its own.
Why it matters
Whether to build multi-tool support, for which tools, and in what order, waits on this. Guessing risks building packaging for a tool that cannot load the parts that matter (rules on every session, named sub-agents, asking the user a fixed-option question), or copying the plugin per tool and paying to keep the copies in step.
What is known
- AWS's Agent Toolkit plugin (
aws-core1.1.0, installed through Claude Code's official marketplace) ships one folder with three manifests,.claude-plugin/plugin.json,.codex-plugin/plugin.jsonand.cursor-plugin/plugin.json, one sharedskills/folder and onehooks/hooks.jsonwhose commands use${CLAUDE_PLUGIN_ROOT}. Its README gives install steps for Claude Code (/plugin install aws-core@claude-plugins-official) and Codex (codex plugin marketplace add aws/agent-toolkit-for-aws). It carries no Kiro manifest. - Specs already live in
.freethinking/specs/, not.claude/, chosen with other tools in mind. - What freethinking uses that is specific to Claude Code:
- Rules reach every session and every sub-agent through
SessionStartandSubagentStarthooks (hooks/load-rules.sh,hooks/load-rules-subagent.sh) usingCLAUDE_PLUGIN_ROOT. - Agents (
task-executor,wave-reviewer,document-reviewer) are launched by name through the Agent tool (subagent_type: freethinking:<name>), with their own tools, model and effort in frontmatter. - Skills name Claude Code tools: AskUserQuestion for fixed-option questions, the Skill tool for hand-offs, the Agent tool; some run shell commands while they load (
!prefetch ofgh issue viewinbugfixandpr). - Evals run on
claude plugin eval(make eval-*).
- Rules reach every session and every sub-agent through
- Codex and Kiro are installed on the author's machine (Kiro IDE and
kiro-cli); the Codex CLI would need reinstalling. Cursor is not known to be installed.
Time box
Two working sessions.
Outcome
A comment on this issue with:
- A table, one row per part (skills, always-on rules, hooks, named sub-agents with their own tools, a fixed-option question to the user, skill-to-skill hand-off, shell prefetch at load, evals), one column per tool (Claude Code, Codex, Cursor, Kiro): supported as is, supported another way (how), or not supported, each cell sourced from the tool's own documentation or a run on this machine.
- A recommendation: which tool first, what a shared layout would look like (one folder with per-tool manifests, as
aws-coredoes, or generated per-tool output), and what each tool would cost to support and to test. - Proposal issues for the work, or a decision not to proceed.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
triageNot yet classified by a maintainerNot yet classified by a maintainer
Activity
sabind commentedon Oct 22, 2026
Spike result: the freethinking plugin in Codex, Cursor and Kiro
Short answer. The plugin goes ahead in every agent, with no tool ruled out.
.claude-pluginmanifest, itsskills/folder and itshooks/hooks.jsonwithCLAUDE_PLUGIN_ROOT. Kiro needs its own layout.${CLAUDE_SKILL_DIR}and the blocking fixed-option question..freethinking/strategies/multi-tool-plugin.mdin PR [#61] Add the multi-tool plugin strategy #62, with five streams of work filed as Compile every agent's plugin from one canonical source #63 to Deliver the plugin's skills through an MCP server any agent can connect #67.How this was tested. Each tool loaded a small test plugin built in the same shape as freethinking:
hooks/hooks.jsonload-rules.shandload-rules-subagent.sh$ARGUMENTS, named arguments, a!prefetch line,${CLAUDE_SKILL_DIR}and a file in its folderA marker hook logged which events fired and which variables they saw.
Each tool then ran three headless prompts in a throwaway workspace:
alpha beta.The tools and versions:
--plugin-dir.kiro/because Kiro has no package for themClaude Code ran the same three prompts as a control, and every part worked there.
Each cell is tagged with its source: run (one of these runs), doc (the tool's documentation), source (the tool's source code) or inferred. Links are listed under the table.
What the plugin uses, tool by tool
The issue named eight parts; reading the plugin turned up five more (marked added).
probe:probe-args, called with$probe:probe-args(run).claude-pluginlayout (run). Cursor also picked up freethinking's skills and agents from the Claude Code install on the same machine (run).kiro/skills/(run). A custom agent sees skills only when itsresourceslists them (doc)rules/(doc, run)/hooks(doc).mdplugin rules reached the session; a plugin rule withalwaysApply: truedid not load in the CLI either (run). A sessionStart hook that prints{"additional_context": …}works (run)inclusion: alwayssteering in~/.kiro/steering/(run), or a SessionStart hook whose output is added (run on 2.33.1). A Kiro package cannot carry either (doc)hooks/hooks.json; setsCLAUDE_PLUGIN_ROOT,PLUGIN_ROOTandCLAUDE_PLUGIN_DATA(run)hooks.jsonran withCLAUDE_PLUGIN_ROOTandCURSOR_PLUGIN_ROOTset, from the plugin's folder (run). Plain stdout is not added; JSON is (run).kiro/hooks/*.json; SessionStart only; no plugin-root variable (doc, run)~/.codex/agents/, with no per-agent tool list (doc)agents/and launched by name, buttools: Read, Grepwas ignored: the agent had Shell and Write (run). Effort goes inside the model ID (doc).kiro/agents/was launched by name with only read tools (run). No per-agent effort (doc)Load skill: probe-target(run)$ARGUMENTSand${N}(run on 2.25)${CLAUDE_SKILL_DIR})allowed-toolspre-approval.rulesfiles, or a hook that approves (doc)permissions.json(doc)codex plugin marketplace addandcodex plugin addinstalled from our.claude-pluginmarketplace (run). The IDE extension loads no plugins (doc).claude-pluginlayout with--plugin-dir(run). Marketplace install not tested;.cursor-plugin/plugin.jsonis the documented manifest (doc)claude plugin eval,claude -p(doc, run)codex exec --json(run). Standard input must be closed, or it waits foreveragent -p --output-format stream-json(run)kiro-cli chat --agent-engine v3 --no-interactive(run)Prior art: AWS's agent-toolkit-for-aws
AWS's toolkit ships five plugins to Claude Code, Codex, Cursor, Devin and Kiro from one repository (read at commit ece684d, 2026-10-22).
plugin.jsonin the open Agent Plugins format. A CI script checks the manifests agree.skills/folder by a sync script, with a CI check.AskUserQuestion,$ARGUMENTSand${CLAUDE_PLUGIN_ROOT}, worded so it still reads sensibly when a tool leaves them literal, as in "the developer's prompt and$ARGUMENTS".hooks/folder so Codex never runs them, and Cursor gets its ownhooks.json.npx skills add.We follow its layout and its sync-and-check pattern. We go further on the parts it leaves Claude-only, because this plugin depends on its rules reaching every session and on its agents. The runs above show Codex runs our rule hooks unchanged, Cursor works with a JSON hook, and Kiro carries rules in steering.
Recommendation
Every agent is a target. None is ruled out for what it cannot do today, because their support changes month to month. Each agent's gaps are recorded and checked every week.
Claude Code is the benchmark. One set of eval cases is shared by every tool, and each tool gets its own runner, scored against Claude Code's results. Each tool can add cases of its own for behaviour only it has. Evals stay a manual, per-target token cost, never run in CI.
Converge first, compile at the edges. Where a tool reads the plugin's own structure, it reads the source as it is. Codex and Cursor already read our
.claude-plugintree. Where a tool cannot, glue generated at build time closes the gap. That covers the four skill-text features above, Cursor's rules hook output and Kiro's layout. Generated output is checked in, and a free check in CI fails when it is out of date.Order: Cursor and Codex first, beside Claude Code, then Kiro, then other agents as they gain a plugin or skills format, one destination at a time. Codex lacks plugin agents and its IDE extension loads no plugins. Cursor ignores agents' tool lists and its question tool does not block, which weakens the plugin's approval gates. These are recorded as gaps in each tool's evals, not hidden by glue.
A weekly format watch. The test plugin from this spike is rebuilt in the repository from the description under "How this was tested". A weekly automation re-runs its three prompts in every installed agent and reports what changed. That way a gap that closes retires its glue, and a break is seen before an operator meets it.
An MCP server as a shared delivery channel. MCP, the Model Context Protocol, is a standard way for an agent to connect to tools served by another program, and every tool here accepts MCP servers. A server could deliver skill text, templates and possibly rules to any agent, whether run locally or hosted on AWS. Four questions come first:
Cost per destination
.cursor-pluginmanifestagent -p --plugin-dir, and a Cursor accountcodex exec --jsonwith its ownCODEX_HOME, and an OpenAI account.kiro/output (steering, agents, skills) and an installer into~/.kiro/kiro-cli chat --no-interactiveagainst the generated outputEach probe run in this spike took under a minute.
claude plugin evaldoes not carry over, so each tool needs its own runner that grades its JSON output.Follow-up issues
One issue per stream of work in the strategy, in order:
pr 61finds ticket 61 and each skill finds its templates.Still open
$ARGUMENTS. Moot if the text goes portable.Sources
codex-rs/ext/skills/src/catalog_prompt.rs,codex-rs/protocol/src/config_types.rs[#61] Add the multi-tool plugin strategy (#62)