@slamb2k/mad-skills 2.0.57 → 2.0.58
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/.claude-plugin/plugin.json +1 -1
- package/hooks/hooks.json +1 -1
- package/package.json +1 -1
- package/skills/build/SKILL.md +12 -11
- package/skills/{handover → ferry}/SKILL.md +43 -42
- package/skills/{handover/references/handover-template.md → ferry/references/cargo-template.md} +4 -4
- package/skills/{handover/scripts/handover.sh → ferry/scripts/ferry.sh} +16 -16
- package/skills/{handover → ferry}/tests/evals.json +9 -9
- package/skills/manifest.json +6 -6
package/hooks/hooks.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"matcher": "startup|clear|compact",
|
|
5
5
|
"hooks": [
|
|
6
6
|
{ "type": "command", "command": "_R=\"${CLAUDE_PLUGIN_ROOT}\"; [ -z \"$_R\" ] && _R=\"$HOME/.claude/plugins/marketplaces/slamb2k\"; node \"$_R/hooks/session-guard.cjs\" check", "timeout": 30 },
|
|
7
|
-
{ "type": "command", "command": "_R=\"${CLAUDE_PLUGIN_ROOT}\"; [ -z \"$_R\" ] && _R=\"$HOME/.claude/plugins/marketplaces/slamb2k\"; bash \"$_R/skills/
|
|
7
|
+
{ "type": "command", "command": "_R=\"${CLAUDE_PLUGIN_ROOT}\"; [ -z \"$_R\" ] && _R=\"$HOME/.claude/plugins/marketplaces/slamb2k\"; bash \"$_R/skills/ferry/scripts/ferry.sh\" load", "timeout": 10 }
|
|
8
8
|
]
|
|
9
9
|
}],
|
|
10
10
|
"UserPromptSubmit": [{
|
package/package.json
CHANGED
package/skills/build/SKILL.md
CHANGED
|
@@ -93,7 +93,7 @@ Before starting, check all dependencies in this table:
|
|
|
93
93
|
| feature-dev:code-architect | agent | — | no | fallback | Uses general-purpose agent |
|
|
94
94
|
| feature-dev:code-reviewer | agent | — | no | fallback | Uses general-purpose agent |
|
|
95
95
|
| superpowers | plugin | on-disk glob via scripts/lib/superpowers.js | no | fallback | Routes Stage 4 impl core to superpowers:executing-plans / subagent-driven-development when present; see references/superpowers-deferral.md |
|
|
96
|
-
|
|
|
96
|
+
| ferry | skill | `ls .claude/skills/ferry/SKILL.md ~/.claude/skills/ferry/SKILL.md ~/.claude/plugins/marketplaces/slamb2k/skills/ferry/SKILL.md 2>/dev/null` | no | fallback | Powers the "hand off to a clean session" execution mode; ships with mad-skills, so normally present |
|
|
97
97
|
|
|
98
98
|
For each row, in order:
|
|
99
99
|
1. Run the Check command (for cli/npm) or test file existence (for agent/skill)
|
|
@@ -208,19 +208,20 @@ So there is exactly one execution-mode decision, and subagents are always on
|
|
|
208
208
|
underneath either choice:
|
|
209
209
|
|
|
210
210
|
- **Run here now** — orchestrate the build in this session, stages in subagents.
|
|
211
|
-
- **Hand off to a clean session** —
|
|
212
|
-
let a fresh session run the *same* `/build` with its
|
|
211
|
+
- **Hand off to a clean session** — ferry the state across (write a cargo doc),
|
|
212
|
+
arm the resume signal, and let a fresh session run the *same* `/build` with its
|
|
213
|
+
own subagents.
|
|
213
214
|
|
|
214
215
|
These are mutually exclusive — one stops here, one continues here. Do **not**
|
|
215
|
-
offer a "clear? yes/no" toggle on top of run-now; the
|
|
216
|
+
offer a "clear? yes/no" toggle on top of run-now; the hand-off mode *replaces*
|
|
216
217
|
the run-now decision.
|
|
217
218
|
|
|
218
219
|
**Resolve the mode:**
|
|
219
220
|
|
|
220
221
|
1. If `--no-handoff` → run here now. Skip to Stage 1.
|
|
221
|
-
2. If `--handoff` → hand off (only if the
|
|
222
|
+
2. If `--handoff` → hand off (only if the `ferry` skill exists; else warn it's
|
|
222
223
|
unavailable and run here now).
|
|
223
|
-
3. If the
|
|
224
|
+
3. If the `ferry` skill is **not** installed (pre-flight) → run here now
|
|
224
225
|
silently. No question.
|
|
225
226
|
4. Otherwise, decide whether to *offer* the hand-off at all. Only offer it when a
|
|
226
227
|
clean start would actually help **and** the plan can survive the reset:
|
|
@@ -229,9 +230,9 @@ the run-now decision.
|
|
|
229
230
|
orchestrator would start bloated. A fresh `/build` invocation in an empty
|
|
230
231
|
session does not need this — just run here now.
|
|
231
232
|
- **Plan is self-contained** — PLAN is a spec file or a complete written plan
|
|
232
|
-
that a
|
|
233
|
-
*this* conversation (decisions made live, things looked at together),
|
|
234
|
-
|
|
233
|
+
that a cargo doc can capture losslessly. If the plan leans on nuance from
|
|
234
|
+
*this* conversation (decisions made live, things looked at together), the
|
|
235
|
+
cargo is lossy — prefer run-here-now so that context isn't thrown away.
|
|
235
236
|
|
|
236
237
|
If **both** hold, ask via `AskUserQuestion`:
|
|
237
238
|
```
|
|
@@ -245,11 +246,11 @@ the run-now decision.
|
|
|
245
246
|
If either condition fails, don't ask — run here now.
|
|
246
247
|
|
|
247
248
|
**If handing off:** capture the resolved PLAN and any Stage-2 clarifications
|
|
248
|
-
gathered so far, then invoke the `
|
|
249
|
+
gathered so far, then invoke the `ferry` skill. The cargo document's
|
|
249
250
|
"next steps" MUST be a single resume action: re-run this exact build in the
|
|
250
251
|
fresh session, e.g. `/build {original PLAN argument}` (plus any active flags,
|
|
251
252
|
minus `--handoff`). Include the resolved plan content and PROJECT_CONFIG so the
|
|
252
|
-
fresh session doesn't re-derive them. The
|
|
253
|
+
fresh session doesn't re-derive them. The `ferry` skill arms the one-shot
|
|
253
254
|
signal and tells the user to `/clear`. **Stop here** — do not run Stage 1; the
|
|
254
255
|
fresh session does.
|
|
255
256
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
3
|
-
description:
|
|
2
|
+
name: ferry
|
|
3
|
+
description: Ferry a session's live state across a context reset — persist a cargo document and signal the next fresh session to resume from it. Use when the user types /ferry, says they want to hand off, checkpoint, wrap up, clear context, or start fresh while preserving state, or asks to carry work into a new session with clean optimised context. Captures everything a brand-new session needs — task, status, next steps, key files, decisions, gotchas, git state — writes it to disk as cargo.md, arms a one-shot signal, and tells the user to /clear so the next session auto-loads it.
|
|
4
4
|
argument-hint: repo, tmp, commit (optional target; default repo)
|
|
5
5
|
allowed-tools: Bash, Read, Write
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
-
#
|
|
8
|
+
# Ferry - Clean-Context Session Handoff
|
|
9
9
|
|
|
10
10
|
When this skill is invoked, IMMEDIATELY output the banner below before doing anything else.
|
|
11
11
|
Pick ONE tagline at random — vary your choice each time.
|
|
@@ -14,45 +14,46 @@ CRITICAL: Reproduce the banner EXACTLY character-for-character, preserving all l
|
|
|
14
14
|
```
|
|
15
15
|
{tagline}
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
██║ ██║██║
|
|
22
|
-
╚═╝ ╚═╝╚═╝
|
|
17
|
+
███████╗███████╗██████╗ ██████╗ ██╗ ██╗
|
|
18
|
+
██╔════╝██╔════╝██╔══██╗██╔══██╗╚██╗ ██╔╝
|
|
19
|
+
█████╗ █████╗ ██████╔╝██████╔╝ ╚████╔╝
|
|
20
|
+
██╔══╝ ██╔══╝ ██╔══██╗██╔══██╗ ╚██╔╝
|
|
21
|
+
██║ ███████╗██║ ██║██║ ██║ ██║
|
|
22
|
+
╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
Taglines:
|
|
26
|
-
-
|
|
27
|
-
- 🧳
|
|
28
|
-
- 🤝 Passing the
|
|
29
|
-
- 📦
|
|
30
|
-
-
|
|
31
|
-
- 🛟 Nobody
|
|
32
|
-
- 🌅
|
|
26
|
+
- ⛴️ Loading the cargo for the crossing...
|
|
27
|
+
- 🧳 All aboard — carrying the context across!
|
|
28
|
+
- 🤝 Passing the manifest to a fresh crew!
|
|
29
|
+
- 📦 Cargo secured, casting off to a clean session!
|
|
30
|
+
- 🌊 Ferrying the thread over calm water!
|
|
31
|
+
- 🛟 Nobody's work goes overboard on my watch!
|
|
32
|
+
- 🌅 New session on the far shore, same voyage!
|
|
33
33
|
|
|
34
34
|
---
|
|
35
35
|
|
|
36
36
|
## What this does
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
signal, and hand the user off to
|
|
40
|
-
|
|
41
|
-
thread** — the next session starts
|
|
38
|
+
Ferry the live state of this session across a context reset: capture it into a
|
|
39
|
+
**cargo document** (`cargo.md`), arm a one-shot signal, and hand the user off to
|
|
40
|
+
a clean session that will automatically resume from the cargo. The point is to
|
|
41
|
+
**reset the context window without losing the thread** — the next session starts
|
|
42
|
+
lean but fully briefed.
|
|
42
43
|
|
|
43
44
|
Long sessions accumulate noise: dead ends, superseded plans, stale file reads. A
|
|
44
45
|
fresh session is faster and sharper, but naively starting over loses hard-won
|
|
45
|
-
context. `/
|
|
46
|
-
signals that session to pick it up — once. It will not re-read old
|
|
46
|
+
context. `/ferry` distills only what the *next* session needs, persists it, and
|
|
47
|
+
signals that session to pick it up — once. It will not re-read old cargo on
|
|
47
48
|
unrelated future sessions, because the signal is consumed on first read.
|
|
48
49
|
|
|
49
50
|
## Usage
|
|
50
51
|
|
|
51
52
|
```
|
|
52
|
-
/
|
|
53
|
-
/
|
|
54
|
-
/
|
|
55
|
-
/
|
|
53
|
+
/ferry # default: cargo.md in repo root, kept OUT of git
|
|
54
|
+
/ferry repo # same as default (explicit)
|
|
55
|
+
/ferry tmp # write under /tmp — never touches the repo at all
|
|
56
|
+
/ferry commit # write docs/ferry/cargo-<timestamp>.md, meant to be committed
|
|
56
57
|
```
|
|
57
58
|
|
|
58
59
|
Read the argument from what the user typed. If none given, use `repo`.
|
|
@@ -87,24 +88,24 @@ date +%Y-%m-%d-%H%M
|
|
|
87
88
|
|
|
88
89
|
Then pick the path based on the argument:
|
|
89
90
|
|
|
90
|
-
- **`repo`** (default): `<repo_root>/
|
|
91
|
+
- **`repo`** (default): `<repo_root>/cargo.md`. If not inside a git repo, use the
|
|
91
92
|
current working directory instead. After writing, keep it out of version control
|
|
92
|
-
by appending `
|
|
93
|
+
by appending `cargo.md` to `<repo_root>/.git/info/exclude` if it's a git repo
|
|
93
94
|
and not already listed there. This is a *local* ignore — it never modifies the
|
|
94
95
|
tracked `.gitignore`, so it won't show up in anyone else's checkout or your diffs.
|
|
95
|
-
- **`tmp`**: `/tmp/claude-
|
|
96
|
+
- **`tmp`**: `/tmp/claude-ferry/<key>/cargo.md` where `<key>` is
|
|
96
97
|
`printf '%s' "$(pwd)" | cksum | cut -d' ' -f1`. Create the directory first.
|
|
97
98
|
Nothing is written inside the repo.
|
|
98
|
-
- **`commit`**: `<repo_root>/docs/
|
|
99
|
-
`docs/
|
|
100
|
-
precisely so the
|
|
99
|
+
- **`commit`**: `<repo_root>/docs/ferry/cargo-<timestamp>.md`. Create the
|
|
100
|
+
`docs/ferry/` directory if needed. Do **not** ignore it — this variant exists
|
|
101
|
+
precisely so the cargo lands in git history as a durable checkpoint. Mention to
|
|
101
102
|
the user that they'll want to commit it.
|
|
102
103
|
|
|
103
|
-
### 2. Write the
|
|
104
|
+
### 2. Write the cargo document
|
|
104
105
|
|
|
105
106
|
This is the core of the skill — the document quality determines whether the next
|
|
106
107
|
session is productive or lost. Follow the structure in
|
|
107
|
-
`references/
|
|
108
|
+
`references/cargo-template.md`. Read that file now if you haven't.
|
|
108
109
|
|
|
109
110
|
Fill it from the **actual conversation and repo state**, not generic boilerplate.
|
|
110
111
|
Be concrete: real file paths, real function names, real commands, real decisions.
|
|
@@ -128,22 +129,22 @@ dead end is a genuine landmine worth a warning.
|
|
|
128
129
|
After the document is written, run (using the `PLUGIN_ROOT` resolved in pre-flight):
|
|
129
130
|
|
|
130
131
|
```bash
|
|
131
|
-
bash "$PLUGIN_ROOT/skills/
|
|
132
|
+
bash "$PLUGIN_ROOT/skills/ferry/scripts/ferry.sh" signal "<absolute_path_to_cargo>"
|
|
132
133
|
```
|
|
133
134
|
|
|
134
135
|
This drops a signal keyed to the current project directory. The next session's
|
|
135
136
|
`SessionStart` hook — shipped with this plugin in `hooks/hooks.json` — detects it,
|
|
136
|
-
injects the
|
|
137
|
+
injects the cargo as context, and deletes the signal so it fires exactly once.
|
|
137
138
|
Use the **absolute** path.
|
|
138
139
|
|
|
139
140
|
### 4. Hand off to a fresh session
|
|
140
141
|
|
|
141
|
-
Tell the user plainly that the
|
|
142
|
+
Tell the user plainly that the cargo is ready and they should start the fresh
|
|
142
143
|
session themselves. You **cannot** trigger `/clear` programmatically — it is a
|
|
143
144
|
user-only command — so the final step is theirs. Say something like:
|
|
144
145
|
|
|
145
|
-
>
|
|
146
|
-
> (or **`/new`**) now — the fresh session will automatically load this
|
|
146
|
+
> Cargo written to `<path>` and the next session is armed. Type **`/clear`**
|
|
147
|
+
> (or **`/new`**) now — the fresh session will automatically load this cargo and
|
|
147
148
|
> pick up where we left off. Nothing else gets auto-loaded; the signal is consumed
|
|
148
149
|
> on first read.
|
|
149
150
|
|
|
@@ -155,10 +156,10 @@ need to take.
|
|
|
155
156
|
- **`/clear` is the user's to type.** No skill, hook, or command can clear the
|
|
156
157
|
context window automatically. Always end by asking them to do it.
|
|
157
158
|
- **The signal is one-shot and project-scoped.** It's keyed to the working
|
|
158
|
-
directory and deleted on first read, so
|
|
159
|
-
sessions. A `
|
|
159
|
+
directory and deleted on first read, so cargo never leaks into unrelated
|
|
160
|
+
sessions. A `cargo.md` left sitting in a repo is inert unless re-armed.
|
|
160
161
|
- **Don't pollute git by default.** Only the `commit` variant is meant to be
|
|
161
162
|
tracked. `repo` mode relies on `.git/info/exclude`; `tmp` mode stays entirely
|
|
162
163
|
outside the repo.
|
|
163
|
-
- **If `/
|
|
164
|
+
- **If `/ferry` is run again later**, overwrite the existing document and
|
|
164
165
|
re-arm the signal — the latest state wins.
|
package/skills/{handover/references/handover-template.md → ferry/references/cargo-template.md}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Cargo document template
|
|
2
2
|
|
|
3
3
|
Fill every section that applies. Drop sections that genuinely don't (e.g. no open
|
|
4
4
|
questions). Lead with what unblocks action; a fresh session should be able to make
|
|
@@ -6,12 +6,12 @@ its **next move within the first minute** of reading this.
|
|
|
6
6
|
|
|
7
7
|
Write concretely. "Fix the bug in the parser" is useless; "`parseImportFile()` in
|
|
8
8
|
`src/import.js:42` throws on empty `days` — needs a guard before the `Object.entries`
|
|
9
|
-
loop" is
|
|
9
|
+
loop" is cargo worth carrying. Prefer absolute or repo-relative file paths with line numbers.
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
13
13
|
```markdown
|
|
14
|
-
#
|
|
14
|
+
# Cargo — <short task title>
|
|
15
15
|
|
|
16
16
|
**Date:** <YYYY-MM-DD HH:MM> · **Branch:** <git branch> · **Repo:** <path>
|
|
17
17
|
|
|
@@ -83,7 +83,7 @@ ticket numbers, people involved.
|
|
|
83
83
|
think it works but didn't check, say "assumed — not yet run". A fresh session has
|
|
84
84
|
no way to tell otherwise and false confidence is expensive.
|
|
85
85
|
- **Link, don't paste:** point to files and line ranges rather than dumping large
|
|
86
|
-
code blocks. The next session can read them on demand; bloating the
|
|
86
|
+
code blocks. The next session can read them on demand; bloating the cargo just
|
|
87
87
|
refills the context window you're trying to clear.
|
|
88
88
|
- **Keep it skimmable:** headers, short bullets, code spans for paths/commands. A
|
|
89
89
|
wall of prose defeats the purpose.
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
|
-
#
|
|
2
|
+
# ferry.sh — companion to the `ferry` skill.
|
|
3
3
|
#
|
|
4
|
-
#
|
|
4
|
+
# ferry.sh signal <abs_cargo_path> [cwd]
|
|
5
5
|
# Drop a one-shot signal keyed to the current project (cwd) pointing at
|
|
6
|
-
# the
|
|
6
|
+
# the cargo document. The next session's SessionStart hook consumes it.
|
|
7
7
|
#
|
|
8
|
-
#
|
|
8
|
+
# ferry.sh load
|
|
9
9
|
# SessionStart hook entrypoint. Reads the event JSON on stdin; if a signal
|
|
10
|
-
# exists for this cwd, emits the
|
|
11
|
-
# the signal (one-shot — a stale
|
|
10
|
+
# exists for this cwd, emits the cargo as additionalContext and deletes
|
|
11
|
+
# the signal (one-shot — a stale cargo.md is never re-injected).
|
|
12
12
|
#
|
|
13
13
|
# The signal is keyed on the working directory, NOT the session id, because the
|
|
14
14
|
# session id changes after /clear. cwd is stable across a clear, so the fresh
|
|
15
15
|
# session finds the signal its predecessor left.
|
|
16
16
|
set -euo pipefail
|
|
17
17
|
|
|
18
|
-
SIGNAL_DIR="/tmp/claude-
|
|
18
|
+
SIGNAL_DIR="/tmp/claude-ferry"
|
|
19
19
|
|
|
20
20
|
_key() {
|
|
21
21
|
# Stable, dependency-free hash of a directory path. cksum is POSIX.
|
|
@@ -26,12 +26,12 @@ cmd="${1:-load}"
|
|
|
26
26
|
|
|
27
27
|
case "$cmd" in
|
|
28
28
|
signal)
|
|
29
|
-
|
|
29
|
+
cargo_path="${2:?usage: ferry.sh signal <abs_cargo_path> [cwd]}"
|
|
30
30
|
cwd="${3:-$(pwd)}"
|
|
31
31
|
mkdir -p "$SIGNAL_DIR"
|
|
32
32
|
key="$(_key "$cwd")"
|
|
33
|
-
printf '%s\n' "$
|
|
34
|
-
printf '
|
|
33
|
+
printf '%s\n' "$cargo_path" > "$SIGNAL_DIR/$key.signal"
|
|
34
|
+
printf 'ferry: signal armed for %s -> %s\n' "$cwd" "$cargo_path"
|
|
35
35
|
;;
|
|
36
36
|
|
|
37
37
|
load)
|
|
@@ -46,14 +46,14 @@ case "$cmd" in
|
|
|
46
46
|
|
|
47
47
|
key="$(_key "$cwd")"
|
|
48
48
|
signal="$SIGNAL_DIR/$key.signal"
|
|
49
|
-
[ -f "$signal" ] || exit 0 # no
|
|
49
|
+
[ -f "$signal" ] || exit 0 # no cargo pending — silent no-op
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
cargo_path="$(head -n1 "$signal")"
|
|
52
52
|
rm -f "$signal" # one-shot: consume the signal
|
|
53
|
-
[ -f "$
|
|
53
|
+
[ -f "$cargo_path" ] || exit 0 # document vanished — nothing to inject
|
|
54
54
|
|
|
55
|
-
content="$(cat "$
|
|
56
|
-
preamble="The previous session left a
|
|
55
|
+
content="$(cat "$cargo_path")"
|
|
56
|
+
preamble="The previous session left a cargo document at ${cargo_path} and signalled that this session should resume from it. Treat it as your primary context for continuing the work. Read any files it references before acting. This is one-shot: do not seek out or re-read cargo documents in future sessions unless signalled again."
|
|
57
57
|
|
|
58
58
|
if command -v jq >/dev/null 2>&1; then
|
|
59
59
|
jq -n --arg pre "$preamble" --arg body "$content" \
|
|
@@ -65,7 +65,7 @@ case "$cmd" in
|
|
|
65
65
|
;;
|
|
66
66
|
|
|
67
67
|
*)
|
|
68
|
-
printf '
|
|
68
|
+
printf 'ferry.sh: unknown command "%s" (expected: signal | load)\n' "$cmd" >&2
|
|
69
69
|
exit 1
|
|
70
70
|
;;
|
|
71
71
|
esac
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"skill": "
|
|
2
|
+
"skill": "ferry",
|
|
3
3
|
"cases": [
|
|
4
4
|
{
|
|
5
5
|
"name": "explicit slash invocation",
|
|
6
|
-
"prompt": "/
|
|
7
|
-
"expect_skill": "
|
|
6
|
+
"prompt": "/ferry",
|
|
7
|
+
"expect_skill": "ferry",
|
|
8
8
|
"assertions": [
|
|
9
|
-
"Writes a
|
|
10
|
-
"Arms the one-shot signal via scripts/
|
|
9
|
+
"Writes a cargo document to cargo.md in the repo root by default",
|
|
10
|
+
"Arms the one-shot signal via scripts/ferry.sh signal with an absolute path",
|
|
11
11
|
"Tells the user to type /clear to start the fresh session themselves"
|
|
12
12
|
]
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
"name": "natural language wrap-up",
|
|
16
16
|
"prompt": "Let's wrap up and start fresh with a clean context window without losing where we are.",
|
|
17
|
-
"expect_skill": "
|
|
17
|
+
"expect_skill": "ferry",
|
|
18
18
|
"assertions": [
|
|
19
19
|
"Recognizes the intent to reset context while preserving state",
|
|
20
20
|
"Captures task, status, next steps, key files, decisions, and git state",
|
|
@@ -23,10 +23,10 @@
|
|
|
23
23
|
},
|
|
24
24
|
{
|
|
25
25
|
"name": "committed checkpoint variant",
|
|
26
|
-
"prompt": "/
|
|
27
|
-
"expect_skill": "
|
|
26
|
+
"prompt": "/ferry commit",
|
|
27
|
+
"expect_skill": "ferry",
|
|
28
28
|
"assertions": [
|
|
29
|
-
"Writes to docs/
|
|
29
|
+
"Writes to docs/ferry/cargo-<timestamp>.md instead of the ignored repo-root file",
|
|
30
30
|
"Does not add the file to .git/info/exclude",
|
|
31
31
|
"Notes the user will want to commit the checkpoint"
|
|
32
32
|
]
|
package/skills/manifest.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"generated": "2026-07-
|
|
2
|
+
"generated": "2026-07-07T09:55:45.144Z",
|
|
3
3
|
"count": 13,
|
|
4
4
|
"skills": [
|
|
5
5
|
{
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"name": "build",
|
|
17
17
|
"directory": "build",
|
|
18
18
|
"description": "Context-isolated feature development pipeline. Takes a detailed design/plan as argument and executes the full feature-dev lifecycle (explore, question, architect, implement, review, ship) inside subagents so the primary conversation stays compact. Use when you have a well-defined plan and want autonomous execution with minimal context window consumption.",
|
|
19
|
-
"lines":
|
|
19
|
+
"lines": 533,
|
|
20
20
|
"hasScripts": false,
|
|
21
21
|
"hasReferences": true,
|
|
22
22
|
"hasAssets": false,
|
|
@@ -43,10 +43,10 @@
|
|
|
43
43
|
"hasTests": true
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
|
-
"name": "
|
|
47
|
-
"directory": "
|
|
48
|
-
"description": "
|
|
49
|
-
"lines":
|
|
46
|
+
"name": "ferry",
|
|
47
|
+
"directory": "ferry",
|
|
48
|
+
"description": "Ferry a session's live state across a context reset — persist a cargo document and signal the next fresh session to resume from it. Use when the user types /ferry, says they want to hand off, checkpoint, wrap up, clear context, or start fresh while preserving state, or asks to carry work into a new session with clean optimised context. Captures everything a brand-new session needs — task, status, next steps, key files, decisions, gotchas, git state — writes it to disk as cargo.md, arms a one-shot signal, and tells the user to /clear so the next session auto-loads it.",
|
|
49
|
+
"lines": 166,
|
|
50
50
|
"hasScripts": true,
|
|
51
51
|
"hasReferences": true,
|
|
52
52
|
"hasAssets": false,
|