- Decision: store seed in
.pi/suggester/seed.json, and store interaction/runtime state in extension-owned files under.pi/suggester/sessions/<session-id>/, not in Pi session JSONL. - Why: project intent is repo-wide, while per-branch suggestion/steering traces should stay with the active conversation branch without contaminating or coupling to Pi’s official session storage.
- Decision: trigger suggestions after the full completion, not each internal tool turn.
- Why: avoids premature suggestions during multi-turn tool execution.
- Decision: run one reseed at a time; merge pending triggers while busy.
- Why: keeps UX responsive and avoids duplicate reseeds.
- Decision: seeder performs iterative exploration via
ls/find/grep/readbefore finalizing. - Why: better repository understanding than static context packing.
- Decision: require
categoryFindingsforvision,architecture,principles_guidelineswithfound,rationale,files. - Why: prevents silent omissions while allowing honest “not found” outcomes.
- Decision: keep
topObjectives[]andconstraints[], plus summaries for intent/objectives/constraints/principles/status. - Why: prompt generation needs both compact narrative context and list-style anchors.
- Decision: preserve configurable fast-path
continuefor botherrorandabortedturns. - Why: keeps recovery/pivot behavior immediate and predictable after unsuccessful completions.
- Decision: render the suggestion itself as ghost text only when editor state is compatible; otherwise hide it.
- Why: the suggestion should never be moved into another surface just to make it visible. The stock pi footer stays intact, while status/warnings can use separate status/widget UI.
- Decision:
seederandsuggestereach support override for model and thinking level via commands, written to.pi/suggester/config.json. - Why: quality/cost tuning differs between deep seeding and fast next-prompt suggestion, and file-backed config survives restarts.
- Decision: log seeder and suggestion events to
.pi/suggester/logs/events.ndjsonwith truncation/rotation. - Why: enables post-run debugging/tuning without noisy stdout.
- Decision: persist separate usage counters for suggestion generation and seeding in extension-owned per-session files, and expose combined totals in
/suggester status. - Why: seeding can be expensive and should be visible independently from turn-time suggestion cost, and totals must survive extension reload/session resume without writing extension-private data into Pi session JSONL.
- Decision: status/reseed/model/thinking/config/seed-trace are subcommands.
- Why: one discoverable command namespace keeps UX coherent.