squadrant 0.28.1 → 0.29.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/dist/index.js +1590 -1278
- package/dist/index.js.map +1 -1
- package/dist/squadrantd.js +934 -807
- package/dist/squadrantd.js.map +1 -1
- package/package.json +1 -1
- package/plugin/skills/captain-ops/SKILL.md +9 -5
- package/plugin/skills/command-ops/SKILL.md +9 -7
- package/plugin/skills/daily-log/SKILL.md +4 -4
- package/plugin/skills/side-session/SKILL.md +1 -1
- package/plugin/skills/where-i-am/SKILL.md +3 -3
- package/scripts/read-handoff.sh +20 -5
- package/scripts/record-side-handoff.sh +5 -3
- package/scripts/spawn-workspace.sh +9 -5
- package/scripts/write-handoff.sh +6 -3
- package/templates/captain.claude.md +2 -2
- package/templates/captain.generic.md +1 -1
- package/templates/side.debug.claude.md +2 -2
- package/templates/side.research.claude.md +2 -2
- package/obsidian/spoke/meta/vault-changelog.md +0 -6
- package/obsidian/spoke/status.md +0 -19
- package/obsidian/spoke/templates/crew-session.md +0 -21
- package/obsidian/spoke/templates/daily-log.md +0 -16
- package/obsidian/spoke/wiki/index.md +0 -14
- package/obsidian/spoke/wiki/log.md +0 -10
- package/obsidian/spoke/wiki/pages/.gitkeep +0 -0
package/package.json
CHANGED
|
@@ -28,13 +28,13 @@ Execute the 4-step startup contract defined in your system prompt.
|
|
|
28
28
|
Check tasks from the same call — `liveRepo.liveCrews` lists every non-terminal crew task for this project. A `state: "blocked"` entry with a `question` is waiting on you right now.
|
|
29
29
|
|
|
30
30
|
4. **Read handoff:**
|
|
31
|
-
`~/.config/squadrant/scripts/read-handoff.sh "{
|
|
31
|
+
`~/.config/squadrant/scripts/read-handoff.sh "{project}"` (reads `~/squadrant/workspace/{project}/handoff.json`)
|
|
32
32
|
If a handoff exists, read the context carefully (`currentState`, `openBranches`, `nextSteps`, `blockedItems`, `decisions`).
|
|
33
33
|
If it reported `"exists": false`, reconstruct from the `handoff facts` output instead of cold-starting blind (check `checkpoint`, `gapSessions`, `claudeMem`). You do the synthesizing.
|
|
34
34
|
|
|
35
35
|
5. **Additional Context (opt-in):**
|
|
36
36
|
- Search **claude-mem** (`mem-search` skill) for your project name.
|
|
37
|
-
- Check
|
|
37
|
+
- Check `~/squadrant/workspace/{project}/artifacts/daily-logs/` for the most recent log.
|
|
38
38
|
- Check `{spokeVault}/learnings/` — selectively load relevant learnings.
|
|
39
39
|
- Check `{spokeVault}/skills/` and `{spokeVault}/wiki/`.
|
|
40
40
|
- Crew lifecycle events (done / blocked / idle) are delivered to your captain pane automatically by the squadrant daemon via daemon-direct cmux delivery (#332). No relay setup required.
|
|
@@ -300,8 +300,12 @@ On CREW REVIEW or CREW DONE:
|
|
|
300
300
|
| Good — matches the task, tests pass, no scope creep | **DEFAULT mode:** Surface diff summary to user and WAIT. Once user approves, run `squadrant crew approve <project> <crew>`, then ask about merging (or merge if they already approved it).<br><br>**DELEGATED mode:** Run `squadrant crew approve <project> <crew>`, then merge autonomously. |
|
|
301
301
|
| Needs changes | `squadrant crew send <project> <crew> "<feedback>"` — the crew iterates and re-signals. Loop until approved. |
|
|
302
302
|
|
|
303
|
-
3. **
|
|
304
|
-
|
|
303
|
+
3. **Grade the rules the crew was given** (only if the project subscribes to a knowledge base; #945). While the diff is open:
|
|
304
|
+
- `squadrant knowledge surfaced --task <task-id>` lists the rules delivered to that task (task id from `squadrant crew tasks <project>`).
|
|
305
|
+
- For each listed rule that **applies to this diff**, record what you saw: `squadrant knowledge feedback <rule-id> --followed|--violated --source review --task <task-id>` (`--wrong` if the rule itself is wrong).
|
|
306
|
+
- Skip the rules that don't apply. Don't guess: grade only what the diff shows. These grades are the high-confidence signal behind `complianceRate` and `violationRate` in the KB's REPORT.md.
|
|
307
|
+
4. **Never auto-terminalize** by emitting `task.done` directly — always go through `squadrant crew approve`.
|
|
308
|
+
5. Do **not** re-send the original task or close the crew while it's awaiting review — `crew close` on a `review`-state task discards work that hasn't been pushed anywhere yet.
|
|
305
309
|
|
|
306
310
|
## When Crew is Fully Finished (After Approval)
|
|
307
311
|
|
|
@@ -390,7 +394,7 @@ End-of-session writes are **opt-in**, not on a schedule. Only write what is mean
|
|
|
390
394
|
3. **Handoff (opt-in but recommended for in-flight work):** if work is mid-flight, write a handoff so tomorrow's session can resume:
|
|
391
395
|
|
|
392
396
|
```bash
|
|
393
|
-
~/.config/squadrant/scripts/write-handoff.sh "{
|
|
397
|
+
~/.config/squadrant/scripts/write-handoff.sh "{project}" '{
|
|
394
398
|
"currentState": "Brief description of where things stand",
|
|
395
399
|
"openBranches": ["feat/branch-name — what it contains"],
|
|
396
400
|
"nextSteps": ["First thing to do tomorrow", "Second thing"],
|
|
@@ -13,9 +13,9 @@ Run when session starts, or user says "morning", "catch up", "summary":
|
|
|
13
13
|
|
|
14
14
|
1. **Check handoffs from all projects** (context from yesterday's sessions):
|
|
15
15
|
```bash
|
|
16
|
-
for
|
|
17
|
-
echo "=== $
|
|
18
|
-
~/.config/squadrant/scripts/read-handoff.sh "$
|
|
16
|
+
for project in $(cat ~/.config/squadrant/config.json | python3 -c "import json,sys; [print(p) for p in json.loads(sys.stdin.read())['projects']]"); do
|
|
17
|
+
echo "=== $project ==="
|
|
18
|
+
~/.config/squadrant/scripts/read-handoff.sh "$project" --keep
|
|
19
19
|
done
|
|
20
20
|
```
|
|
21
21
|
Handoffs contain: currentState, openBranches, nextSteps, blockedItems, decisions. Use these to understand where each project left off.
|
|
@@ -24,9 +24,9 @@ Handoffs contain: currentState, openBranches, nextSteps, blockedItems, decisions
|
|
|
24
24
|
3. Read yesterday's logs:
|
|
25
25
|
```bash
|
|
26
26
|
YESTERDAY=$(date -v-1d +"%Y-%m-%d")
|
|
27
|
-
for
|
|
28
|
-
echo "=== $
|
|
29
|
-
cat "$
|
|
27
|
+
for project in $(cat ~/.config/squadrant/config.json | python3 -c "import json,sys; [print(p) for p in json.loads(sys.stdin.read())['projects']]"); do
|
|
28
|
+
echo "=== $project ==="
|
|
29
|
+
cat ~/squadrant/workspace/"$project"/artifacts/daily-logs/"${YESTERDAY}.md" 2>/dev/null || echo "(no log)"
|
|
30
30
|
done
|
|
31
31
|
```
|
|
32
32
|
4. Run quick standup for context: `squadrant standup --yesterday --raw`
|
|
@@ -49,7 +49,9 @@ squadrant runtime list
|
|
|
49
49
|
A name match is **not** sufficient — the workspace may be holding a session from a previous day. Check `sessions.json` against today before reusing:
|
|
50
50
|
```bash
|
|
51
51
|
TODAY=$(date +%Y-%m-%d)
|
|
52
|
-
|
|
52
|
+
S="${SQUADRANT_STATE_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/squadrant}/sessions.json"
|
|
53
|
+
[ -f "$S" ] || S="$HOME/.config/squadrant/sessions.json" # pre-#983 location
|
|
54
|
+
LAST=$(python3 -c "import json,sys; d=json.load(open(sys.argv[1])); print(d.get('workspaces',{}).get('{captainName}',{}).get('lastLaunched',''))" "$S" 2>/dev/null)
|
|
53
55
|
[ "$LAST" = "$TODAY" ] && echo "fresh" || echo "stale"
|
|
54
56
|
```
|
|
55
57
|
- `fresh` → reuse the existing workspace, proceed to step 5.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: daily-log
|
|
3
|
-
description: Write an end-of-day log to your
|
|
3
|
+
description: Write an end-of-day log to your project workspace. Use when session ends or user says "end of day" / "wrap up".
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Daily Log
|
|
@@ -11,11 +11,11 @@ Write a daily log before your session ends.
|
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
13
|
DATE=$(date +"%Y-%m-%d")
|
|
14
|
-
|
|
15
|
-
mkdir -p "$
|
|
14
|
+
LOG_DIR=~/squadrant/workspace/{project-name}/artifacts/daily-logs
|
|
15
|
+
mkdir -p "$LOG_DIR"
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
## Write to
|
|
18
|
+
## Write to `~/squadrant/workspace/{project-name}/artifacts/daily-logs/YYYY-MM-DD.md`
|
|
19
19
|
|
|
20
20
|
```markdown
|
|
21
21
|
---
|
|
@@ -61,7 +61,7 @@ If the topic already contains all of this, it confirms and proceeds. Otherwise i
|
|
|
61
61
|
1. Side session produces a result (root cause / artifact).
|
|
62
62
|
2. Session asks: "Notify the primary captain now? (y/n)"
|
|
63
63
|
3. On yes:
|
|
64
|
-
- Writes durable record:
|
|
64
|
+
- Writes durable record: ~/squadrant/workspace/<project>/side-handoffs/<topic>.md
|
|
65
65
|
- Sends: squadrant runtime send <project> "🗒 Side handoff [<role>] — <topic> ..."
|
|
66
66
|
4. Primary captain receives handoff delivered daemon-direct via cmux (#332).
|
|
67
67
|
5. Captain does NOT auto-spawn a crew — waits for user's go.
|
|
@@ -73,12 +73,12 @@ echo "$PROJECT_JSON"
|
|
|
73
73
|
|
|
74
74
|
If empty `{}`: not inside a known squadrant project — build the report from **session context + git only**, and skip steps 2–3 below.
|
|
75
75
|
|
|
76
|
-
Otherwise note `name`
|
|
76
|
+
Otherwise note `name` for the next steps.
|
|
77
77
|
|
|
78
78
|
**2. Read the handoff WITHOUT consuming it** (note the `--keep` — never drop the `--keep`, or you destroy the next session's startup context):
|
|
79
79
|
|
|
80
80
|
```bash
|
|
81
|
-
~/.config/squadrant/scripts/read-handoff.sh "<
|
|
81
|
+
~/.config/squadrant/scripts/read-handoff.sh "<name>" --keep
|
|
82
82
|
```
|
|
83
83
|
|
|
84
84
|
`{"exists": false}` means none — fine, skip it.
|
|
@@ -86,7 +86,7 @@ Otherwise note `name` and `spokeVault` for the next steps.
|
|
|
86
86
|
**3. Read the latest daily-log** (if any):
|
|
87
87
|
|
|
88
88
|
```bash
|
|
89
|
-
ls -t "<
|
|
89
|
+
ls -t ~/squadrant/workspace/"<name>"/artifacts/daily-logs/*.md 2>/dev/null | head -1
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
Read that one file for `Completed` / `In Progress` / `Blocked` / `Tomorrow`.
|
package/scripts/read-handoff.sh
CHANGED
|
@@ -1,14 +1,29 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Usage: read-handoff.sh <spoke-vault-path> [--keep]
|
|
3
|
-
# Reads and prints handoff.json, then archives it to
|
|
4
|
-
# (unless --keep). Captain calls this
|
|
5
|
-
# context.
|
|
2
|
+
# Usage: read-handoff.sh <project|workspace-path|spoke-vault-path> [--keep]
|
|
3
|
+
# Reads and prints workspace/<project>/handoff.json, then archives it to
|
|
4
|
+
# workspace/<project>/handoffs/<date>.json (unless --keep). Captain calls this
|
|
5
|
+
# on session startup to load previous context. Only the basename of the first
|
|
6
|
+
# arg is used (#983).
|
|
6
7
|
set -euo pipefail
|
|
7
8
|
|
|
8
|
-
|
|
9
|
+
TARGET="${1:?Usage: read-handoff.sh <project-or-vault-path> [--keep]}"
|
|
9
10
|
KEEP="${2:-}"
|
|
11
|
+
PROJECT="$(basename "$TARGET")"
|
|
12
|
+
VAULT="${SQUADRANT_WORKSPACE_DIR:-$HOME/squadrant/workspace}/$PROJECT"
|
|
10
13
|
HANDOFF_FILE="$VAULT/handoff.json"
|
|
11
14
|
|
|
15
|
+
# #983 dual-read (one version): a handoff written before the move still sits
|
|
16
|
+
# in the old spoke vault — the path passed in, or the default hub location.
|
|
17
|
+
if [ ! -f "$HANDOFF_FILE" ]; then
|
|
18
|
+
for LEGACY in "$TARGET" "$HOME/squadrant-hub/spokes/$PROJECT"; do
|
|
19
|
+
case "$LEGACY" in */*) ;; *) continue ;; esac
|
|
20
|
+
if [ -f "$LEGACY/handoff.json" ]; then
|
|
21
|
+
HANDOFF_FILE="$LEGACY/handoff.json"
|
|
22
|
+
break
|
|
23
|
+
fi
|
|
24
|
+
done
|
|
25
|
+
fi
|
|
26
|
+
|
|
12
27
|
if [ ! -f "$HANDOFF_FILE" ]; then
|
|
13
28
|
echo '{"exists": false}'
|
|
14
29
|
exit 0
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Usage: record-side-handoff.sh <spoke-vault-path> <topic> <role> <summary>
|
|
3
|
-
# Writes a durable handoff record to
|
|
2
|
+
# Usage: record-side-handoff.sh <project|workspace-path|spoke-vault-path> <topic> <role> <summary>
|
|
3
|
+
# Writes a durable handoff record to workspace/<project>/side-handoffs/<topic-slug>.md
|
|
4
|
+
# (#983: was {spokeVault}/side-handoffs/). Only the basename of the first arg is used.
|
|
4
5
|
set -euo pipefail
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
TARGET="${1:?Usage: record-side-handoff.sh <project-or-vault-path> <topic> <role> <summary>}"
|
|
8
|
+
VAULT="${SQUADRANT_WORKSPACE_DIR:-$HOME/squadrant/workspace}/$(basename "$TARGET")"
|
|
7
9
|
TOPIC="${2:?}"
|
|
8
10
|
ROLE="${3:?}"
|
|
9
11
|
SUMMARY="${4:?}"
|
|
@@ -6,7 +6,11 @@ set -euo pipefail
|
|
|
6
6
|
|
|
7
7
|
CMUX="/Applications/cmux.app/Contents/Resources/bin/cmux"
|
|
8
8
|
TEMPLATES_DIR="${HOME}/.config/squadrant/templates"
|
|
9
|
-
|
|
9
|
+
# #983 6a: sessions.json lives in XDG state (mirrors stateRoot()). Read the
|
|
10
|
+
# pre-move ~/.config file until the new one exists; writes go to the new path.
|
|
11
|
+
SESSIONS_FILE="${SQUADRANT_STATE_DIR:-${XDG_STATE_HOME:-$HOME/.local/state}/squadrant}/sessions.json"
|
|
12
|
+
SESSIONS_READ="$SESSIONS_FILE"
|
|
13
|
+
[ -f "$SESSIONS_READ" ] || SESSIONS_READ="${HOME}/.config/squadrant/sessions.json"
|
|
10
14
|
NAME="${1:?Usage: spawn-workspace.sh <name> <cwd> [role] [--fresh]}"
|
|
11
15
|
CWD="${2:?Usage: spawn-workspace.sh <name> <cwd> [role] [--fresh]}"
|
|
12
16
|
ROLE="${3:-captain}"
|
|
@@ -18,12 +22,12 @@ FRESH=false
|
|
|
18
22
|
# --- Session freshness check ---
|
|
19
23
|
if [ "$FORCE_FRESH" = "--fresh" ]; then
|
|
20
24
|
FRESH=true
|
|
21
|
-
elif [ -f "$
|
|
25
|
+
elif [ -f "$SESSIONS_READ" ]; then
|
|
22
26
|
# Check last launch date
|
|
23
27
|
LAST_DATE=$(python3 -c "
|
|
24
28
|
import json, sys
|
|
25
29
|
try:
|
|
26
|
-
data = json.load(open('$
|
|
30
|
+
data = json.load(open('$SESSIONS_READ'))
|
|
27
31
|
print(data.get('workspaces', {}).get('$NAME', {}).get('lastLaunched', ''))
|
|
28
32
|
except: print('')
|
|
29
33
|
" 2>/dev/null)
|
|
@@ -43,7 +47,7 @@ except: print('')
|
|
|
43
47
|
STORED_HASH=$(python3 -c "
|
|
44
48
|
import json
|
|
45
49
|
try:
|
|
46
|
-
data = json.load(open('$
|
|
50
|
+
data = json.load(open('$SESSIONS_READ'))
|
|
47
51
|
print(data.get('workspaces', {}).get('$NAME', {}).get('templateHash', ''))
|
|
48
52
|
except: print('')
|
|
49
53
|
" 2>/dev/null)
|
|
@@ -64,7 +68,7 @@ python3 -c "
|
|
|
64
68
|
import json, os
|
|
65
69
|
path = '$SESSIONS_FILE'
|
|
66
70
|
try:
|
|
67
|
-
data = json.load(open(
|
|
71
|
+
data = json.load(open('$SESSIONS_READ'))
|
|
68
72
|
except: data = {'workspaces': {}}
|
|
69
73
|
data.setdefault('workspaces', {})['$NAME'] = {'lastLaunched': '$TODAY', 'templateHash': '$CURRENT_HASH'}
|
|
70
74
|
os.makedirs(os.path.dirname(path), exist_ok=True)
|
package/scripts/write-handoff.sh
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Usage: write-handoff.sh <spoke-vault-path> <json-content>
|
|
3
|
-
# Writes
|
|
2
|
+
# Usage: write-handoff.sh <project|workspace-path|spoke-vault-path> <json-content>
|
|
3
|
+
# Writes workspace/<project>/handoff.json for session continuity (#983: was
|
|
4
|
+
# <spokeVault>/handoff.json). Only the basename of the first arg is used, so
|
|
5
|
+
# captains still passing their old spoke path keep working.
|
|
4
6
|
# Captain calls this at session end to preserve context for tomorrow.
|
|
5
7
|
set -euo pipefail
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
TARGET="${1:?Usage: write-handoff.sh <project-or-vault-path> <json-content>}"
|
|
8
10
|
CONTENT="${2:?Provide JSON content as second argument}"
|
|
11
|
+
VAULT="${SQUADRANT_WORKSPACE_DIR:-$HOME/squadrant/workspace}/$(basename "$TARGET")"
|
|
9
12
|
|
|
10
13
|
mkdir -p "$VAULT"
|
|
11
14
|
HANDOFF_FILE="$VAULT/handoff.json"
|
|
@@ -16,7 +16,7 @@ You are a **project captain** for Squadrant. You lead ONE project. You are a **c
|
|
|
16
16
|
1. **Fetch and gather facts:** `squadrant handoff facts {project} --fetch` (updates remote refs so branch state is verified, not stale).
|
|
17
17
|
2. **Check branchState flags:** Act on `upstreamStatus` (`behind`, `diverged`, `upstream-gone`) explicitly.
|
|
18
18
|
3. **Identify current state:** List live crews (`squadrant crew list`) and current task.
|
|
19
|
-
4. **Read handoff:** `~/.config/squadrant/scripts/read-handoff.sh {
|
|
19
|
+
4. **Read handoff:** `~/.config/squadrant/scripts/read-handoff.sh {project}` to load previous session context.
|
|
20
20
|
5. **Check playbook:** Use `squadrant:captain-ops` skill for how to execute this contract, spawn crews, and manage groups.
|
|
21
21
|
|
|
22
22
|
## Core Rules
|
|
@@ -40,7 +40,7 @@ You are a **project captain** for Squadrant. You lead ONE project. You are a **c
|
|
|
40
40
|
```
|
|
41
41
|
**Operator Takeover:** A crew under operator takeover is off-limits — no `send`, no `close`, and its lifecycle signals are not yours to act on. If you are at your crew limit, **ask the operator**; never pick a held crew to close. `--force` exists only for when the operator explicitly tells you to use it.
|
|
42
42
|
3. **Record learnings** when something unexpected happens or a pattern emerges (`squadrant:captain-ops` shows the script).
|
|
43
|
-
4. **Compact recovery** — if you feel disoriented after `/compact`, re-read your handoff (
|
|
43
|
+
4. **Compact recovery** — if you feel disoriented after `/compact`, re-read your handoff (`~/squadrant/workspace/{project}/handoffs/`) to restore work context. Role itself survives compact via `--append-system-prompt-file`.
|
|
44
44
|
|
|
45
45
|
## Available Skills
|
|
46
46
|
|
|
@@ -34,7 +34,7 @@ Use `squadrant crew spawn`. Never spawn workspaces directly with `cmux` or runti
|
|
|
34
34
|
1. **Fetch and gather facts:** `squadrant handoff facts {project} --fetch` (updates remote refs so branch state is verified, not stale).
|
|
35
35
|
2. **Check branchState flags:** Act on `upstreamStatus` (`behind`, `diverged`, `upstream-gone`) explicitly.
|
|
36
36
|
3. **Identify current state:** List live crews (`squadrant crew list`) and current task.
|
|
37
|
-
4. **Read handoff:** `~/.config/squadrant/scripts/read-handoff.sh {
|
|
37
|
+
4. **Read handoff:** `~/.config/squadrant/scripts/read-handoff.sh {project}` to load previous session context.
|
|
38
38
|
|
|
39
39
|
## Session Lifecycle
|
|
40
40
|
|
|
@@ -52,7 +52,7 @@ When you have a root cause (with or without a draft patch):
|
|
|
52
52
|
|
|
53
53
|
a. Write the durable vault record (replace placeholders with actual values from the "Side-session context" block in your first turn):
|
|
54
54
|
```bash
|
|
55
|
-
~/.config/squadrant/scripts/record-side-handoff.sh "<
|
|
55
|
+
~/.config/squadrant/scripts/record-side-handoff.sh "<workspace>" "<topic>" "debug" "<one-line root cause>"
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
b. Send the structured handoff to the primary captain via relay:
|
|
@@ -68,7 +68,7 @@ HANDOFF
|
|
|
68
68
|
|
|
69
69
|
3. **On no:** keep working; you can trigger the handoff whenever you're ready.
|
|
70
70
|
|
|
71
|
-
The `<project>`, `<
|
|
71
|
+
The `<project>`, `<workspace>`, and `<name>` (your scratch branch) are in the "Side-session context" block of your first turn. The draft patch (if any) lives on the scratch branch — reference it by name; do NOT merge it.
|
|
72
72
|
|
|
73
73
|
## Karpathy Discipline
|
|
74
74
|
|
|
@@ -37,7 +37,7 @@ When you have produced a result that deserves the primary captain's attention:
|
|
|
37
37
|
|
|
38
38
|
a. Write the durable vault record (replace placeholders with actual values from the "Side-session context" block in your first turn):
|
|
39
39
|
```bash
|
|
40
|
-
~/.config/squadrant/scripts/record-side-handoff.sh "<
|
|
40
|
+
~/.config/squadrant/scripts/record-side-handoff.sh "<workspace>" "<topic>" "research" "<one-line summary>"
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
b. Send the structured handoff to the primary captain via relay:
|
|
@@ -53,7 +53,7 @@ HANDOFF
|
|
|
53
53
|
|
|
54
54
|
3. **On no:** keep working; you can trigger the handoff whenever you're ready.
|
|
55
55
|
|
|
56
|
-
The `<project>` and `<
|
|
56
|
+
The `<project>` and `<workspace>` values are in the "Side-session context" block of your first turn.
|
|
57
57
|
|
|
58
58
|
## Karpathy Discipline
|
|
59
59
|
|
package/obsidian/spoke/status.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
project: unnamed
|
|
3
|
-
captain_session: inactive
|
|
4
|
-
last_updated:
|
|
5
|
-
active_crew: 0
|
|
6
|
-
tasks_total: 0
|
|
7
|
-
tasks_completed: 0
|
|
8
|
-
tasks_in_progress: 0
|
|
9
|
-
tasks_pending: 0
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# Captain Status
|
|
13
|
-
|
|
14
|
-
## Active Crew
|
|
15
|
-
|
|
16
|
-
| Crew | Task | Branch | Status |
|
|
17
|
-
|------|------|--------|--------|
|
|
18
|
-
|
|
19
|
-
## Recent Activity
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
crew: {{crew_name}}
|
|
3
|
-
task: {{task}}
|
|
4
|
-
branch: {{branch}}
|
|
5
|
-
worktree: .worktrees/{{task}}
|
|
6
|
-
started: {{date}}
|
|
7
|
-
status: in-progress
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# {{crew_name}} — Session Log
|
|
11
|
-
|
|
12
|
-
## Task
|
|
13
|
-
{{task}}
|
|
14
|
-
|
|
15
|
-
## Branch
|
|
16
|
-
{{branch}}
|
|
17
|
-
|
|
18
|
-
## Progress
|
|
19
|
-
-
|
|
20
|
-
|
|
21
|
-
## Notes
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
type: wiki-index
|
|
3
|
-
project: unnamed
|
|
4
|
-
last_updated:
|
|
5
|
-
page_count: 0
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Wiki Index
|
|
9
|
-
|
|
10
|
-
> Auto-maintained by wiki-ingest. Do not edit manually.
|
|
11
|
-
|
|
12
|
-
## By Category
|
|
13
|
-
|
|
14
|
-
<!-- Categories will be added automatically as pages are ingested -->
|
|
File without changes
|