Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
4e1a6b1
feat(tui): add plan mode command and fix plan file editing
euxaristia Jul 10, 2026
cbaff57
feat(tui): add missing internal/planmode package
euxaristia Jul 11, 2026
a8a622a
fix(tui): address review findings on plan mode
euxaristia Jul 11, 2026
e4dbb84
fix(tui): address review findings on plan mode editor and safety
euxaristia Jul 13, 2026
3dc11fe
fix(tui): address plan-mode review findings on toggle, session scopin…
euxaristia Jul 13, 2026
2e7c03f
fix(tui): guard exitPlanMode against clobbering non-plan permission m…
euxaristia Jul 13, 2026
ece9d03
fix(tui): reload plan file into memory on editor exit, preserving sta…
euxaristia Jul 14, 2026
4243005
fix(tui): correct /plan command palette description
euxaristia Jul 14, 2026
9ccc739
fix(tui,agent): address plan-mode review findings on gating, reload, …
euxaristia Jul 14, 2026
2275ad1
fix(tui,planmode): close editor symlink race, propagate edits to cont…
euxaristia Jul 14, 2026
aa03521
fix(planmode,tui): harden editor staging and record cleared plans
euxaristia Jul 15, 2026
52e31ae
fix(planmode,tui,tools): physical staging containment, cancel-safe pl…
euxaristia Jul 15, 2026
432accc
fix(planmode): resolve not-yet-existing paths through their deepest e…
euxaristia Jul 15, 2026
64cb665
fix(tui): confirm plan reload in transcript after editor exit
euxaristia Jul 16, 2026
374d0c8
fix(tui,planmode,tools): close plan-mode gating and durability gaps
euxaristia Jul 18, 2026
c690a3d
fix(agent): suppress executable hooks while plan/spec-draft mode is a…
euxaristia Jul 18, 2026
a516b8c
fix(tui): layer plan-mode prompt instead of replacing it
euxaristia Jul 19, 2026
0544c42
fix(agent): keep trust-gated hooks in spec-draft; harden plan allowlist
euxaristia Jul 19, 2026
3254fc3
fix(planmode,tui): keep durable plans outside the workspace
euxaristia Jul 20, 2026
0c2f8dd
fix(planmode): make Windows honor config-root test isolation and stag…
euxaristia Jul 20, 2026
c72e15b
fix(planmode): make plan storage paths collision-resistant
euxaristia Jul 22, 2026
e1d0f75
fix(tui): preserve active plan file content when entering plan mode
euxaristia Jul 23, 2026
6a07577
fix(tui): address review findings on plan storage workspace path, pla…
euxaristia Jul 23, 2026
1efe0ea
fix(tui): reset plan mode on spec session switch and preserve beforeT…
euxaristia Jul 31, 2026
bc664d0
fix(agent): update tests off tools.CoreTools/NewWriteFileTool removed…
euxaristia Jul 31, 2026
57477e7
fix(tui): address plan mode review (btw switch, testing dep, dead field)
euxaristia Aug 1, 2026
06bbd45
fix(tui): polish plan-mode btw/spec edge cases from review
euxaristia Aug 7, 2026
0c3a812
fix(planmode,tui): address CodeRabbit findings on plan storage and re…
euxaristia Aug 7, 2026
86203e0
fix(planmode,tui,agent): close remaining CodeRabbit findings on plan …
euxaristia Aug 7, 2026
38ac372
fix(planmode): bind ReadPlan containment at open via os.Root
euxaristia Aug 7, 2026
8c00ce6
fix(planmode): refuse final plan symlink without following it
euxaristia Aug 7, 2026
865230f
fix(planmode,tui): close open CodeRabbit findings on plan mode
euxaristia Aug 7, 2026
bead27d
fix(planmode,tui): close remaining CodeRabbit findings on plan mode
euxaristia Aug 7, 2026
81eea9b
fix(planmode,tui): address CodeRabbit review findings and CI assertio…
euxaristia Aug 8, 2026
851b3bc
fix(planmode): harden plan writes and editor roundtrip
euxaristia Aug 10, 2026
e56c0d7
fix(tui): reconcile plan mode with main command semantics
euxaristia Aug 11, 2026
dbea0a8
fix(tui): close remaining plan-mode review findings
euxaristia Aug 11, 2026
2d7349b
Clarify the plan mode entry command
euxaristia Aug 11, 2026
014930c
fix(planmode,tui): close CodeRabbit findings on plan storage and edit…
euxaristia Aug 12, 2026
2199de9
fix(planmode,tui,agent): close remaining CodeRabbit findings on plan …
euxaristia Aug 13, 2026
b66fe18
fix(planmode): recognize a Linux/Darwin ENOTDIR as an intermediate sy…
euxaristia Aug 13, 2026
8a89788
test(tui): pin that /plan on creates its session before naming the pl…
euxaristia Aug 13, 2026
7f2f590
fix(tui): record a plan-file edit only when the plan actually changed
euxaristia Aug 13, 2026
2d266d5
fix(planmode): refuse a symlink or reparse point at the plan storage …
euxaristia Aug 13, 2026
a2f44e5
fix(planmode): Address CodeRabbit review feedback on plan mode and te…
euxaristia Aug 16, 2026
a53545a
fix(planmode,tui): Address review comments on plan reload and staging…
euxaristia Aug 16, 2026
71722eb
Sync peer identity when /plan enters and exits plan mode.
euxaristia Aug 16, 2026
94077a5
Add a Windows junction test for WritePlan storage-root refusal.
euxaristia Aug 16, 2026
bf06e2b
Pause armed loops and goals while plan mode is active.
euxaristia Aug 18, 2026
6e262cf
fix(planmode): address CodeRabbit review feedback on PR #854
euxaristia Aug 20, 2026
670d48b
fix(planmode): sync dirfd on rename and update test assertion message
euxaristia Aug 22, 2026
555d3d5
test(planmode): Pin redirected Windows plan reads.
euxaristia Aug 24, 2026
d2eeccf
fix(tui): Restore session state after plan-mode switches.
euxaristia Aug 24, 2026
c95b000
fix(planmode): resolve Windows junctions when judging staging contain…
euxaristia Aug 24, 2026
7230d33
fix(tui): hold queued prompts while plan mode is active
euxaristia Aug 31, 2026
dec7c6a
Address review feedback on plan persistence, isolation, and staging l…
euxaristia Sep 1, 2026
e315fe3
Fix Unix build imports for plan staging and stale sweep
euxaristia Sep 1, 2026
8c25c35
Tighten Unix staging directory descriptor permissions
euxaristia Sep 1, 2026
5aef5e5
Address review feedback on plan canonicalization, Windows staging rep…
euxaristia Sep 4, 2026
0341837
Address review feedback on atomic plan commit locking, continuation u…
euxaristia Sep 4, 2026
6ecf36e
Assert exact continuation content and test permission mode preservation.
euxaristia Sep 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 9 additions & 8 deletions internal/agent/loop.go
Original file line number Diff line number Diff line change
Expand Up @@ -1536,6 +1536,7 @@ func executeToolCall(ctx context.Context, registry *tools.Registry, call ToolCal
// the Run turn loop performs the actual provider switch. Empty for every
// ordinary tool result.
RequestedModel: result.Meta["escalate_to_model"],
PlanSnapshot: result.PlanSnapshot,
}, nil
}

Expand Down Expand Up @@ -1867,15 +1868,15 @@ func toolResultFromPrePermissionReject(call ToolCall, result tools.Result) ToolR
}
}

// hooksSuppressed reports whether advisory (non-veto) hooks must not run for
// this run's permission mode. Plan mode promises a read-only turn, but
// sessionStart/sessionEnd/afterTool hooks execute configured host commands
// outside the advertised-tool and sandbox gates, so dispatching them would let
// merely starting a plan session or finishing a read mutate the workspace.
// hooksSuppressed reports whether lifecycle and afterTool hooks must not run
// for this run's permission mode. Plan mode promises a read-only turn, but
// sessionStart, sessionEnd, and afterTool hooks execute configured host
// commands outside the advertised-tool and sandbox gates, so dispatching them
// would let merely starting or finishing a plan session mutate the workspace
// or spawn processes.
//
// beforeTool is intentionally NOT suppressed: a non-zero exit is a deny gate,
// and skipping it fails open (operators who block secret-file reads via
// beforeTool would lose that protection under /plan on). See dispatchBeforeTool.
// beforeTool is intentionally not gated here: fail-closed policy vetoes must
// still apply to read-only plan-mode calls (see dispatchBeforeTool).
//
// Spec-draft keeps the existing trust-gated hook model: project hooks still
// fire when the workspace (or its worktree trust root) is trusted. That is
Expand Down
Loading
Loading