Skip to content
Theme:

Plan

The plan server gives Aether a “plan mode” with scoped tools for writing, editing, and submitting markdown implementation plans. Agents address plans by planName; the server stores each plan as <planName>-plan.md in the configured plans directory.

.aether/mcp.json
{
"servers": {
"plan": {
"type": "in-memory"
}
}
}

When registered through Aether’s built-in server wiring, plans default to ${WORKSPACE}/docs/aether/plans. Standalone plan-mcp defaults to docs/aether/plans relative to its process cwd. Pass --plans-dir to override it:

.aether/mcp.json
{
"servers": {
"plan": {
"type": "in-memory",
"args": ["--plans-dir", "docs/plans"]
}
}
}

Pass --prompt-file to provide your own prompt for plan mode:

.aether/mcp.json
{
"servers": {
"plan": {
"type": "in-memory",
"args": ["--prompt-file", ".aether/prompts/plan-mode.md"]
}
}
}

The server advertises one MCP prompt named plan. It accepts one required ARGUMENTS parameter containing the task to plan. Aether substitutes prompt parameters into the configured prompt body.

Any trailing args after plan flags are treated as an external submit command. When submit_plan is called, Aether appends the resolved absolute plan path as the final command argument and returns the command’s stdout as feedback.

.aether/mcp.json
{
"servers": {
"plan": {
"type": "in-memory",
"args": ["contextbridge", "plan", "--project", "aether"]
}
}
}

Without a submit command, submit_plan uses MCP elicitation and the client displays a plan review UI.

ToolDescription
write_planWrite a named markdown plan in the configured plans directory.
edit_planEdit a named plan by exact string replacement.
submit_planSubmit a named markdown plan file for review.
FieldTypeDescription
planNamestringStable plan identifier using only letters, numbers, dashes, underscores.
contentstringMarkdown plan body.
FieldTypeDescription
planNamestringPlan identifier.
planPathstringAbsolute path written by the server.
bytesWrittennumberNumber of bytes written.
FieldTypeDescription
planNamestringStable plan identifier originally used by the plan.
oldStringstringExact string to replace.
newStringstringReplacement string.
replaceAllbooleanReplace every occurrence. Defaults to false.
FieldTypeDescription
planNamestringPlan identifier.
planPathstringAbsolute path edited by the server.
replacementsMadenumberNumber of replacements made.
FieldTypeDescription
planNamestringStable plan identifier originally used by the plan.
FieldTypeDescription
approvedbooleantrue when the reviewer approved the plan.
feedbackstringPresent when the reviewer requested changes or when an external submit command returned stdout.
{
"planName": "docs-site-refresh"
}
{
"approved": true
}
{
"approved": false,
"feedback": "Split validation and publishing into separate steps."
}
  1. The planner calls write_plan with a stable plan name, such as feature.
  2. The planner calls submit_plan with the same planName.
  3. The client shows an approve / request-changes review form with the rendered markdown.
  4. If changes are requested, the planner calls edit_plan and then submit_plan again.