johns-harness 2026.9.24 → 2026.9.25
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/CHANGELOG.md +6 -0
- package/README.md +6 -5
- package/docs/PATCHES.md +41 -1
- package/package.json +1 -1
- package/scripts/check-packed-artifact.mjs +37 -2
- package/skills/activity-logging/SKILL.md +96 -0
- package/skills/arch-viz/SKILL.md +94 -0
- package/skills/code-ops/SKILL.md +121 -0
- package/skills/cold-outreach/SKILL.md +99 -0
- package/skills/content-story/SKILL.md +77 -0
- package/skills/dashboard/SKILL.md +129 -0
- package/skills/gcp-logs/SKILL.md +83 -0
- package/skills/outlook/SKILL.md +139 -0
- package/skills/plan-archival/SKILL.md +84 -0
- package/skills/todos/SKILL.md +111 -0
- package/skills/web-research/SKILL.md +153 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.9.25
|
|
4
|
+
|
|
5
|
+
- Family 72: eleven generic skills from the author's workspace ship as bundled skills (`code-ops`, `web-research`, `plan-archival`, `todos`, `dashboard`, `arch-viz`, `content-story`, `cold-outreach`, `gcp-logs`, `activity-logging`, `outlook`), converted to fully generic wording first: no owner names, paths, repos, accounts, or products. They load by description match like every other bundled skill (none is always-on), workspace copies override them, and `enabled: false` and `allowBundled` still apply. `RULES.md` lists all of them.
|
|
6
|
+
- The Family 71 packed-artifact gate now also proves all eleven bundled generic skills are inside every tarball, and verifier checks 72.1 through 72.5 enforce presence, frontmatter, the generic wording contract, and no em dashes.
|
|
7
|
+
- Roll back with `npm i -g johns-harness@2026.9.24`.
|
|
8
|
+
|
|
3
9
|
## 2026.9.24
|
|
4
10
|
|
|
5
11
|
- Family 71: native-first Jiti plugin loading (Family 68) is now standard on `latest`. The `extended` dist-tag moves to this same version, so both lines converge at 2026.9.24. Node loads already-built JavaScript plugin code natively first and keeps Babel only for TypeScript plugin entries; `JITI_TRY_NATIVE` is no longer needed and is harmless if set.
|
package/README.md
CHANGED
|
@@ -85,8 +85,8 @@ node johnness.mjs --help
|
|
|
85
85
|
### Verify
|
|
86
86
|
|
|
87
87
|
```bash
|
|
88
|
-
npm test #
|
|
89
|
-
bash scripts/verify-patches.sh #
|
|
88
|
+
npm test # 914 tests against the installed dependency tree
|
|
89
|
+
bash scripts/verify-patches.sh # 458 checks across every patch family
|
|
90
90
|
```
|
|
91
91
|
|
|
92
92
|
## Launch a swarm with one command
|
|
@@ -132,7 +132,7 @@ Coding agents today run as isolated processes. Two agents on the same repository
|
|
|
132
132
|
- **Memory built for production.** Tiered recall that traces from consolidated reflections down to the verbatim record, surviving compaction and shared across the swarm. Installed and enabled by default.
|
|
133
133
|
- **Production authority per commit.** Promotion is granted to an exact SHA, never to a branch name, so one worker's authorization never covers another worker's commits.
|
|
134
134
|
- **An append-only action log.** Agents record every consequential action to `ACTION_LOG.md` and read it before acting.
|
|
135
|
-
- **A fixed runtime surface.** The core does not grow on a schedule. New mechanisms enter only to solve a demonstrated production failure, one narrow, tested, reversible patch at a time:
|
|
135
|
+
- **A fixed runtime surface.** The core does not grow on a schedule. New mechanisms enter only to solve a demonstrated production failure, one narrow, tested, reversible patch at a time: 72 patch families, each with a regression test and a rollback path.
|
|
136
136
|
- **Reliability with a definition.** Bounded retries, explicit failure states, exact-once continuation, context-pressure recovery, durable delivery, and supervised gateway recovery.
|
|
137
137
|
- **Coding first, phone optional.** Direct the work at a high level from a chat channel while agents plan, implement, test, coordinate, and stage releases unattended.
|
|
138
138
|
- **Local voice.** Optional native Whisper transcription of inbound audio, entirely on your machine. Off by default. [Setup](docs/NATIVE-WHISPER-MUSE.md).
|
|
@@ -199,7 +199,7 @@ The log is a [`RULES.md`](RULES.md) workspace convention enforced through the ac
|
|
|
199
199
|
|
|
200
200
|
## Patch families
|
|
201
201
|
|
|
202
|
-
The runtime carries
|
|
202
|
+
The runtime carries 72 patch families plus the 65.1 safe-update amendment. Each is a production fix applied at the source with a regression test, a durable patch marker, and a rollback path. A verifier runs 458 checks against the package tree and installed dependencies, and 914 tests run against the installed dependency tree.
|
|
203
203
|
|
|
204
204
|
Every family follows the same six steps: reproduce the failure, trace the exact runtime path, make the smallest source-level change that restores the invariant, add a regression test and a patch marker, run the verifier, and retain rollback artifacts. The full index: [`docs/PATCHES.md`](docs/PATCHES.md).
|
|
205
205
|
|
|
@@ -213,11 +213,12 @@ Every family follows the same six steps: reproduce the failure, trace the exact
|
|
|
213
213
|
| `--dev` | Dev profile under `~/.johnness-dev` with its own gateway port and shifted derived ports |
|
|
214
214
|
| Rules | [`RULES.md`](RULES.md) ships 19 operating-policy sections injected on every call. Fill in the placeholders; keep long procedures in skills. |
|
|
215
215
|
| Orchestrator skill | Bundled and loaded implicitly on every install. Decide whether to pass the user's words through or expand them, then keep the briefing brief. Override with a workspace `skills/orchestrator/SKILL.md`. |
|
|
216
|
+
| Bundled generic skills | Eleven generic skills ship in `skills/` and load by description match: `code-ops`, `web-research`, `plan-archival`, `todos`, `dashboard`, `arch-viz`, `content-story`, `cold-outreach`, `gcp-logs`, `activity-logging`, `outlook`. Workspace copies override; `enabled: false` and `allowBundled` still apply. |
|
|
216
217
|
|
|
217
218
|
## Documentation
|
|
218
219
|
|
|
219
220
|
- [`docs/index.md`](docs/index.md): runtime docs, from gateway and channels to plugins, nodes, and CLI reference.
|
|
220
|
-
- [`docs/PATCHES.md`](docs/PATCHES.md): the
|
|
221
|
+
- [`docs/PATCHES.md`](docs/PATCHES.md): the 72 patch families, one record each.
|
|
221
222
|
- [`docs/NATIVE-WHISPER-MUSE.md`](docs/NATIVE-WHISPER-MUSE.md): local Whisper transcription setup.
|
|
222
223
|
- [`RULES.md`](RULES.md): the default operating rules, including Rule Zero on production authorization.
|
|
223
224
|
|
package/docs/PATCHES.md
CHANGED
|
@@ -17,7 +17,7 @@ they predate ~2026-06-06).
|
|
|
17
17
|
|
|
18
18
|
## Index
|
|
19
19
|
|
|
20
|
-
Family 01 is retired. Families 02 through 41, 43 through
|
|
20
|
+
Family 01 is retired. Families 02 through 41, 43 through 72, including the 65.1 amendment, are live on `main`; the `latest` and `extended` release lines converged at 2026.9.24. Family 42 is omitted; native Codex OAuth ownership is Family 58.
|
|
21
21
|
|
|
22
22
|
1. **01, announce queue TTL, retired:** Removed the five-minute age filter that could discard delayed sub-agent completion announcements. [Details](#01--announce-ttl-retired-2026-07-30)
|
|
23
23
|
2. **02, failover rotation:** Returns model selection to the highest-priority profile after its cooldown ends. [Details](#02--failover-rotation-undocumented)
|
|
@@ -95,6 +95,10 @@ Family 01 is retired. Families 02 through 41, 43 through 67, 69 and 70, includin
|
|
|
95
95
|
|
|
96
96
|
70. **70, bundled orchestrator skill:** The delegation and briefing protocol ships as an always-eligible bundled skill; every install loads it implicitly and a workspace copy still overrides it. [Details](#family-70-bundled-orchestrator-skill)
|
|
97
97
|
|
|
98
|
+
71. **71, native-first Jiti standard on latest:** The Family 68 native-first loader option ships on every artifact, the `latest` and `extended` lines converge, and a packed-artifact gate proves the tarball carries it. [Details](#family-71-native-first-jiti-standard-on-latest)
|
|
99
|
+
|
|
100
|
+
72. **72, bundled generic skills:** Eleven workspace skills (code operations, research, todos, dashboard, planning, content, outreach, logs, and more) ship as generic bundled skills that load by description match, with no owner names or personal paths. [Details](#family-72-bundled-generic-skills)
|
|
101
|
+
|
|
98
102
|
---
|
|
99
103
|
|
|
100
104
|
## 01 - announce-ttl (RETIRED 2026-07-30)
|
|
@@ -2618,3 +2622,39 @@ Family 67 hash checks continue to compare the Family-67 surface with the Family
|
|
|
2618
2622
|
**Tests:** `tests/native-jiti-standard.test.mjs` proves the gate passes a complete tarball, fails a tarball packed without Family 68 (the 2026.9.22 and 2026.9.23 shape), fails when one copy lacks the option or is absent, fails on a version mismatch, exits non-zero from the CLI, and that the real `npm pack` output of this tree carries the marker in all ten copies. Verifier checks 71.1 through 71.3 cover the shipped gate, the packed or installed artifact, and the absence of a separate extended pin in `package.json`.
|
|
2619
2623
|
|
|
2620
2624
|
Roll back with `npm i -g johns-harness@2026.9.23` (no native-first Jiti) or `npm i -g johns-harness@2026.9.21-extended.1` (Family 68 without Families 69 and 70).
|
|
2625
|
+
|
|
2626
|
+
## Family 72: bundled generic skills
|
|
2627
|
+
|
|
2628
|
+
**Release:** `johns-harness@2026.9.25`. Published as `latest` and the `extended` dist-tag moves to it (the two lines converged at 2026.9.24).
|
|
2629
|
+
|
|
2630
|
+
Eleven skills from the author's personal workspace ship as bundled skills in `skills/<name>/SKILL.md`, made fully generic first: no owner names, no personal paths, repos, accounts, or products. Every one loads by description match like the other bundled skills (none is `always`-on, unlike the Family 70 orchestrator), a workspace or managed copy overrides it, `skills.entries.<name>.enabled: false` turns it off, and an `allowBundled` allowlist that omits it is respected.
|
|
2631
|
+
|
|
2632
|
+
Shipped skills: `code-ops` (learnings protocol, config tracing, publishing safety), `web-research` (never give up deep research method), `plan-archival` (move finished plans to plans/archive and memory/completed-plans), `todos` (workspace memory/todos protocol), `dashboard` (command center updated after every action), `arch-viz` (sub-agent generated architecture visualization), `content-story` (Story, Concept, Drop framework), `cold-outreach` (Four Pillars cold DM framework), `gcp-logs` (Cloud Run log debugging via gcloud, placeholder service names), `activity-logging` (log outcomes, not tasks, plus the ACTION_LOG), `outlook` (outlook tool quick reference).
|
|
2633
|
+
|
|
2634
|
+
Decision table:
|
|
2635
|
+
|
|
2636
|
+
| Skill | Decision | Reason |
|
|
2637
|
+
|---|---|---|
|
|
2638
|
+
| code-ops | ship, converted | generic protocol, anecdote generalized |
|
|
2639
|
+
| web-research | ship, converted | generic method, em dashes stripped |
|
|
2640
|
+
| plan-archival | ship, converted | personal paths replaced with workspace-relative |
|
|
2641
|
+
| todos | ship, converted | owner name and paths replaced |
|
|
2642
|
+
| dashboard | ship, converted | names, projects and paths scrubbed |
|
|
2643
|
+
| arch-viz | ship, converted | personal paths and projects scrubbed |
|
|
2644
|
+
| content-story | ship, converted | frontmatter added, em dashes stripped |
|
|
2645
|
+
| cold-outreach | ship, converted | frontmatter added, product names scrubbed |
|
|
2646
|
+
| gcp-logs | ship, converted | baked-in service names replaced with placeholders |
|
|
2647
|
+
| activity-logging | ship, converted | log names and paths made workspace-relative |
|
|
2648
|
+
| outlook | ship, converted | account domain scrubbed |
|
|
2649
|
+
| hq-ops | drop | personal repo and GitHub links |
|
|
2650
|
+
| brain-backup | drop | personal restic bucket and paths |
|
|
2651
|
+
| provider-stats | drop | personal auth profiles |
|
|
2652
|
+
| anthropic-sub-proxy | drop | specific deployed proxy setup |
|
|
2653
|
+
| reddit-posting | drop | product marketing workflow |
|
|
2654
|
+
| comms-identity, email-format, dri-reimbursement, johns-amex-login, insyte, willow, x-original-post, memoryrouter-listings, memoryrouter-seo | drop | owner-only skills |
|
|
2655
|
+
| hyperframes, hyperframes-cli, hyperframes-media, website-to-hyperframes, impeccable | exclude | third-party vendored skills |
|
|
2656
|
+
| orchestrator | already shipped | Family 70 |
|
|
2657
|
+
|
|
2658
|
+
Verifier checks 72.1 through 72.5 cover presence with frontmatter, the generic wording contract (no owner, product or personal names and no `always` flag), no em dashes, the RULES.md skill table, and the packed artifact (the Family 71 gate now also proves all eleven skills are inside the tarball). `tests/bundled-skills.test.mjs` proves every skills chunk loads all eleven from an empty workspace, a workspace copy overrides, `enabled: false` disables, and the `allowBundled` allowlist still wins. `RULES.md` section 5 lists every bundled skill.
|
|
2659
|
+
|
|
2660
|
+
Roll back with `npm i -g johns-harness@2026.9.24`.
|
package/package.json
CHANGED
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
// carries exactly one Family 68 marker and exactly one `tryNative: true`, the tarball version
|
|
11
11
|
// matches the tree version, and no copy is missing.
|
|
12
12
|
//
|
|
13
|
+
// Family 72: the bundled generic skills are also part of the artifact contract. Every one of
|
|
14
|
+
// the Family 72 skills must be present in the tarball with a `name` and a `description` in its
|
|
15
|
+
// frontmatter. The same inspection runs on installed trees.
|
|
16
|
+
//
|
|
13
17
|
// Usage:
|
|
14
18
|
// node scripts/check-packed-artifact.mjs [package root] pack the tree, then inspect
|
|
15
19
|
// node scripts/check-packed-artifact.mjs --tarball <file.tgz> inspect a tarball (for example
|
|
@@ -40,6 +44,36 @@ export const LOADERS10 = [
|
|
|
40
44
|
|
|
41
45
|
const count = (text, needle) => text.split(needle).length - 1;
|
|
42
46
|
|
|
47
|
+
// Family 72: the generic skills shipped as bundled skills. Each must be inside the artifact
|
|
48
|
+
// with valid frontmatter (a `name:` and a `description:` line).
|
|
49
|
+
export const F72_SKILLS = [
|
|
50
|
+
"activity-logging",
|
|
51
|
+
"arch-viz",
|
|
52
|
+
"code-ops",
|
|
53
|
+
"cold-outreach",
|
|
54
|
+
"content-story",
|
|
55
|
+
"dashboard",
|
|
56
|
+
"gcp-logs",
|
|
57
|
+
"outlook",
|
|
58
|
+
"plan-archival",
|
|
59
|
+
"todos",
|
|
60
|
+
"web-research",
|
|
61
|
+
];
|
|
62
|
+
|
|
63
|
+
/** Family 72: verify every bundled generic skill is present with frontmatter. Returns the count. */
|
|
64
|
+
export function inspectSkills72(pkgDir) {
|
|
65
|
+
const problems = [];
|
|
66
|
+
for (const name of F72_SKILLS) {
|
|
67
|
+
const file = path.join(pkgDir, "skills", name, "SKILL.md");
|
|
68
|
+
if (!fs.existsSync(file)) { problems.push(`${name}: skills/${name}/SKILL.md missing from artifact`); continue; }
|
|
69
|
+
const text = fs.readFileSync(file, "utf8");
|
|
70
|
+
if (!/^name: [a-z0-9-]+$/m.test(text)) problems.push(`${name}: frontmatter has no name line`);
|
|
71
|
+
if (!/^description: .+$/m.test(text)) problems.push(`${name}: frontmatter has no description line`);
|
|
72
|
+
}
|
|
73
|
+
if (problems.length) throw new Error(`Family 72: packed artifact is missing bundled generic skills:\n ${problems.join("\n ")}`);
|
|
74
|
+
return F72_SKILLS.length;
|
|
75
|
+
}
|
|
76
|
+
|
|
43
77
|
/** Inspect an extracted package directory (the `package/` folder of a tarball). Throws on any gap. */
|
|
44
78
|
export function inspectExtracted71(pkgDir, { expectVersion } = {}) {
|
|
45
79
|
const manifestPath = path.join(pkgDir, "package.json");
|
|
@@ -62,7 +96,8 @@ export function inspectExtracted71(pkgDir, { expectVersion } = {}) {
|
|
|
62
96
|
if (m === 1 && o === 1) markers += 1;
|
|
63
97
|
}
|
|
64
98
|
if (problems.length) throw new Error(`Family 71: packed artifact lacks native-first Jiti:\n ${problems.join("\n ")}`);
|
|
65
|
-
|
|
99
|
+
const skills = inspectSkills72(pkgDir);
|
|
100
|
+
return { version: manifest.version, loaders: LOADERS10.length, markers, skills };
|
|
66
101
|
}
|
|
67
102
|
|
|
68
103
|
/** Extract a tarball into a temp dir and inspect it. */
|
|
@@ -105,7 +140,7 @@ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.me
|
|
|
105
140
|
const root = path.resolve(positional[0] || path.join(path.dirname(fileURLToPath(import.meta.url)), ".."));
|
|
106
141
|
result = packAndInspect71(root);
|
|
107
142
|
}
|
|
108
|
-
console.log(`Family 71: ${result.markers}/${result.loaders} loader copies carry native-first Jiti in ${path.basename(result.tarball)} (version ${result.version})`);
|
|
143
|
+
console.log(`Family 71: ${result.markers}/${result.loaders} loader copies carry native-first Jiti in ${path.basename(result.tarball)} (version ${result.version}); Family 72: ${result.skills} bundled generic skills present`);
|
|
109
144
|
} catch (error) {
|
|
110
145
|
console.error(error.message);
|
|
111
146
|
process.exit(1);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: activity-logging
|
|
3
|
+
description: Activity and action logging to the workspace. Load when logging work outcomes or recording actions to ACTION_LOG.md.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Activity & Action Logging
|
|
7
|
+
|
|
8
|
+
## Activity Logging: Log Outcomes, Not Tasks
|
|
9
|
+
|
|
10
|
+
### What to Log
|
|
11
|
+
- Features built or meaningfully improved
|
|
12
|
+
- Process/rule changes with real impact
|
|
13
|
+
- Decisions that matter
|
|
14
|
+
- Problems encountered and how they were resolved (if interesting)
|
|
15
|
+
|
|
16
|
+
### What NOT to Log
|
|
17
|
+
- Fixing your own mistakes (type errors, build failures, typos)
|
|
18
|
+
- Minor tweaks or implementation details
|
|
19
|
+
- Each tiny step of a larger task: consolidate into one entry
|
|
20
|
+
- Routine maintenance
|
|
21
|
+
|
|
22
|
+
### How to Decide
|
|
23
|
+
Ask: *"Would the user care about this in a weekly review?"*
|
|
24
|
+
- If it's an **outcome** that delivered value, log it
|
|
25
|
+
- If it's **busywork** or cleanup, skip it
|
|
26
|
+
- If multiple items are related, **consolidate** into one entry
|
|
27
|
+
|
|
28
|
+
### Format
|
|
29
|
+
- **Bold the specific outcome**: then explain what/how/why
|
|
30
|
+
- Entry should make sense in 3 months without extra context
|
|
31
|
+
- Ask: *"What can the user or I do now that we couldn't before?"*
|
|
32
|
+
- Bad: "Improved chart system"
|
|
33
|
+
- Good: "Pie charts now show percentages on slices: added data labels, mobile scroll, theme colors"
|
|
34
|
+
|
|
35
|
+
### Process
|
|
36
|
+
1. Update today's log: `memory/logs/YYYY-MM-DD.md`
|
|
37
|
+
2. Mirror on the dashboard if one exists
|
|
38
|
+
3. Push to git:
|
|
39
|
+
```bash
|
|
40
|
+
cd <workspace>
|
|
41
|
+
git add -A && git commit -m "Update log" && git push
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Action Log (Real-Time Action Tracking)
|
|
47
|
+
|
|
48
|
+
**Log every action as it happens.**
|
|
49
|
+
|
|
50
|
+
### Location
|
|
51
|
+
`ACTION_LOG.md` in the workspace root
|
|
52
|
+
|
|
53
|
+
### What to Log
|
|
54
|
+
Every action you take: simple one-liner titles:
|
|
55
|
+
- Spawned sub-agent for X
|
|
56
|
+
- Generated image for Y
|
|
57
|
+
- Fixed Z in repo
|
|
58
|
+
- Created skill for W
|
|
59
|
+
- Sent message to user about V
|
|
60
|
+
|
|
61
|
+
### Format
|
|
62
|
+
```markdown
|
|
63
|
+
## YYYY-MM-DD
|
|
64
|
+
|
|
65
|
+
- Action 1
|
|
66
|
+
- Action 2
|
|
67
|
+
- Action 3
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Rules
|
|
71
|
+
1. **Log immediately**: after completing any action, add a one-liner
|
|
72
|
+
2. **Keep it simple**: title-level, not detailed
|
|
73
|
+
3. **New date section**: start each day with a new `## YYYY-MM-DD` header
|
|
74
|
+
4. **Don't overthink**: if you did something, log it
|
|
75
|
+
|
|
76
|
+
### Daily Recap (Scheduled Job)
|
|
77
|
+
A daily scheduled job can create `memory/YYYY-MM-DD.md` from:
|
|
78
|
+
1. **Conversation history**: the full journey of what was discussed, decided, built
|
|
79
|
+
2. **Action Log**: the action entries
|
|
80
|
+
|
|
81
|
+
Format:
|
|
82
|
+
```markdown
|
|
83
|
+
# YYYY-MM-DD: [Creative title capturing the day's vibe]
|
|
84
|
+
|
|
85
|
+
## The Story
|
|
86
|
+
[2-4 paragraph narrative, journal entry style, captures the day's energy]
|
|
87
|
+
|
|
88
|
+
## Key Accomplishments
|
|
89
|
+
- Major wins and shipped items
|
|
90
|
+
- Decisions made
|
|
91
|
+
|
|
92
|
+
## Actions Log
|
|
93
|
+
[Actions from ACTION_LOG.md]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
This captures the journey over time: both the story AND the specifics.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: arch-viz
|
|
3
|
+
description: Generate a detailed visual architecture image for any codebase. Spawns a sub-agent that analyzes the code, understands the flow, and creates a cyberpunk-style visualization showing data moving through the system.
|
|
4
|
+
metadata: { "johnness": { "emoji": "🎨" } }
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Architecture Visualizer
|
|
8
|
+
|
|
9
|
+
Spawns a sub-agent to analyze a codebase and generate a detailed visual architecture image.
|
|
10
|
+
|
|
11
|
+
## When to Use
|
|
12
|
+
|
|
13
|
+
- User says "visualize this codebase"
|
|
14
|
+
- User wants an architecture diagram that's creative/visual (not mermaid)
|
|
15
|
+
- User asks for a "picture of how this works"
|
|
16
|
+
- User wants to see "the flow" or "how data moves"
|
|
17
|
+
|
|
18
|
+
## How It Works
|
|
19
|
+
|
|
20
|
+
1. You spawn a sub-agent with the task below
|
|
21
|
+
2. Sub-agent analyzes the codebase (entry points, folder structure, docs)
|
|
22
|
+
3. Sub-agent identifies components and data flows
|
|
23
|
+
4. Sub-agent crafts a detailed image prompt
|
|
24
|
+
5. Sub-agent generates the image with an image-generation tool available in the environment
|
|
25
|
+
6. Sub-agent reports back with the image path
|
|
26
|
+
|
|
27
|
+
## Spawn Template
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
sessions_spawn(
|
|
31
|
+
task: "Analyze the codebase and create a detailed visual architecture image.
|
|
32
|
+
|
|
33
|
+
Working directory: [PATH]
|
|
34
|
+
|
|
35
|
+
Steps:
|
|
36
|
+
1. Read the codebase - entry points, folder structure, README, any architecture docs
|
|
37
|
+
2. Identify the core components:
|
|
38
|
+
- User-facing interfaces (mobile app, web, CLI, API consumers)
|
|
39
|
+
- Backend services/APIs (frameworks, routes, controllers)
|
|
40
|
+
- Databases and storage (what data, how structured)
|
|
41
|
+
- External services (AI providers, payments, auth, third-party APIs)
|
|
42
|
+
- Key data flows (what goes in, transforms, comes out)
|
|
43
|
+
|
|
44
|
+
3. Create a DETAILED image generation prompt following this style:
|
|
45
|
+
- Isometric 3D, dark background, neon cyberpunk aesthetic
|
|
46
|
+
- Show data MOVING through the system (binary streams, glowing packets, light pulses)
|
|
47
|
+
- Each component has INTERNAL DETAIL visible (like a cross-section of a living machine)
|
|
48
|
+
- Stage the flow left-to-right: Input → Processing → Output
|
|
49
|
+
- Visual elements to include:
|
|
50
|
+
* Binary 1s and 0s streaming between components
|
|
51
|
+
* API calls as light pulses traveling along pathways
|
|
52
|
+
* Database with visible rows/tables scrolling
|
|
53
|
+
* Storage with file thumbnails flowing in/out
|
|
54
|
+
* AI as neural network with synapses firing
|
|
55
|
+
* Auth as locks/keys/tokens
|
|
56
|
+
* Payments as cards/coins/tiers
|
|
57
|
+
- NO TEXT LABELS - everything visually self-explanatory
|
|
58
|
+
- Color palette: deep purples, electric blues, hot pinks, cyan accents
|
|
59
|
+
- Style keywords: 'hyper-detailed cyberpunk tech visualization'
|
|
60
|
+
|
|
61
|
+
4. Generate the image with an image-generation tool or skill available in your
|
|
62
|
+
environment, saving it as '[project-name]-architecture.png' at 2K resolution.
|
|
63
|
+
|
|
64
|
+
5. Report the image path so it can be sent to the user.
|
|
65
|
+
|
|
66
|
+
Be thorough in your analysis. The more you understand the codebase, the better the visualization.",
|
|
67
|
+
label: "arch-viz-[project-name]",
|
|
68
|
+
runTimeoutSeconds: 600
|
|
69
|
+
)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Example Usage
|
|
73
|
+
|
|
74
|
+
User: "Visualize the <project> codebase"
|
|
75
|
+
|
|
76
|
+
→ Spawn with the path of the codebase.
|
|
77
|
+
|
|
78
|
+
User: "Make an architecture image for <project>"
|
|
79
|
+
|
|
80
|
+
→ Spawn with the path of the codebase.
|
|
81
|
+
|
|
82
|
+
## Output
|
|
83
|
+
|
|
84
|
+
The sub-agent will generate an image and report the path. Send it to the user with:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
message(action: "send", media: "[image_path]", message: "Here's your architecture visualization")
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Tips
|
|
91
|
+
|
|
92
|
+
- For larger codebases, the analysis takes longer but produces better results
|
|
93
|
+
- The sub-agent may ask clarifying questions if the codebase structure is unclear
|
|
94
|
+
- Images are saved to the workspace by default
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-ops
|
|
3
|
+
description: "Code operations: learnings protocol, config tracing, publishing safety. Load BEFORE editing the agent runtime or any codebase, starting a coding project, or publishing anything."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Code Operations: Learnings, Config Tracing, Publishing
|
|
7
|
+
|
|
8
|
+
## Learnings Protocol: Read First, Write After
|
|
9
|
+
|
|
10
|
+
**Before starting ANY coding project, read `.learnings/` if it exists. After completing work, write learnings.**
|
|
11
|
+
|
|
12
|
+
### Before Starting
|
|
13
|
+
1. **Check** if `.learnings/` folder exists in the project root
|
|
14
|
+
2. **If it exists**, read ALL files in `.learnings/` before writing any code
|
|
15
|
+
3. **Internalize** the lessons. They are hard-won insights from past mistakes
|
|
16
|
+
|
|
17
|
+
### After Completing
|
|
18
|
+
When you discover something important or finish a project:
|
|
19
|
+
1. **Create** `.learnings/` folder if it doesn't exist
|
|
20
|
+
2. **Write** a learnings file: `.learnings/YYYY-MM-DD-brief-topic.md`
|
|
21
|
+
3. **Include:**
|
|
22
|
+
- What went wrong / what we learned
|
|
23
|
+
- Root cause
|
|
24
|
+
- The fix
|
|
25
|
+
- How to prevent it next time
|
|
26
|
+
|
|
27
|
+
### Format
|
|
28
|
+
```markdown
|
|
29
|
+
# [Topic]: Learnings from YYYY-MM-DD
|
|
30
|
+
|
|
31
|
+
## What Happened
|
|
32
|
+
[Brief description of the issue/discovery]
|
|
33
|
+
|
|
34
|
+
## Root Cause
|
|
35
|
+
[Why it happened]
|
|
36
|
+
|
|
37
|
+
## The Fix
|
|
38
|
+
[How we solved it]
|
|
39
|
+
|
|
40
|
+
## Prevention
|
|
41
|
+
[How to avoid this next time]
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Why
|
|
45
|
+
- Don't repeat the same mistakes
|
|
46
|
+
- Institutional memory lives in the codebase
|
|
47
|
+
- Future you (or other agents) will thank you
|
|
48
|
+
- Learnings compound over time
|
|
49
|
+
|
|
50
|
+
**Read learnings FIRST. Write learnings AFTER. Always.**
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Code Edits: Trace the Full Path
|
|
55
|
+
|
|
56
|
+
**When editing the agent runtime or any codebase, TRIPLE CHECK the config flow before committing.**
|
|
57
|
+
|
|
58
|
+
### The Rule
|
|
59
|
+
Before ANY code change that touches config, types, or exports:
|
|
60
|
+
1. **Trace the variable**: follow it through EVERY file it touches
|
|
61
|
+
2. **Check validation schemas**: does the schema need updating?
|
|
62
|
+
3. **Check type exports**: are all functions still exported that should be?
|
|
63
|
+
4. **Check config validation**: will the config loader accept this?
|
|
64
|
+
5. **Build and test**: the build must pass
|
|
65
|
+
6. **Test runtime**: start the gateway and verify it doesn't crash
|
|
66
|
+
|
|
67
|
+
### What This Prevents
|
|
68
|
+
- Orphaned exports (function removed but re-export left behind)
|
|
69
|
+
- Missing schema fields (config exists but validation rejects it)
|
|
70
|
+
- Type mismatches (compiles but runtime fails)
|
|
71
|
+
- Partial implementations (added feature but forgot plumbing)
|
|
72
|
+
|
|
73
|
+
### The Checklist (Run Before Every Commit)
|
|
74
|
+
```
|
|
75
|
+
□ Traced all new/changed variables through full code path
|
|
76
|
+
□ Updated schema if adding config fields
|
|
77
|
+
□ Removed orphaned exports if deleting functions
|
|
78
|
+
□ Build passes
|
|
79
|
+
□ Gateway starts without crash
|
|
80
|
+
□ Feature actually works (manual test)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Why This Matters
|
|
84
|
+
One real incident: a search integration was added without updating the validation schema, and an orphaned export was left behind. Result: the gateway crashed and the agent had to be revived. This is unacceptable. Code changes to your own infrastructure require extra care.
|
|
85
|
+
|
|
86
|
+
### Anti-Patterns (NEVER do these)
|
|
87
|
+
❌ Add config field but forget the schema
|
|
88
|
+
❌ Remove function but leave the export
|
|
89
|
+
❌ Commit without building
|
|
90
|
+
❌ Trust that "it should work" without testing
|
|
91
|
+
❌ Rush the commit to ship faster
|
|
92
|
+
|
|
93
|
+
**Every code edit: trace, validate, build, test. No shortcuts.**
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## Publishing Rules
|
|
98
|
+
|
|
99
|
+
**Before publishing ANYTHING, verify secrets are excluded.**
|
|
100
|
+
|
|
101
|
+
### The Rule
|
|
102
|
+
Before publishing to any registry, repo, or public location:
|
|
103
|
+
1. **Check ignore files**: confirm `.env`, secrets, and dev files are excluded
|
|
104
|
+
2. **Preview what's included**: dry-run or list files before publishing
|
|
105
|
+
3. **Look for red flags**: `.env`, config files with keys, anything sensitive
|
|
106
|
+
|
|
107
|
+
### Pre-Publish Checklist
|
|
108
|
+
```
|
|
109
|
+
□ Ignore files properly configured (.gitignore, .npmignore, .dockerignore, etc.)
|
|
110
|
+
□ Previewed/verified file list before publishing
|
|
111
|
+
□ No secrets in any included files
|
|
112
|
+
□ Version bumped appropriately
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### If Secrets Are Published
|
|
116
|
+
1. **Immediately** publish a clean version
|
|
117
|
+
2. **Deprecate/remove** the compromised version
|
|
118
|
+
3. **Rotate** any exposed credentials
|
|
119
|
+
4. **Notify** affected parties if applicable
|
|
120
|
+
|
|
121
|
+
**Every publish: verify what's included. No exceptions.**
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: cold-outreach
|
|
3
|
+
description: Write cold DMs that get responses using the Four Pillars framework. Use when drafting outreach messages, direct messages, or connection requests for the user.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Cold Outreach / DM Skill
|
|
7
|
+
|
|
8
|
+
Write cold DMs that get responses. Uses the Four Pillars framework.
|
|
9
|
+
|
|
10
|
+
## Required Reading
|
|
11
|
+
|
|
12
|
+
Before ANY outreach, read the full playbook if one exists:
|
|
13
|
+
- `memory/outreach-playbook.md` in the workspace
|
|
14
|
+
|
|
15
|
+
## The Four Pillars
|
|
16
|
+
|
|
17
|
+
Every message must hit all 4:
|
|
18
|
+
|
|
19
|
+
1. **PERSONAL**: their thesis/worldview (what they REALLY believe)
|
|
20
|
+
2. **RELEVANT**: their current mission (what they're building NOW)
|
|
21
|
+
3. **TIMELY**: recent content (what's top of mind TODAY)
|
|
22
|
+
4. **POWERFUL**: peer energy (you're a collaborator, not a fan)
|
|
23
|
+
|
|
24
|
+
## The DM Flow
|
|
25
|
+
|
|
26
|
+
| Step | What to Say | Goal |
|
|
27
|
+
|------|-------------|------|
|
|
28
|
+
| 1. Opener | React to THEIR thing + ask question | Start conversation |
|
|
29
|
+
| 2. Listen | Let them share their pain | Understand their words |
|
|
30
|
+
| 3. "Same" | "yeah same, I built something" | Create curiosity |
|
|
31
|
+
| 4. Wait | They ask "what is it?" | Make them pull |
|
|
32
|
+
| 5. Share | Now give them the product | Favor, not pitch |
|
|
33
|
+
|
|
34
|
+
## Opener Formula
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
"[reaction to specific content]. [establish same problem]. [ask what they did about it]"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Example:**
|
|
41
|
+
> "yo that piece on agents forgetting everything hit hard. been banging my head on the same problem. curious what you ended up doing about it"
|
|
42
|
+
|
|
43
|
+
## Anti-Patterns (NEVER)
|
|
44
|
+
|
|
45
|
+
- ❌ Product name in opener
|
|
46
|
+
- ❌ Install commands
|
|
47
|
+
- ❌ "Your audience would love..."
|
|
48
|
+
- ❌ Flattery ("love your content!")
|
|
49
|
+
- ❌ Fan energy ("would you check out...")
|
|
50
|
+
- ❌ Offering before they ask
|
|
51
|
+
|
|
52
|
+
## Good vs Bad
|
|
53
|
+
|
|
54
|
+
**Bad (ad energy):**
|
|
55
|
+
> "Hey [name] - been watching your agent coverage. I built [our product], a plugin that gives agents persistent memory. One-liner install. Think your audience would love it."
|
|
56
|
+
|
|
57
|
+
**Good (peer energy):**
|
|
58
|
+
> "yo that piece on agents forgetting everything hit hard. been banging my head on the same problem. curious what you ended up doing about it"
|
|
59
|
+
|
|
60
|
+
## Research Requirements
|
|
61
|
+
|
|
62
|
+
Before writing ANY outreach:
|
|
63
|
+
1. Watch 2-3 recent videos: find their THESIS
|
|
64
|
+
2. Read social presence: what identity are they building?
|
|
65
|
+
3. Find ONE specific thing to react to
|
|
66
|
+
4. Know what they'll likely respond (from research)
|
|
67
|
+
5. Plan your step 3 response
|
|
68
|
+
|
|
69
|
+
## Output Format
|
|
70
|
+
|
|
71
|
+
For each creator, produce:
|
|
72
|
+
|
|
73
|
+
```markdown
|
|
74
|
+
## [Creator Name]
|
|
75
|
+
|
|
76
|
+
### Research
|
|
77
|
+
- **Thesis:** [what they really believe]
|
|
78
|
+
- **Current mission:** [what they're building now]
|
|
79
|
+
- **Recent content:** [specific thing to reference]
|
|
80
|
+
- **Their solution:** [what they're currently doing about the problem]
|
|
81
|
+
|
|
82
|
+
### Opener
|
|
83
|
+
> [the DM]
|
|
84
|
+
|
|
85
|
+
### Expected Response
|
|
86
|
+
> [what they'll likely say]
|
|
87
|
+
|
|
88
|
+
### Step 3 Response
|
|
89
|
+
> [our "same, I built something" response]
|
|
90
|
+
|
|
91
|
+
### Step 5 Share
|
|
92
|
+
> [product share if they ask]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Key Insight
|
|
96
|
+
|
|
97
|
+
**Make them ask. Never offer first.**
|
|
98
|
+
|
|
99
|
+
The goal is to create curiosity so strong that THEY pull the product out of you. Then sharing feels like a favor, not a pitch.
|