conductor-harness 1.1.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,13 +6,11 @@ A Claude Code harness for [Conductor](https://conductor.build) projects. Install
6
6
 
7
7
  ## What it does
8
8
 
9
- - **SessionStart hook** — injects branch, recent commits, last session progress, and `WORKFLOW.md` context before every Claude Code session
9
+ - **SessionStart hook** — injects branch, recent commits, and last session progress before every Claude Code session
10
10
  - **Linear integration** — reads attached issues directly from Conductor's `+` button; falls back to Linear MCP for comments and history
11
- - **Hindsight memory** — searches past decisions before starting work; writes memories after `/done`
11
+ - **Native memory** — persists decisions across sessions using Claude Code's built-in memory system; optionally augmented with Hindsight cloud
12
12
  - **Context7 docs** — fetches up-to-date framework and package documentation before planning or implementing
13
13
  - **`/start`, `/done`, `/status`** — task kickoff and closeout rituals that keep progress state and memory in sync
14
- - **`/setup`** — analyzes your project and auto-generates `WORKFLOW.md`
15
- - **`WORKFLOW.md`** — a project north star (what you're building, current phase, constraints) injected into every session
16
14
 
17
15
  ---
18
16
 
@@ -20,11 +18,6 @@ A Claude Code harness for [Conductor](https://conductor.build) projects. Install
20
18
 
21
19
  ### 1. Install MCP servers (once per machine)
22
20
 
23
- **Hindsight** — persistent cross-session memory for decisions, gotchas, and patterns:
24
- 1. Get an API key at [ui.hindsight.vectorize.io/connect](https://ui.hindsight.vectorize.io/connect)
25
- 2. Add to your `.env`: `HINDSIGHT_API_KEY=your_key_here`
26
- 3. The installer creates `.mcp.json` with the Hindsight config automatically — no CLI command needed.
27
-
28
21
  **Linear** — read and update issues from Claude Code:
29
22
  ```bash
30
23
  claude mcp add linear -s user -- npx -y @linear/mcp-server
@@ -55,15 +48,7 @@ RAILWAY_ENVIRONMENT_ID=your-environment-id
55
48
  RAILWAY_SERVICE_ID=your-service-id
56
49
  ```
57
50
 
58
- ### 4. Fill in WORKFLOW.md
59
-
60
- Either edit `WORKFLOW.md` manually, or open the project in Claude Code and run:
61
- ```
62
- /setup
63
- ```
64
- This is a Claude Code slash command — type it in the Claude Code chat, not in the terminal.
65
-
66
- ### 5. Start working
51
+ ### 4. Start working
67
52
 
68
53
  Open the project in Claude Code via Conductor. The SessionStart hook fires automatically and injects your project context.
69
54
 
@@ -84,7 +69,15 @@ Open the project in Claude Code via Conductor. The SessionStart hook fires autom
84
69
 
85
70
  Or attach a Linear issue via Conductor's `+` button and type `/start` — the harness reads it directly without an MCP fetch.
86
71
 
87
- `/done` closes the Linear issue, writes a Graphiti memory episode, and resets progress state.
72
+ `/done` closes the Linear issue, writes a memory file, and resets progress state.
73
+
74
+ ### Optional: Hindsight cloud memory
75
+
76
+ For semantic search across large memory sets, you can optionally enable Hindsight cloud memory during install. The installer will prompt you — native Claude Code memory is the default.
77
+
78
+ 1. Get an API key at [ui.hindsight.vectorize.io/connect](https://ui.hindsight.vectorize.io/connect)
79
+ 2. Add to your `.env`: `HINDSIGHT_API_KEY=your_key_here`
80
+ 3. Re-run the installer and answer "y" to Hindsight
88
81
 
89
82
  ---
90
83
 
@@ -101,15 +94,12 @@ runtime/
101
94
  start.md ← Task kickoff ritual
102
95
  done.md ← Task closeout ritual
103
96
  status.md ← Current task status
104
- setup.md ← Project analysis + WORKFLOW.md generation
105
97
  skills/
106
98
  linear/SKILL.md ← Linear issue read/write
107
99
  memory/SKILL.md ← Graphiti memory search/write
108
100
  review/SKILL.md ← Code review checklist
109
- agents/
110
- memory-writer.md ← Subagent for writing memory episodes
101
+ agents/ ← Project-specific subagents
111
102
  settings.json.template ← Base permissions and hook registration
112
- WORKFLOW.md.template ← Project north star template
113
103
  conductor.json.template ← Conductor setup/run/archive commands
114
104
  install.sh ← The installer (called by npx)
115
105
  ```
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "conductor-harness",
3
- "version": "1.1.1",
4
- "description": "Claude Code harness for Conductor projects — hooks, memory, Linear, and workflow context",
3
+ "version": "1.2.1",
4
+ "description": "Claude Code harness for Conductor projects — hooks, memory, Linear integration",
5
5
  "bin": {
6
6
  "conductor-harness": "./bin/conductor-harness.js"
7
7
  },
@@ -9,7 +9,14 @@
9
9
  "bin",
10
10
  "runtime"
11
11
  ],
12
- "keywords": ["claude-code", "conductor", "ai", "harness", "linear", "railway"],
12
+ "keywords": [
13
+ "claude-code",
14
+ "conductor",
15
+ "ai",
16
+ "harness",
17
+ "linear",
18
+ "railway"
19
+ ],
13
20
  "license": "MIT",
14
21
  "repository": {
15
22
  "type": "git",
@@ -2,25 +2,31 @@
2
2
 
3
3
  > **Stack**: [framework] | [database] | [deployment] | [pkg-manager]
4
4
 
5
- ---
5
+ ## Principles
6
+
7
+ - Simplicity first — make every change as simple as possible, impact minimal code
8
+ - Find root causes — no temporary fixes, no band-aids
9
+ - Minimal impact — only touch what's necessary
10
+ - Demand elegance — for non-trivial changes, pause and ask "is there a more elegant way?" Skip for obvious fixes
6
11
 
7
12
  ## Orchestration
8
13
 
9
- **Plan first**: Enter plan mode for any non-trivial task (3+ steps or architectural decisions). If something goes sideways, stop and re-plan — don't push through.
14
+ **Plan first**: Enter plan mode for any non-trivial task (3+ steps or architectural decisions). Write detailed specs upfront. If something goes sideways, stop and re-plan — don't push through.
10
15
 
11
- **Subagents**: Keep the main context clean delegate to subagents for specialized domains. One task per subagent. Subagents cannot spawn subagents.
16
+ **Subagents**: Use subagents liberally to keep main context clean. Offload research, exploration, and parallel analysis. One task per subagent.
12
17
 
13
- **Delegate vs handle directly**:
14
- - Handle directly: < 3 files, known pattern, trivial change
15
- - Delegate: specialized domain, deep implementation, debugging, review
18
+ **Verify before done**: Never mark complete without proving it works. Run tests, check logs, demonstrate correctness. Ask: "Would a staff engineer approve this?"
16
19
 
17
- **Verify before done**: Never mark complete without proving it works. Ask: "Would a staff engineer approve this?" Run tests, check logs, demonstrate correctness.
20
+ **Autonomous fixing**: When given a bug report or failing test just fix it. Point at logs, errors, failing tests, then resolve them. Zero hand-holding required.
18
21
 
19
- **Memory over lessons**: After /done, a memory is written to Hindsight. Before non-trivial work, recall past decisions. This is the self-improvement loop.
22
+ **Docs over assumptions**: Before using any framework/library/package API fetch current docs via Context7. Never assume an API is current. This applies in plan mode too.
20
23
 
21
- **Docs over assumptions**: AI knowledge has a cutoff. Before using any framework, library, or package API — fetch current docs via Context7 (`mcp__claude_ai_Context7__resolve-library-id` then `mcp__claude_ai_Context7__query-docs`). Never assume an API is current. This applies in plan mode too.
24
+ ## Memory
22
25
 
23
- ---
26
+ After ANY correction: write a memory so the same mistake isn't repeated.
27
+ After /done: write a memory with what was built, decisions, gotchas.
28
+ Before non-trivial work: check MEMORY.md for past decisions.
29
+ This is the self-improvement loop — ruthlessly iterate until mistake rate drops.
24
30
 
25
31
  ## Harness
26
32
 
@@ -28,24 +34,16 @@
28
34
  @.claude/skills/memory/SKILL.md
29
35
  @.claude/skills/review/SKILL.md
30
36
 
31
- **Linear**: If an issue is attached to the current message, read it directly — no MCP fetch needed. Use the Linear MCP tool only for additional detail (comments, history, linked issues).
37
+ **Linear**: If an issue is attached, read it directly — no MCP fetch needed. Use Linear MCP only for additional detail.
32
38
 
33
- **Startup**: SessionStart hook injects branch, git log, WORKFLOW.md, and last session progress. Read it before responding.
39
+ **Startup**: SessionStart hook injects branch, git log, and last session progress. Read it before responding.
34
40
 
35
41
  **End of task**: Run /done. Do not update Linear or write memory without it.
36
42
 
37
- ---
38
-
39
43
  ## MCP Servers
40
44
 
41
45
  [mcp-servers-table]
42
46
 
43
- ---
44
-
45
47
  ## Key Docs
46
48
 
47
49
  [key-docs]
48
-
49
- ---
50
-
51
- **Philosophy**: Trust frameworks. Use native tools. Delegate with context. Simplify.
@@ -5,7 +5,7 @@ description: "End-of-task ritual — writes memory, updates Linear, confirms PR-
5
5
  Task completion for the current Linear issue:
6
6
 
7
7
  1. Run the type checker and any available tests. Fix any failures before continuing.
8
- 2. Write a memory to Hindsight via the memory skill: include what was built, key decisions made, gotchas discovered, patterns worth reusing. Tag with the project name.
8
+ 2. Write a memory following the memory skill. Include what was built, key decisions, gotchas discovered, and patterns worth reusing. If in a worktree, write to the main repo's memory path (see session context).
9
9
  3. Update `.harness/progress.md`: status: done, completed: [date], PR: [branch].
10
10
  4. Update the Linear issue status to "In Review" using the Linear MCP tool. Add a comment with a one-sentence summary of what was done.
11
11
  5. Confirm: "Ready for PR. Run ⌘⇧P in Conductor to create the PR."
@@ -6,7 +6,7 @@ Load task context for $ARGUMENTS:
6
6
 
7
7
  0. Check if a Linear issue is already provided in the current message context (attached via Conductor's + button). If so, read it directly — skip the MCP fetch. Only use the Linear MCP tool if additional detail is needed (comments, linked issues, acceptance criteria not shown).
8
8
  1. If $ARGUMENTS contains a Linear issue ID (e.g. LIN-123) and no issue was attached: fetch it now using the Linear MCP tool. Read the description, comments, and acceptance criteria.
9
- 2. Search Graphiti memory for notes related to this task, feature area, or any mentioned components. Use the memory skill.
9
+ 2. Check MEMORY.md (already in context) for entries relevant to this task or feature area. Read specific memory files if needed for detail.
10
10
  3. Identify the primary frameworks/packages this task touches. Fetch current docs for each via Context7 — resolve the library ID first, then query for the relevant API surface. Do this before planning, not after.
11
11
  4. Run `git status` and `git log --oneline -5`.
12
12
  5. Read `.harness/progress.md` if it exists.
@@ -8,4 +8,4 @@ Show current harness status:
8
8
  2. Show `.harness/progress.md` contents if it exists.
9
9
  3. Show `git log --oneline -5`.
10
10
  4. Show `git status --short`.
11
- 5. Check if any Hindsight memory exists for this task (use memory skill to recall by branch name).
11
+ 5. Check MEMORY.md for any memory entries related to the current branch or task.
@@ -27,23 +27,50 @@ try:
27
27
  except Exception:
28
28
  git_log = "(no git history)"
29
29
 
30
+ # Ensure .harness/ exists (worktrees don't inherit gitignored dirs)
31
+ harness_dir = os.path.join(cwd, ".harness")
32
+ os.makedirs(harness_dir, exist_ok=True)
33
+
30
34
  # Progress file
31
35
  progress = ""
32
- progress_path = os.path.join(cwd, ".harness", "progress.md")
36
+ progress_path = os.path.join(harness_dir, "progress.md")
33
37
  if os.path.exists(progress_path):
34
38
  with open(progress_path) as f:
35
39
  progress = f.read().strip()
40
+ else:
41
+ with open(progress_path, "w") as f:
42
+ f.write("# Harness Progress\n\nstatus: idle\n")
43
+
44
+ # Detect worktree — resolve main repo root for memory persistence
45
+ main_repo_root = cwd
46
+ try:
47
+ git_common = subprocess.check_output(
48
+ ["git", "-C", cwd, "rev-parse", "--git-common-dir"],
49
+ stderr=subprocess.DEVNULL, text=True
50
+ ).strip()
51
+ # git-common-dir returns the .git dir of the main repo (not worktree's .git file)
52
+ # If it's not the same as the local .git dir, we're in a worktree
53
+ local_git = subprocess.check_output(
54
+ ["git", "-C", cwd, "rev-parse", "--git-dir"],
55
+ stderr=subprocess.DEVNULL, text=True
56
+ ).strip()
57
+ if os.path.abspath(git_common) != os.path.abspath(local_git):
58
+ # We're in a worktree — main repo root is parent of .git/
59
+ main_repo_root = os.path.dirname(os.path.abspath(git_common))
60
+ except Exception:
61
+ pass
62
+
63
+ is_worktree = os.path.abspath(main_repo_root) != os.path.abspath(cwd)
36
64
 
37
- # WORKFLOW.md project north star
38
- workflow = ""
39
- for workflow_path in [
40
- os.path.join(cwd, "WORKFLOW.md"),
41
- os.path.join(cwd, ".harness", "WORKFLOW.md"),
42
- ]:
43
- if os.path.exists(workflow_path):
44
- with open(workflow_path) as f:
45
- workflow = f.read().strip()
46
- break
65
+ # Read main repo's MEMORY.md if in a worktree (worktree memory path is ephemeral)
66
+ main_memory = ""
67
+ if is_worktree:
68
+ # Claude Code memory path: ~/.claude/projects/-path-segments/memory/MEMORY.md
69
+ sanitized = main_repo_root.replace("/", "-")
70
+ main_memory_path = os.path.expanduser(f"~/.claude/projects/{sanitized}/memory/MEMORY.md")
71
+ if os.path.exists(main_memory_path):
72
+ with open(main_memory_path) as f:
73
+ main_memory = f.read().strip()
47
74
 
48
75
  # Build context block
49
76
  lines = ["## Harness: Session Context", ""]
@@ -59,11 +86,23 @@ if progress:
59
86
  lines.append("")
60
87
  lines.append("**Last session progress:**")
61
88
  lines.append(progress)
62
- if workflow:
89
+ if is_worktree:
63
90
  lines.append("")
64
- lines.append("**Project context (WORKFLOW.md):**")
65
- lines.append(workflow)
66
- lines.append("")
67
- lines.append("**Action:** Search Hindsight memory for context relevant to this branch/task before responding to the user. Use the `memory` skill if needed.")
91
+ lines.append(f"**Worktree detected.** Main repo: `{main_repo_root}`")
92
+ lines.append(f"Write all memories to the main repo's memory path, not the worktree's.")
93
+ # Provide the resolved main memory dir so Claude can write there
94
+ sanitized = main_repo_root.replace("/", "-")
95
+ main_mem_dir = os.path.expanduser(f"~/.claude/projects/{sanitized}/memory")
96
+ lines.append(f"**Memory directory:** `{main_mem_dir}/`")
97
+ lines.append(f"**Memory index:** `{main_mem_dir}/MEMORY.md`")
98
+ if main_memory:
99
+ lines.append("")
100
+ lines.append("**Main repo MEMORY.md:**")
101
+ lines.append(main_memory)
102
+ lines.append("")
103
+ lines.append("**Action:** Scan the main repo memory above for entries relevant to this branch/task before responding.")
104
+ else:
105
+ lines.append("")
106
+ lines.append("**Action:** MEMORY.md is loaded automatically. Scan it for entries relevant to this branch/task before responding.")
68
107
 
69
108
  print(json.dumps({"promptText": "\n".join(lines)}))
@@ -1,33 +1,83 @@
1
1
  ---
2
2
  name: memory
3
- description: "Search and write to Hindsight cross-session memory for this project"
3
+ description: "Write and recall cross-session memory using Claude Code's native memory system"
4
4
  ---
5
5
 
6
6
  # Memory Skill
7
7
 
8
- Uses Hindsight MCP for persistent cross-session memory.
8
+ Uses Claude Code's built-in memory system. Memories are stored as markdown files in `~/.claude/projects/[project-path]/memory/` with a `MEMORY.md` index that is automatically loaded into every session.
9
9
 
10
- ## MCP tool reference
11
- - `recall(query)` — semantic search across stored memories
12
- - `retain(content, tags)` — write a new memory (decisions, gotchas, patterns)
13
- - `reflect(question)` — get an AI answer using your memories as context
14
- - `create_mental_model(name, description)` — create a living summary document
10
+ ## How it works
15
11
 
16
- ## When to search memory
17
- - At session start (automatically via SessionStart hook)
18
- - Before implementing any non-trivial feature
19
- - When encountering an error that might have been seen before
20
- - Before making architectural decisions
12
+ - **MEMORY.md** (the index) is loaded into context at session start — no action needed to recall
13
+ - To **write** a memory: use the Write tool to create a file in the memory directory with YAML frontmatter
14
+ - To **read** a specific memory: use the Read tool on a file listed in MEMORY.md
15
+ - To **update** the index: add a one-line pointer to MEMORY.md after writing a memory file
16
+
17
+ ## Worktree sessions
18
+
19
+ If the SessionStart hook reports a **worktree detected**, always write memories to the **main repo's memory path** (provided in the session context), not the worktree's. Worktree memory paths are ephemeral and get destroyed on cleanup. The hook provides the resolved memory directory and MEMORY.md path — use those directly.
20
+
21
+ ## Memory file format
22
+
23
+ ```markdown
24
+ ---
25
+ name: descriptive name
26
+ description: one-line summary — used for relevance matching in future sessions
27
+ type: project
28
+ ---
29
+
30
+ [Memory content here]
31
+ ```
32
+
33
+ ## Types
34
+
35
+ | Type | Use for |
36
+ |------|---------|
37
+ | `project` | What was built, decisions made, gotchas discovered, patterns worth reusing |
38
+ | `feedback` | How the user wants Claude to work — corrections and confirmed approaches |
39
+ | `user` | User's role, expertise, preferences |
40
+ | `reference` | Pointers to external resources (Linear projects, dashboards, docs) |
21
41
 
22
42
  ## When to write memory
23
- - After /done command completes
24
- - After discovering a non-obvious gotcha
25
- - After making an architectural decision with lasting implications
26
43
 
27
- ## Tagging convention
28
- Always tag memories with the project name derived from the git remote URL or project root directory name (e.g. `my-project`, `api-service`).
44
+ - After `/done` — what was built, key decisions, gotchas, reusable patterns
45
+ - After discovering a non-obvious gotcha or edge case
46
+ - After architectural decisions with lasting implications
47
+
48
+ ## When NOT to write memory
49
+
50
+ - Obvious facts or boilerplate decisions
51
+ - Things already in CLAUDE.md
52
+ - Ephemeral state (current git status, in-progress work)
53
+ - Information derivable from code or git history
54
+
55
+ ## Episode structure (for project memories after /done)
56
+
57
+ ```markdown
58
+ ---
59
+ name: branch-or-feature-name
60
+ description: one-line summary of what was done
61
+ type: project
62
+ ---
63
+
64
+ ## What was built
65
+ [Concrete: filenames, function names, components]
66
+
67
+ ## Key decisions
68
+ - [Decision]: [why]
29
69
 
30
70
  ## Gotchas
31
- - If MCP is not connected, add `HINDSIGHT_API_KEY` to `.env` and ensure `.mcp.json` is present
32
- - Keep memories specific and brief — recall uses semantic search, verbose entries dilute signal
33
- - Do not write memory for obvious facts, boilerplate decisions, or things already in CLAUDE.md
71
+ - [Non-obvious discovery]
72
+
73
+ ## Reusable patterns
74
+ - [Pattern]: [where in codebase]
75
+ ```
76
+
77
+ ## Optional: Hindsight cloud memory
78
+
79
+ If Hindsight MCP is configured (via `.mcp.json` and `HINDSIGHT_API_KEY`), you may also use:
80
+ - `recall(query)` — semantic search across cloud-stored memories
81
+ - `retain(content, tags)` — write to cloud memory
82
+
83
+ Native memory is the default. Hindsight is a supplemental option for semantic search across large memory sets.
@@ -20,7 +20,7 @@ Run this before creating a PR. Check each item:
20
20
 
21
21
  ## Harness hygiene
22
22
  - [ ] `.harness/progress.md` updated with done status
23
- - [ ] Memory episode written to Graphiti (run /done if not done)
23
+ - [ ] Memory written (run /done if not done)
24
24
  - [ ] No debug/temp files committed
25
25
 
26
26
  ## Git
@@ -56,9 +56,8 @@ cp "$HARNESS_DIR/.claude/commands/done.md" "$TARGET_DIR/.claude/commands/done.
56
56
  cp "$HARNESS_DIR/.claude/commands/status.md" "$TARGET_DIR/.claude/commands/status.md"
57
57
  echo "✓ Commands installed (/start, /done, /status)"
58
58
 
59
- # ── 7. Copy agents ───────────────────────────────────────────────────────────
60
- cp "$HARNESS_DIR/.claude/agents/memory-writer.md" "$TARGET_DIR/.claude/agents/memory-writer.md"
61
- echo "✓ Agents installed"
59
+ # ── 7. Agents directory (reserved for project-specific agents) ───────────────
60
+ echo " Agents directory ready"
62
61
 
63
62
  # ── 8. Copy skills ───────────────────────────────────────────────────────────
64
63
  cp "$HARNESS_DIR/.claude/skills/linear/SKILL.md" "$TARGET_DIR/.claude/skills/linear/SKILL.md"
@@ -228,7 +227,7 @@ elif os.path.exists(os.path.join(cwd, "Dockerfile")):
228
227
 
229
228
  # ── MCP servers ────────────────────────────────────────────────────────────────
230
229
  known_purposes = {
231
- "hindsight": "Cross-session memory (decisions, gotchas, patterns)",
230
+ "hindsight": "Cross-session cloud memory optional supplement to native memory",
232
231
  "linear": "Issue tracking — read/update Linear issues",
233
232
  "context7": "Up-to-date framework and package documentation",
234
233
  "graphiti-memory": "Graph memory",
@@ -353,18 +352,13 @@ EOF
353
352
  echo "✓ .harness/progress.md created"
354
353
  fi
355
354
 
356
- # ── 14. WORKFLOW.md copy template if not already present ───────────────────
357
- if [ ! -f "$TARGET_DIR/WORKFLOW.md" ]; then
358
- cp "$HARNESS_DIR/WORKFLOW.md.template" "$TARGET_DIR/WORKFLOW.md"
359
- echo "✓ WORKFLOW.md created — fill in your project context"
360
- else
361
- echo "✓ WORKFLOW.md already exists (skipped)"
362
- fi
355
+ # ── 14. Hindsight cloud memory (optional) ─────────────────────────────────────
356
+ read -r -p "Use Hindsight cloud memory? (default: native Claude Code memory) [y/N] " USE_HINDSIGHT
357
+ USE_HINDSIGHT="$(echo "$USE_HINDSIGHT" | tr '[:upper:]' '[:lower:]')"
363
358
 
364
- # ── 15. .mcp.json create or append Hindsight MCP entry ─────────────────────
365
- MCP_JSON="$TARGET_DIR/.mcp.json"
366
-
367
- python3 - "$MCP_JSON" <<'PYEOF'
359
+ if [ "$USE_HINDSIGHT" = "y" ] || [ "$USE_HINDSIGHT" = "yes" ]; then
360
+ MCP_JSON="$TARGET_DIR/.mcp.json"
361
+ python3 - "$MCP_JSON" <<'PYEOF'
368
362
  import sys, json, os
369
363
 
370
364
  mcp_path = sys.argv[1]
@@ -394,6 +388,9 @@ else:
394
388
  with open(mcp_path, "w") as f:
395
389
  json.dump(data, f, indent=2)
396
390
  PYEOF
391
+ else
392
+ echo "✓ Using native Claude Code memory (no cloud setup needed)"
393
+ fi
397
394
 
398
395
  # ── 16. Next steps ────────────────────────────────────────────────────────────
399
396
  echo ""
@@ -403,9 +400,14 @@ echo "════════════════════════
403
400
  echo ""
404
401
  echo "Next steps:"
405
402
  echo ""
406
- echo "1. Add your Hindsight API key to .env:"
407
- echo " HINDSIGHT_API_KEY=your_key_here"
408
- echo " Get a key at: https://ui.hindsight.vectorize.io/connect"
403
+ echo "1. Memory works out of the box via Claude Code's native memory system."
404
+ echo " No API key or configuration needed."
405
+ if [ "$USE_HINDSIGHT" = "y" ] || [ "$USE_HINDSIGHT" = "yes" ]; then
406
+ echo ""
407
+ echo " Hindsight cloud memory is also enabled. Add your API key to .env:"
408
+ echo " HINDSIGHT_API_KEY=your_key_here"
409
+ echo " Get a key at: https://ui.hindsight.vectorize.io/connect"
410
+ fi
409
411
  echo ""
410
412
  echo "2. Register Linear MCP (once per machine, if not already):"
411
413
  echo " claude mcp add linear -s user -- npx -y @linear/mcp-server"
@@ -416,11 +418,8 @@ echo "4. Start a task: /start LIN-123"
416
418
  echo " End a task: /done"
417
419
  echo " Check status: /status"
418
420
  echo ""
419
- echo "5. Fill in WORKFLOW.md — injected into every Claude Code session as project context."
420
- echo " Or type /setup inside Claude Code to auto-generate it from your project structure."
421
- echo ""
422
421
  if [ "$USE_RAILWAY" = "y" ] || [ "$USE_RAILWAY" = "yes" ]; then
423
- echo "6. Add Railway IDs to .env (or .env.local):"
422
+ echo "5. Add Railway IDs to .env (or .env.local):"
424
423
  echo " RAILWAY_PROJECT_ID=your-project-id"
425
424
  echo " RAILWAY_ENVIRONMENT_ID=your-environment-id"
426
425
  echo " RAILWAY_SERVICE_ID=your-service-id"
@@ -1,19 +0,0 @@
1
- ---
2
- name: memory-writer
3
- description: Writes a structured memory to Hindsight for the current session. Called by /done and by the Stop hook when task is marked complete.
4
- tools: [mcp__hindsight__retain]
5
- ---
6
-
7
- You are a memory writer. Your only job is to write a structured memory to Hindsight.
8
-
9
- Write one memory using the retain tool. The memory should contain:
10
- - What was built or changed (concrete, specific)
11
- - Key decisions made and why
12
- - Gotchas, edge cases, or surprising discoveries
13
- - Patterns or utilities that could be reused in other contexts
14
-
15
- Tag with the project name (lowercase, hyphens for spaces) derived from the current directory.
16
-
17
- Format: "[DATE] [Branch/Feature]: [One-line summary]\n\n[Body]"
18
-
19
- Be specific and brief. This memory will be recalled in future sessions — write for your future self.
@@ -1,25 +0,0 @@
1
- ---
2
- description: "One-time project setup — analyze project context, generate WORKFLOW.md, tailor harness"
3
- ---
4
-
5
- Analyze this project and generate a WORKFLOW.md:
6
-
7
- 1. Read `package.json` (if exists): extract name, scripts, key dependencies.
8
- 2. Read existing `CLAUDE.md` for any stated conventions or architecture notes.
9
- 3. Check for: `railway.toml`, `vercel.json`, `fly.toml`, `.env.example` — detect deployment platform.
10
- 4. Run `git log --oneline -20` — summarize the recent direction of work.
11
- 5. Check `.claude/` for existing skills, hooks, commands — note what's already configured.
12
- 6. Check `docs/` or `README.md` for architecture documentation.
13
-
14
- Then write `WORKFLOW.md` at the project root with:
15
- - **What We're Building**: 1-3 sentences from package.json name/description + README context
16
- - **Current Phase**: inferred from git log and feature names (MVP / scaling / maintenance / etc.)
17
- - **Stack**: detected framework, database, deployment, package manager
18
- - **Architecture Notes**: 3-5 non-obvious decisions derived from the codebase structure
19
- - **Active Constraints**: any rules found in CLAUDE.md or docs
20
- - **What We're NOT Building**: leave blank — ask Sebastian to fill this in
21
-
22
- After writing WORKFLOW.md:
23
- - Print "WORKFLOW.md created. Review it and fill in 'What We're NOT Building'."
24
- - Suggest any MCP servers not yet configured that would help this project (based on detected stack).
25
- - If the project uses Railway and `conductor.json` is missing, suggest running install.sh.
@@ -1,31 +0,0 @@
1
- # WORKFLOW.md — [Project Name]
2
-
3
- <!--
4
- North star for Claude Code sessions in this project.
5
- Injected by the SessionStart hook into every session.
6
- Update when: goals shift, architecture changes, or constraints change.
7
- Keep it short — this is injected into every session context.
8
- -->
9
-
10
- ## What We're Building
11
- <!-- 1-3 sentences: what this is and who it's for -->
12
-
13
- ## Current Phase
14
- <!-- MVP / feature-build / scaling / maintenance / migration -->
15
-
16
- ## Stack
17
- <!-- Framework | Database | Deployment | Package manager -->
18
-
19
- ## Architecture Notes
20
- <!-- 3-5 bullet points: non-obvious decisions that shape this codebase -->
21
- -
22
- -
23
- -
24
-
25
- ## Active Constraints
26
- <!-- Rules Claude must follow for this project -->
27
- -
28
-
29
- ## What We're NOT Building
30
- <!-- Explicit out-of-scope to prevent scope creep -->
31
- -