conductor-harness 1.1.1 → 1.2.0
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 +13 -23
- package/package.json +10 -3
- package/runtime/.claude/CLAUDE.md.template +18 -20
- package/runtime/.claude/commands/done.md +1 -1
- package/runtime/.claude/commands/start.md +1 -1
- package/runtime/.claude/commands/status.md +1 -1
- package/runtime/.claude/hooks/session-start.sh +9 -17
- package/runtime/.claude/skills/memory/SKILL.md +66 -20
- package/runtime/.claude/skills/review/SKILL.md +1 -1
- package/runtime/install.sh +21 -22
- package/runtime/.claude/agents/memory-writer.md +0 -19
- package/runtime/.claude/commands/setup.md +0 -25
- package/runtime/WORKFLOW.md.template +0 -31
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
|
|
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
|
-
- **
|
|
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.
|
|
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
|
|
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.
|
|
4
|
-
"description": "Claude Code harness for Conductor projects — hooks, memory, Linear
|
|
3
|
+
"version": "1.2.0",
|
|
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": [
|
|
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**:
|
|
16
|
+
**Subagents**: Use subagents liberally to keep main context clean. Offload research, exploration, and parallel analysis. One task per subagent.
|
|
12
17
|
|
|
13
|
-
**
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
|
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,
|
|
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
|
|
8
|
+
2. Write a memory following the memory skill. Include what was built, key decisions, gotchas discovered, and patterns worth reusing.
|
|
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.
|
|
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
|
|
11
|
+
5. Check MEMORY.md for any memory entries related to the current branch or task.
|
|
@@ -27,23 +27,19 @@ 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(
|
|
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()
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
|
40
|
+
else:
|
|
41
|
+
with open(progress_path, "w") as f:
|
|
42
|
+
f.write("# Harness Progress\n\nstatus: idle\n")
|
|
47
43
|
|
|
48
44
|
# Build context block
|
|
49
45
|
lines = ["## Harness: Session Context", ""]
|
|
@@ -59,11 +55,7 @@ if progress:
|
|
|
59
55
|
lines.append("")
|
|
60
56
|
lines.append("**Last session progress:**")
|
|
61
57
|
lines.append(progress)
|
|
62
|
-
if workflow:
|
|
63
|
-
lines.append("")
|
|
64
|
-
lines.append("**Project context (WORKFLOW.md):**")
|
|
65
|
-
lines.append(workflow)
|
|
66
58
|
lines.append("")
|
|
67
|
-
lines.append("**Action:**
|
|
59
|
+
lines.append("**Action:** MEMORY.md is loaded automatically. Scan it for entries relevant to this branch/task before responding.")
|
|
68
60
|
|
|
69
61
|
print(json.dumps({"promptText": "\n".join(lines)}))
|
|
@@ -1,33 +1,79 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: memory
|
|
3
|
-
description: "
|
|
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
|
|
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
|
-
##
|
|
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
|
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
|
|
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
|
+
## Memory file format
|
|
18
|
+
|
|
19
|
+
```markdown
|
|
20
|
+
---
|
|
21
|
+
name: descriptive name
|
|
22
|
+
description: one-line summary — used for relevance matching in future sessions
|
|
23
|
+
type: project
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
[Memory content here]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Types
|
|
30
|
+
|
|
31
|
+
| Type | Use for |
|
|
32
|
+
|------|---------|
|
|
33
|
+
| `project` | What was built, decisions made, gotchas discovered, patterns worth reusing |
|
|
34
|
+
| `feedback` | How the user wants Claude to work — corrections and confirmed approaches |
|
|
35
|
+
| `user` | User's role, expertise, preferences |
|
|
36
|
+
| `reference` | Pointers to external resources (Linear projects, dashboards, docs) |
|
|
21
37
|
|
|
22
38
|
## 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
39
|
|
|
27
|
-
|
|
28
|
-
|
|
40
|
+
- After `/done` — what was built, key decisions, gotchas, reusable patterns
|
|
41
|
+
- After discovering a non-obvious gotcha or edge case
|
|
42
|
+
- After architectural decisions with lasting implications
|
|
43
|
+
|
|
44
|
+
## When NOT to write memory
|
|
45
|
+
|
|
46
|
+
- Obvious facts or boilerplate decisions
|
|
47
|
+
- Things already in CLAUDE.md
|
|
48
|
+
- Ephemeral state (current git status, in-progress work)
|
|
49
|
+
- Information derivable from code or git history
|
|
50
|
+
|
|
51
|
+
## Episode structure (for project memories after /done)
|
|
52
|
+
|
|
53
|
+
```markdown
|
|
54
|
+
---
|
|
55
|
+
name: branch-or-feature-name
|
|
56
|
+
description: one-line summary of what was done
|
|
57
|
+
type: project
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## What was built
|
|
61
|
+
[Concrete: filenames, function names, components]
|
|
62
|
+
|
|
63
|
+
## Key decisions
|
|
64
|
+
- [Decision]: [why]
|
|
29
65
|
|
|
30
66
|
## Gotchas
|
|
31
|
-
-
|
|
32
|
-
|
|
33
|
-
|
|
67
|
+
- [Non-obvious discovery]
|
|
68
|
+
|
|
69
|
+
## Reusable patterns
|
|
70
|
+
- [Pattern]: [where in codebase]
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Optional: Hindsight cloud memory
|
|
74
|
+
|
|
75
|
+
If Hindsight MCP is configured (via `.mcp.json` and `HINDSIGHT_API_KEY`), you may also use:
|
|
76
|
+
- `recall(query)` — semantic search across cloud-stored memories
|
|
77
|
+
- `retain(content, tags)` — write to cloud memory
|
|
78
|
+
|
|
79
|
+
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
|
|
23
|
+
- [ ] Memory written (run /done if not done)
|
|
24
24
|
- [ ] No debug/temp files committed
|
|
25
25
|
|
|
26
26
|
## Git
|
package/runtime/install.sh
CHANGED
|
@@ -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.
|
|
60
|
-
|
|
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
|
|
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.
|
|
357
|
-
|
|
358
|
-
|
|
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
|
-
|
|
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.
|
|
407
|
-
echo "
|
|
408
|
-
|
|
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 "
|
|
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
|
-
-
|