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 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 # 909 tests against the installed dependency tree
89
- bash scripts/verify-patches.sh # 443 checks across every patch family
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: 71 patch families, each with a regression test and a rollback path.
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 71 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 443 checks against the package tree and installed dependencies, and 909 tests run against the installed dependency tree.
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 71 patch families, one record each.
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 67, 69 and 70, including the 65.1 amendment, are live on `main`; Family 68 ships on the `extended` release line. Family 42 is omitted; native Codex OAuth ownership is Family 58.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "johns-harness",
3
- "version": "2026.9.24",
3
+ "version": "2026.9.25",
4
4
  "description": "John's Harness: a production agent harness that runs autonomous coding agents as one cooperative swarm.",
5
5
  "keywords": [
6
6
  "ai-agents",
@@ -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
- return { version: manifest.version, loaders: LOADERS10.length, markers };
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.