Agent Plan Artifacts Reference
This document catalogs whether each supported harness has a plan mode, where it saves plan files to disk, and the confidence level of that information.
Used by spec-kitty intake --auto via src/specify_cli/intake_sources.py to
scan for pre-existing agent-generated plans that can serve as intake context.
Last updated: 2026-04-20
Harness Sections
Claude Code (claude)
| Field | Value |
|---|---|
| Plan mode | Yes |
| Artifact path(s) | ~/.claude/plans/<random-name>.md (default); configurable via plansDirectory |
| Filename pattern | *.md (auto-generated adjective-noun names, e.g. graceful-riding-pillow.md) |
| User-configurable | Yes — set plansDirectory in ~/.claude/settings.json (user-level) or .claude/settings.json (project-level); relative paths resolve from workspace root |
| Confidence | Verified-empirical |
| Source | Empirical test on this machine (claude 2.1.114, 2026-04-20); confirmed by ClaudeLog FAQ and GitHub issue #14866 |
Notes: Default location is ~/.claude/plans/ (global, not project-scoped). There are multiple open
feature requests to change the default to a project-local path; the behavior may change in future
versions. Project-level plansDirectory in .claude/settings.json is the recommended way to store
plans alongside source. Plans are auto-named; there is no deterministic filename without configuring a
fixed directory. The plansDirectory setting accepts both absolute and workspace-relative paths.
Known bug (issue #14186 / #19537): project-level plansDirectory is sometimes ignored in favour of
the global default.
GitHub Copilot (copilot)
| Field | Value |
|---|---|
| Plan mode | Yes (public preview in VS Code, JetBrains, Eclipse, Xcode) |
| Artifact path(s) | — (no stable on-disk plan file; plans are conversational or session-local) |
| Filename pattern | — |
| User-configurable | No stable path exposed |
| Confidence | Inferred |
| Source | GitHub Changelog 2025-11-18; GitHub Docs — Planning a project |
Notes: Copilot's plan mode (Copilot Workspace) generates structured implementation plans, but
these are primarily surfaced inside the IDE/web UI, not persisted to a deterministic project-level
path by default. Session artefacts may appear under ~/.copilot/session-state/<session-id>/ but
this path is session-keyed and not stable for scanning. Custom instructions live in
.github/copilot-instructions.md but that is instructions, not a plan output. No officially
documented project-level plan file path was found as of 2026-04-20.
Google Gemini CLI (gemini)
| Field | Value |
|---|---|
| Plan mode | Yes (--approval-mode=plan, /plan command, or Shift+Tab) |
| Artifact path(s) | ~/.gemini/tmp/<project>/<session-id>/plans/ (default); configurable to .gemini/plans/ within project root |
| Filename pattern | *.md |
| User-configurable | Yes — set general.plan.directory in .gemini/settings.json; must be inside project root |
| Confidence | Verified-docs |
| Source | Gemini CLI plan-mode docs; GitHub source gemini-cli/docs/cli/plan-mode.md |
Notes: Default path is a managed temp directory keyed by project and session; files are
automatically cleaned up after 30 days. If a custom general.plan.directory is set (e.g.
.gemini/plans), files are not automatically cleaned up. The custom directory must stay within
the project root — absolute paths or paths escaping the workspace are rejected. Useful configuration
for scan purposes:
{ "general": { "plan": { "directory": ".gemini/plans" } } }
Cursor (cursor)
| Field | Value |
|---|---|
| Plan mode | Yes (Shift+Tab to activate) |
| Artifact path(s) | ~/.cursor/plans/ (default, global); .cursor/plans/ (project-local, requires "Save to Workspace") |
| Filename pattern | *.md |
| User-configurable | Limited — no plansDirectory setting; user can manually click "Save to Workspace" to move a plan to .cursor/plans/ in the project |
| Confidence | Verified-docs |
| Source | Cursor Plan Mode docs; Cursor community forum; Cursor blog — Introducing Plan Mode |
Notes: Plans are ephemeral by default and live in ~/.cursor/plans/ (global). To commit them to
the repo, the user must explicitly click "Save to Workspace", which creates .cursor/plans/<name>.md
in the project. There is no programmatic way to force a project-local save. Multiple community
requests for a configurable plansDirectory are open as of 2026-04-20.
Qwen Code (qwen)
| Field | Value |
|---|---|
| Plan mode | Yes (read-only approval mode; --approval-mode plan or Shift+Tab) |
| Artifact path(s) | ~/.qwen/todos/<session-id>.json (internal todo list, not a readable plan file) |
| Filename pattern | — (no stable Markdown plan file; todo state is JSON) |
| User-configurable | No |
| Confidence | Verified-docs |
| Source | Qwen Code TodoWriteTool docs; GitHub qwen-code/docs/developers/tools/todo-write.md |
Notes: Qwen Code's plan mode is read-only like Gemini CLI's. It uses a todo_write tool that
persists task lists to ~/.qwen/todos/ as session-specific JSON files — not human-authored Markdown
plan documents. There is no confirmed on-disk Markdown artifact in a deterministic project-level path.
The .qwen/ project directory is used for configuration, not plan output.
OpenCode (opencode)
| Field | Value |
|---|---|
| Plan mode | Yes (built-in plan mode; toggle with Tab) |
| Artifact path(s) | .opencode/plans/<timestamp>-<slug>.md |
| Filename pattern | [0-9]*-*.md |
| User-configurable | No (path is hard-coded to .opencode/plans/ within the project) |
| Confidence | Verified-docs |
| Source | OpenCode Modes docs — "edit tool cannot modify existing files, except for files located at .opencode/plans/*.md" |
Notes: .opencode/plans/ is the only directory writable in plan mode; all other file
modifications are blocked. Files are named <unix-timestamp>-<url-slug>.md. Global plans (not
scoped to a project) go to ~/.local/share/opencode/plans/ but that path is less useful for
project-scoped scanning.
Windsurf (windsurf)
| Field | Value |
|---|---|
| Plan mode | Yes (Wave 10 Planning Mode; available in Cascade) |
| Artifact path(s) | ~/.windsurf/plans/ (default, global) |
| Filename pattern | *.md |
| User-configurable | No stable project-level path documented |
| Confidence | Verified-docs |
| Source | Windsurf Cascade Modes docs — "Plans are stored in your ~/.windsurf/plans directory and are available in the @mentions menu."; Wave 10 blog |
Notes: Windsurf stores plans globally at ~/.windsurf/plans/, not in a per-project directory.
The plans are referenced via @mentions for follow-up sessions. As of 2026-04-20, there is no
documented mechanism to override the storage location to a project-local directory. Plans are
Markdown files and are persistent (not auto-cleaned).
Kilocode (kilocode)
| Field | Value |
|---|---|
| Plan mode | Yes (inherited from OpenCode codebase; plan mode) |
| Artifact path(s) | .opencode/plans/<timestamp>-<slug>.md (bug: plans currently save to .opencode/ directory, not .kilocode/) |
| Filename pattern | [0-9]*-*.md |
| User-configurable | No |
| Confidence | Inferred |
| Source | Kilocode GitHub issue #6370 — "Plan files in ask mode are saved in a opencode directory"; issue #6907 — "In the planning mode cannot create a plan file in plans folder" |
Notes: Kilocode is forked from OpenCode and inherits its plan mode. However, a known bug
(reported February–March 2026) causes plan files to be written to .opencode/plans/ instead of a
Kilocode-specific directory. The correct target path — .kilocode/plans/ — is not yet reliably
used. Active bug; behaviour may change in future releases. Neither path is confirmed stable as of
2026-04-20.
Augment Code (auggie)
| Field | Value |
|---|---|
| Plan mode | Yes (strict read-only; can activate mid-conversation) |
| Artifact path(s) | ~/.augment/plans/ |
| Filename pattern | *.md |
| User-configurable | No |
| Confidence | Inferred |
| Source | Augment Code changelog mentions plan mode improvements; search result snippets attribute ~/.augment/plans/ as the save location; not confirmed in official docs page |
Notes: The ~/.augment/plans/ path appears in secondary sources (changelog summaries, third-party
guides). The canonical Augment Code docs page does not explicitly document this path as of
2026-04-20. Classified as Inferred rather than Verified-docs. The path is global (not
project-scoped), limiting its usefulness for project-level scanning.
Roo Cline (roo)
| Field | Value |
|---|---|
| Plan mode | Unclear |
| Artifact path(s) | — |
| Filename pattern | — |
| User-configurable | N/A |
| Confidence | Unknown |
| Source | Roo Code docs — Using Modes; Roo Code docs — Custom Modes |
Notes: Roo Code has built-in modes: Code, Architect, Ask, Debug. The "Architect" mode is the
closest to a plan mode — it restricts the agent to planning and analysis. However, no official
documentation confirms that Architect or any other mode saves a standalone Markdown plan file to a
deterministic on-disk path. The .roo/ directory is used for rules and custom mode configs, not
plan outputs. A customStoragePath setting exists but has known bugs. No plan-file artifact path
could be verified as of 2026-04-20.
Amazon Q / Kiro (q / kiro)
Amazon Q Developer and Kiro are treated together here because they share the q/kiro
harness keys in spec-kitty's agent model, though they are distinct products.
Amazon Q Developer
| Field | Value |
|---|---|
| Plan mode | Unclear |
| Artifact path(s) | — |
| Filename pattern | — |
| User-configurable | N/A |
| Confidence | Unknown |
| Source | Amazon Q Developer docs |
Notes: Amazon Q Developer (CLI / IDE plugin) does not document a dedicated plan mode with
file-system plan output as of 2026-04-20. Workspace cache lives at ~/.aws/amazonq/cache/. No
confirmed plan-file path.
Kiro
| Field | Value |
|---|---|
| Plan mode | Yes (spec-driven development — "Spec" mode) |
| Artifact path(s) | .kiro/specs/<feature-name>/requirements.md, .kiro/specs/<feature-name>/design.md, .kiro/specs/<feature-name>/tasks.md |
| Filename pattern | requirements.md, design.md, tasks.md (under .kiro/specs/<slug>/) |
| User-configurable | No (path is fixed; spec files are committed to the repo by design) |
| Confidence | Verified-docs |
| Source | Kiro Specs docs — "Specifications are stored under .kiro/specs"; Kiro blog — spec-driven development |
Notes: Kiro's model differs from other harnesses. Rather than a single "plan file", Kiro
generates a structured three-file spec bundle under .kiro/specs/<feature>/. These files are
explicitly intended to be version-controlled alongside source code. The feature-name slug is
derived from the task description. Steering documents (comparable to rules/instructions) live in
.kiro/steering/*.md.
Google Antigravity (antigravity)
| Field | Value |
|---|---|
| Plan mode | Yes (Planning mode; produces Implementation Plan and Task List artifacts) |
| Artifact path(s) | — (plan artifacts are surfaced in the IDE UI and knowledge base; no stable per-project Markdown file path documented) |
| Filename pattern | — |
| User-configurable | Unclear |
| Confidence | Inferred |
| Source | Google Antigravity docs; Codelabs — autonomous pipelines; Antigravity tutorial |
Notes: Antigravity creates a .gemini/antigravity/brain/ persistent knowledge base at the
project root where agents record architectural decisions. Planning mode produces an Implementation
Plan artifact and a Task List artifact, but these are primarily surfaced inside the IDE/agent panel,
not as simple project-root Markdown files. The .agents/ directory is used for workflow/skill
configuration, not plan output. No deterministic file path for scanning was confirmed as of
2026-04-20.
Mistral Vibe (vibe)
| Field | Value |
|---|---|
| Plan mode | Yes (built-in plan agent profile — read-only, auto-approves safe tools) |
| Artifact path(s) | — (no on-disk plan file output documented; plan stays conversational) |
| Filename pattern | — |
| User-configurable | N/A |
| Confidence | Inferred |
| Source | Mistral Vibe docs — Agents & Skills; Mistral Vibe GitHub |
Notes: Vibe has a plan agent profile that restricts tools to read-only operations. Config lives
in .vibe/config.toml (project) or ~/.vibe/config.toml (global). Local project skills are stored
in .vibe/skills/. No documentation was found confirming that the plan agent profile saves plan
output to a deterministic on-disk path. Classified as Inferred (no plan-file output).
source_agent Mapping
This table shows the source_agent string used in intake_sources.py and intake events for each
configured harness key.
| Harness | Config key | source_agent value |
|---|---|---|
| Claude Code | claude |
claude-code |
| GitHub Copilot | copilot |
copilot |
| Google Gemini | gemini |
gemini |
| Cursor | cursor |
cursor |
| Qwen Code | qwen |
qwen |
| OpenCode | opencode |
opencode |
| Windsurf | windsurf |
windsurf |
| Kilocode | kilocode |
kilocode |
| Augment Code | auggie |
augment |
| Roo Cline | roo |
roo |
| Amazon Q / Kiro | q / kiro |
amazon-q |
| Google Antigravity | antigravity |
antigravity |
| Mistral Vibe | vibe |
vibe |
Active scan entries in intake_sources.py
Only harnesses with Verified-docs or Verified-empirical confidence and a deterministic
project-level (or configurable) path are included as active tuples in HARNESS_PLAN_SOURCES.
| Harness | Active? | Reason |
|---|---|---|
| Claude Code | No | Default path is global (~/.claude/plans/); project-level only when plansDirectory is explicitly set in .claude/settings.json. Auto-named files not deterministically findable without config. |
| GitHub Copilot | No | No confirmed project-level plan file path. |
| Google Gemini | Yes (conditional) | .gemini/plans/ is the opt-in project-local path; scannable when configured. |
| Cursor | Yes (conditional) | .cursor/plans/ is the project-local path when user clicks "Save to Workspace". |
| Qwen Code | No | No Markdown plan file; only JSON todos in global ~/.qwen/todos/. |
| OpenCode | Yes | .opencode/plans/*.md is the verified, hard-coded project-level path. |
| Windsurf | No | Global-only path ~/.windsurf/plans/; no project-level path. |
| Kilocode | No | Path is buggy (saves to .opencode/plans/ not .kilocode/plans/); unstable. |
| Augment Code | No | Global-only ~/.augment/plans/; path is Inferred, not Verified. |
| Roo Cline | No | No confirmed plan file path. |
| Amazon Q | No | No confirmed plan file path. |
| Kiro | Yes | .kiro/specs/<slug>/requirements.md, design.md, tasks.md are the verified spec artifacts. |
| Antigravity | No | No confirmed project-level plan file path. |
| Mistral Vibe | No | No confirmed plan file output on disk. |
Scan Behaviour Notes
Multiple files from the same harness directory
When a harness directory (e.g. .opencode/plans/) contains more than one .md file, scan_for_plans() returns each file as a separate candidate. All will share the same harness key. The files are returned in sorted() order (alphabetical by filename).
For harnesses that use timestamp-prefixed filenames (e.g. 2026-04-01-feature-foo.md), alphabetical order matches chronological order. The most-recent plan will appear last in the candidate list. If --auto finds multiple candidates, the numbered prompt will list them in this order — users should choose the highest-numbered entry for the most-recent plan, or pass an explicit path to skip the prompt entirely.
How to Update
When new evidence changes the status of a harness:
- Update this document: add the new source URL and change the Confidence value.
- Promote to an active entry in
HARNESS_PLAN_SOURCESinsrc/specify_cli/intake_sources.pyif confidence is now Verified-docs or Verified-empirical. - Move the corresponding TODO comment in
intake_sources.pyto the active list. - Update the "Active scan entries" table above.
- Commit with a message referencing this file and the issue/PR that confirmed the information.
Confidence levels:
| Level | Meaning |
|---|---|
| Verified-docs | Path confirmed in official documentation or source code |
| Verified-empirical | Path confirmed by direct observation on a live machine |
| Inferred | Path derived from secondary sources (changelogs, community posts, third-party guides) — not confirmed in official docs |
| Unknown | No credible source found |