You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| Always-applied rule |`cursor-plugin/rules/tracedecay.mdc`|~15 bullet points of routing advice; "prefer/first/fallback" phrasing; no decision procedure, no counters to rationalization |
146
-
| Session start (Cursor) |`build_cursor_session_context` in `src/hooks.rs`| Index status line + bare list of 25 skill names + tokens-saved counter. Doc comment says steering is deliberately left to the rule |
147
-
| Session start (Codex) |`build_codex_session_context` in `src/hooks.rs`| One paragraph: "Prefer tracedecay MCP tools … over broad file reads"; CLI fallback note; index status |
148
-
| Mid-session hints |`postToolUse` hook → `cursor_post_tool_use_decision` → `deduped_project_hint` (`src/hooks.rs`), dedupe in `src/hooks/tool_hints.rs`| Fires after Grep/Read/etc., but deduped to **once per (session, category) forever** (`ToolHintDedupe::should_emit` is a plain `HashSet::insert`) |
147
+
| Session start (Cursor) |`build_cursor_session_context` in `src/hooks/steering.rs`| Index status line + bare list of 25 skill names + tokens-saved counter. Doc comment says steering is deliberately left to the rule |
148
+
| Session start (Codex) |`build_codex_session_context_for_workspace` in `src/hooks/steering.rs`| One paragraph: "Prefer tracedecay MCP tools … over broad file reads"; CLI fallback note; index status |
149
+
| Mid-session hints |`postToolUse` hook → `cursor_post_tool_use_decision`(`src/hooks/cursor.rs`) → `deduped_project_hint` (`src/hooks/mod.rs`), dedupe in `src/hooks/tool_hints.rs`| Fires after Grep/Read/etc., but deduped to **once per (session, category) forever** (`ToolHintDedupe::should_emit` is a plain `HashSet::insert`) |
149
150
| Skills |`cursor-plugin/skills/` (40 dirs installed: 23 model-invocable + 15 `tracedecay-*` slash-command variants with `disable-model-invocation: true` + a `memorize-subject`/`memorizing-subject` near-duplicate pair); `codex-plugin/skills/` (25) | Descriptions are actually good "Use when…" trigger form; the problem is volume and overlap, not phrasing |
150
151
| MCP tool descriptions |`src/mcp/tools/definitions.rs` (68+ tools) | Capability descriptions ("Search for symbols … by name or keyword"), not invocation triggers; only `tracedecay_outline` and `tracedecay_context` carry usage steering (the latter a *budget cap*, i.e. anti-usage steering) |
151
152
152
153
Two structural notes:
153
154
154
155
- The Cursor `beforeSubmitPrompt` hook **cannot inject context** (per the
155
-
comment at `src/hooks.rs:351`, only `user_message` is available on that
156
+
comment at `src/hooks/cursor.rs`, only `user_message` is available on that
156
157
event), so per-prompt re-steering à la Codex's `UserPromptSubmit` is not
157
158
available on Cursor — which makes sessionStart and postToolUse the only
158
159
injection points, and both are currently minimal.
@@ -269,7 +270,7 @@ uses". `tracedecay_skill_list` was called 3 times ever;
269
270
and default to the native tools they were RL-trained on. Superpowers shows
270
271
that mandate framing + rationalization counters materially change this.
271
272
2.**The session-start slot is spent on status, not behavior.** The lean
272
-
injection was a deliberate token economy (`src/hooks.rs:1413`), but it
273
+
injection was a deliberate token economy (`src/hooks/steering.rs`), but it
273
274
delegates all steering to a rule that sits among *dozens* of other
274
275
always-applied rules and skill listings, with no priority claim.
275
276
3.**The mid-session correction loop is mostly inactive.** Once-per-session-per-category
@@ -295,7 +296,7 @@ uses". `tracedecay_skill_list` was called 3 times ever;
295
296
## 6. Recommendations (prioritized)
296
297
297
298
### P0 — Inject a behavioral contract at session start
0 commit comments