Skip to content

Commit 1393936

Browse files
DavidsonGomesclaude
andcommitted
fix: move feature folders under workspace/development/features/
Davidson moved workspace/features/ to workspace/development/features/ (keeping engineering artifacts grouped under development/) and asked to update the prompt convention in every agent/rule that referenced the old path. Updated references: - .claude/rules/dev-phases.md (canonical path definition) - .claude/agents/compass-planner.md (PRD + plan location) - .claude/agents/helm-conductor.md (glob target for sequencing) - .claude/commands/helm-conductor.md (same) - .claude/agents/mirror-retro.md (retro save location) - docs/agents/engineering-layer.md (public docs) Also bundles the terminal auto-reply fix — registers CSI handlers for final 'c' (DA1/DA2), 'n' (DSR status + cursor position), and 't' (window ops) on the xterm.js parser so those queries are silently absorbed before xterm.js can generate a reply. Previous attempts (cols/rows on spawn, regex filter) left "0?1;2c" / "000000" junk in the prompt because some replies slipped through as fragmented bytes or via the CSI-t window-op path. The parser-level block is the real fix; the regex filter stays as a second line of defense with 't'/'c' now included in the charset. CLAUDE.md also got the same workspace path fix but is gitignored — personal workspace file, stays local. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 682a948 commit 1393936

7 files changed

Lines changed: 47 additions & 17 deletions

File tree

.claude/agents/compass-planner.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ You produce **two artifacts** in Phase 2 of the canonical workflow (see `.claude
4646

4747
**Where to save:**
4848

49-
- **Feature-scoped work** (non-trivial, named feature): save both to `workspace/features/{feature-slug}/`
49+
- **Feature-scoped work** (non-trivial, named feature): save both to `workspace/development/features/{feature-slug}/`
5050
- `[C]prd-{feature}.md`
5151
- `[C]plan-{feature}.md`
5252
- **Standalone/one-off work** (no feature name, small scope): save to `workspace/development/plans/[C]plan-{name}-{YYYY-MM-DD}.md` and skip the PRD
@@ -63,9 +63,9 @@ Use the template at `.claude/templates/dev-work-plan.md` for the plan. The PRD s
6363
|---|---|---|---|
6464
| Typo, rename, tiny bug || ❌ (go direct to Bolt) ||
6565
| Small bug fix, clear repro || ✅ minimal | `workspace/development/plans/` |
66-
| Feature with clear acceptance criteria | ✅ (short) || `workspace/features/{slug}/` |
67-
| New feature with ambiguity | ✅ (full) || `workspace/features/{slug}/` |
68-
| High-stakes migration | ✅ (full) + RALPLAN-DR || `workspace/features/{slug}/` |
66+
| Feature with clear acceptance criteria | ✅ (short) || `workspace/development/features/{slug}/` |
67+
| New feature with ambiguity | ✅ (full) || `workspace/development/features/{slug}/` |
68+
| High-stakes migration | ✅ (full) + RALPLAN-DR || `workspace/development/features/{slug}/` |
6969

7070
**Rule:** when in doubt, produce a short PRD. A 10-line PRD is infinitely better than a missing one.
7171

@@ -115,13 +115,13 @@ Use the template at `.claude/templates/dev-work-plan.md` for the plan. The PRD s
115115

116116
1. Always read your memory folder first: `.claude/agent-memory/compass-planner/`
117117
2. Read `.claude/rules/dev-phases.md` — you are the owner of Phase 2 (Planning)
118-
3. Check for a feature folder: is there a `workspace/features/{slug}/` for this work? If yes, read any prior artifacts (discovery, etc.) to inherit context
118+
3. Check for a feature folder: is there a `workspace/development/features/{slug}/` for this work? If yes, read any prior artifacts (discovery, etc.) to inherit context
119119
4. Classify intent: Trivial / Refactoring / Build from Scratch / Mid-sized
120120
5. For codebase facts, spawn `@scout-explorer` (in parallel with other research)
121121
6. Ask user only about: priorities, timelines, scope decisions, risk tolerance, preferences
122122
7. For non-trivial work, consult `@echo-analyst` first for gap analysis
123123
8. Produce the PRD first (if applicable), then the plan derived from it
124-
9. Save to the feature folder (`workspace/features/{slug}/`) or `workspace/development/plans/` per the table above
124+
9. Save to the feature folder (`workspace/development/features/{slug}/`) or `workspace/development/plans/` per the table above
125125
10. Display confirmation summary, wait for explicit "proceed"
126126
11. On approval, hand off to `@apex-architect` (Phase 3) for non-trivial features, or directly to `@bolt-executor` (Phase 4) for clear executable plans
127127
12. Update agent memory with patterns worth remembering

.claude/agents/helm-conductor.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ Read `dev-phases.md` at the start of every session. Your recommendations must al
3737

3838
You don't have a dedicated working folder — you don't produce artifacts. You read from:
3939

40-
- `workspace/features/` — all active feature folders
40+
- `workspace/development/features/` — all active feature folders
4141
- `workspace/development/plans/` — standalone plans not yet in feature folders
4242
- `workspace/development/stories/` — story files (if present)
4343

44-
When you need to record a sequencing decision, append it to `workspace/features/{feature}/[C]helm-notes.md` in the relevant feature — short entries only.
44+
When you need to record a sequencing decision, append it to `workspace/development/features/{feature}/[C]helm-notes.md` in the relevant feature — short entries only.
4545

4646
## Identity
4747

@@ -51,7 +51,7 @@ When you need to record a sequencing decision, append it to `workspace/features/
5151

5252
## How you operate
5353

54-
1. **Read first, recommend second.** Before answering "what next", glob `workspace/features/*/` and read the most recent artifact in each (discovery, PRD, plan, verification, retro). You cannot sequence what you haven't seen.
54+
1. **Read first, recommend second.** Before answering "what next", glob `workspace/development/features/*/` and read the most recent artifact in each (discovery, PRD, plan, verification, retro). You cannot sequence what you haven't seen.
5555

5656
2. **Respect the 6 phases.** Every task belongs to a phase (Discovery, Planning, Solutioning, Build, Verify, Retro). Name the phase when you recommend.
5757

@@ -80,7 +80,7 @@ For the full rules, entry/exit criteria and skip conditions, read `.claude/rules
8080

8181
### "What should I work on next?"
8282

83-
1. Read all `workspace/features/*/` folders. For each, determine the current phase (look at which artifacts exist).
83+
1. Read all `workspace/development/features/*/` folders. For each, determine the current phase (look at which artifacts exist).
8484
2. For each feature, identify the next action (next phase or a blocker).
8585
3. Rank by: blockers first (to unblock), then by dependency order, then by priority signal from memory.
8686
4. Recommend the top 1-3 with phase + owner + why.
@@ -93,7 +93,7 @@ For the full rules, entry/exit criteria and skip conditions, read `.claude/rules
9393

9494
### "Sprint planning for {period}"
9595

96-
1. List candidate features (from `workspace/features/` or the user).
96+
1. List candidate features (from `workspace/development/features/` or the user).
9797
2. For each, identify which phases remain.
9898
3. Order by dependency.
9999
4. Propose a sequence: "Week 1: Feature A Phase 2-3, Feature B Phase 4. Week 2: Feature A Phase 4, Feature C Phase 1."

.claude/agents/mirror-retro.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Beyond your own agent memory in `.claude/agent-memory/mirror-retro/`, you have *
3737

3838
Your workspace folder: the **feature folder itself**. You write retros next to the other artifacts:
3939

40-
- `workspace/features/{feature-slug}/[C]retro-{feature}-{YYYY-MM-DD}.md`
40+
- `workspace/development/features/{feature-slug}/[C]retro-{feature}-{YYYY-MM-DD}.md`
4141

4242
For sprint-level retros spanning multiple features:
4343

.claude/commands/helm-conductor.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
Use the @helm-conductor agent to orchestrate the engineering cycle — sequence features, decide what to work on next, route tasks to the right specialist agent, or plan a sprint: $ARGUMENTS
22

3-
Helm is the conductor, not a worker. It reads the state of `workspace/features/`, understands the 6-phase workflow in `.claude/rules/dev-phases.md`, and recommends the next concrete action with owner agent, expected output, and blockers. If no arguments are provided, Helm should read the feature folders and recommend what to work on next.
3+
Helm is the conductor, not a worker. It reads the state of `workspace/development/features/`, understands the 6-phase workflow in `.claude/rules/dev-phases.md`, and recommends the next concrete action with owner agent, expected output, and blockers. If no arguments are provided, Helm should read the feature folders and recommend what to work on next.

.claude/rules/dev-phases.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Call `@helm-conductor` when you have multiple active features or are unsure whic
8484
Every non-trivial piece of work lives in its own feature folder:
8585

8686
```
87-
workspace/features/{feature-slug}/
87+
workspace/development/features/{feature-slug}/
8888
├── [C]discovery-{feature}.md ← Phase 1 (Echo)
8989
├── [C]prd-{feature}.md ← Phase 2 (Compass)
9090
├── [C]plan-{feature}.md ← Phase 2 (Compass)
@@ -110,7 +110,7 @@ workspace/features/{feature-slug}/
110110

111111
Before starting work, every engineering agent should check for prior artifacts in the active feature folder:
112112

113-
1. **Is there a feature folder for this work?** Look for `workspace/features/{slug}/`
113+
1. **Is there a feature folder for this work?** Look for `workspace/development/features/{slug}/`
114114
2. **If yes**, read in order: discovery → PRD → plan → architecture → any prior reviews/verifications
115115
3. **Inherit** constraints, decisions, and open questions — don't re-litigate them
116116
4. **If unclear** which feature this is, ask the user or call `@helm-conductor`
@@ -129,7 +129,7 @@ When one agent hands off to another, the handoff includes:
129129
- **Expected output:** what the next agent should produce and where
130130

131131
Example handoff:
132-
> "Compass → Bolt: plan saved to `workspace/features/dark-mode/[C]plan-dark-mode.md`. Architecture pending (Apex). Open question: token storage strategy (see plan §Open Questions). Expected: implementation against steps 1-5 + self-verification."
132+
> "Compass → Bolt: plan saved to `workspace/development/features/dark-mode/[C]plan-dark-mode.md`. Architecture pending (Apex). Open question: token storage strategy (see plan §Open Questions). Expected: implementation against steps 1-5 + self-verification."
133133
134134
---
135135

dashboard/frontend/src/components/AgentTerminal.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,28 @@ export default function AgentTerminal({ agent, workingDir, accentColor = '#00FFA
6262
termRef.current = term
6363
fitRef.current = fit
6464

65+
// Silence terminal query replies at the parser level — before
66+
// xterm.js gets a chance to generate them. The pty already knows
67+
// its own capabilities; forwarding emulator-side replies made
68+
// claude see them as keyboard input and print bytes like "0?1;2c"
69+
// or "000000" into the prompt on startup.
70+
//
71+
// Registering a handler that returns `true` marks the CSI as
72+
// "handled" and prevents the default sendDeviceAttributesPrimary /
73+
// sendDeviceAttributesSecondary / deviceStatus / reportWindow*
74+
// paths from firing. No reply is emitted at all.
75+
//
76+
// - final 'c' → DA1 (\x1b[c) and DA2 (\x1b[>c)
77+
// - final 'n' → DSR status (\x1b[5n) and cursor pos (\x1b[6n)
78+
// - final 't' → window manipulation reports (xterm
79+
// CSI Ps ; Ps ; Ps t)
80+
const noReply = () => true
81+
term.parser.registerCsiHandler({ final: 'c' }, noReply)
82+
term.parser.registerCsiHandler({ final: 'c', prefix: '>' }, noReply)
83+
term.parser.registerCsiHandler({ final: 'n' }, noReply)
84+
term.parser.registerCsiHandler({ final: 'n', prefix: '?' }, noReply)
85+
term.parser.registerCsiHandler({ final: 't' }, noReply)
86+
6587
const onResize = () => {
6688
try {
6789
fit.fit()
@@ -76,7 +98,15 @@ export default function AgentTerminal({ agent, workingDir, accentColor = '#00FFA
7698
}
7799
window.addEventListener('resize', onResize)
78100

101+
// Second line of defense: even though the parser-level handlers
102+
// above should prevent every known query reply, drop any onData
103+
// payload that still looks like a terminal auto-reply. Real user
104+
// keyboard input (arrows \x1b[A-D, Home/End \x1b[H/F, function
105+
// keys \x1b[<n>~, modified arrows \x1b[1;2A) don't match either
106+
// alternative.
107+
const AUTO_REPLY_RE = /^\x1b\[(\?|>)[0-9;]*[a-zA-Z]$|^\x1b\[[0-9;]*[nRct]$/
79108
term.onData((data) => {
109+
if (AUTO_REPLY_RE.test(data)) return
80110
if (wsRef.current?.readyState === WebSocket.OPEN) {
81111
wsRef.current.send(JSON.stringify({ type: 'input', data }))
82112
}

docs/agents/engineering-layer.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Discovery → Planning → Solutioning → Build → Verify → Retro
8484

8585
**Cycle orchestration**`@helm-conductor` sits above the phases and answers "what next?", "who does it?", and "what's blocked?". Call Helm when you have multiple active features or need sprint sequencing.
8686

87-
**Feature folders** — non-trivial work lives in `workspace/features/{feature-slug}/` where all artifacts of one feature are grouped together. Standalone artifacts continue to live in `workspace/development/{type}/`.
87+
**Feature folders** — non-trivial work lives in `workspace/development/features/{feature-slug}/` where all artifacts of one feature are grouped together. Standalone artifacts continue to live in `workspace/development/{type}/`.
8888

8989
## The 25 `dev-*` Skills
9090

0 commit comments

Comments
 (0)