johns-harness 2026.9.24 → 2026.9.26
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 +11 -0
- package/README.md +6 -5
- package/docs/PATCHES.md +52 -1
- package/package.json +1 -1
- package/scripts/check-packed-artifact.mjs +34 -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/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,16 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.9.26
|
|
4
|
+
|
|
5
|
+
- Family 73: the `content-story`, `dashboard` and `cold-outreach` skills are removed from the bundled set on request, leaving eight generic bundled skills (`code-ops`, `web-research`, `plan-archival`, `todos`, `arch-viz`, `gcp-logs`, `activity-logging`, `outlook`). They load by description match exactly as before, workspace copies override them, and `enabled: false` and `allowBundled` still apply. Nothing else changes from 2026.9.25.
|
|
6
|
+
- Roll back with `npm i -g johns-harness@2026.9.25`.
|
|
7
|
+
|
|
8
|
+
## 2026.9.25
|
|
9
|
+
|
|
10
|
+
- 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.
|
|
11
|
+
- 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.
|
|
12
|
+
- Roll back with `npm i -g johns-harness@2026.9.24`.
|
|
13
|
+
|
|
3
14
|
## 2026.9.24
|
|
4
15
|
|
|
5
16
|
- 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 # 455 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: 73 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 73 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 455 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 | Eight generic skills ship in `skills/` and load by description match: `code-ops`, `web-research`, `plan-archival`, `todos`, `arch-viz`, `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 73 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,11 @@ 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:** Eight workspace skills (code operations, research, todos, planning, 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
|
+
73. **73, prune bundled skills:** `content-story`, `dashboard` and `cold-outreach` are removed from the Family 72 bundled set on request after `2026.9.25`; the remaining eight ship unchanged. [Details](#family-73-prune-bundled-skills)
|
|
102
|
+
|
|
98
103
|
---
|
|
99
104
|
|
|
100
105
|
## 01 - announce-ttl (RETIRED 2026-07-30)
|
|
@@ -2618,3 +2623,49 @@ Family 67 hash checks continue to compare the Family-67 surface with the Family
|
|
|
2618
2623
|
**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
2624
|
|
|
2620
2625
|
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).
|
|
2626
|
+
|
|
2627
|
+
## Family 72: bundled generic skills
|
|
2628
|
+
|
|
2629
|
+
**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).
|
|
2630
|
+
|
|
2631
|
+
Eight 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. (Superseded by Family 73: from `2026.9.26` `dashboard`, `content-story` and `cold-outreach` are removed from the bundle.)
|
|
2632
|
+
|
|
2633
|
+
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), `arch-viz` (sub-agent generated architecture visualization), `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).
|
|
2634
|
+
|
|
2635
|
+
Decision table:
|
|
2636
|
+
|
|
2637
|
+
| Skill | Decision | Reason |
|
|
2638
|
+
|---|---|---|
|
|
2639
|
+
| code-ops | ship, converted | generic protocol, anecdote generalized |
|
|
2640
|
+
| web-research | ship, converted | generic method, em dashes stripped |
|
|
2641
|
+
| plan-archival | ship, converted | personal paths replaced with workspace-relative |
|
|
2642
|
+
| todos | ship, converted | owner name and paths replaced |
|
|
2643
|
+
| dashboard | dropped | removed on request after 2026.9.25 |
|
|
2644
|
+
| arch-viz | ship, converted | personal paths and projects scrubbed |
|
|
2645
|
+
| content-story | dropped | removed on request after 2026.9.25 |
|
|
2646
|
+
| cold-outreach | dropped | removed on request after 2026.9.25 |
|
|
2647
|
+
| gcp-logs | ship, converted | baked-in service names replaced with placeholders |
|
|
2648
|
+
| activity-logging | ship, converted | log names and paths made workspace-relative |
|
|
2649
|
+
| outlook | ship, converted | account domain scrubbed |
|
|
2650
|
+
| hq-ops | drop | personal repo and GitHub links |
|
|
2651
|
+
| brain-backup | drop | personal restic bucket and paths |
|
|
2652
|
+
| provider-stats | drop | personal auth profiles |
|
|
2653
|
+
| anthropic-sub-proxy | drop | specific deployed proxy setup |
|
|
2654
|
+
| reddit-posting | drop | product marketing workflow |
|
|
2655
|
+
| comms-identity, email-format, dri-reimbursement, johns-amex-login, insyte, willow, x-original-post, memoryrouter-listings, memoryrouter-seo | drop | owner-only skills |
|
|
2656
|
+
| hyperframes, hyperframes-cli, hyperframes-media, website-to-hyperframes, impeccable | exclude | third-party vendored skills |
|
|
2657
|
+
| orchestrator | already shipped | Family 70 |
|
|
2658
|
+
|
|
2659
|
+
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 eight skills are inside the tarball). `tests/bundled-skills.test.mjs` proves every skills chunk loads all eight 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.
|
|
2660
|
+
|
|
2661
|
+
Roll back with `npm i -g johns-harness@2026.9.24`.
|
|
2662
|
+
|
|
2663
|
+
## Family 73: prune bundled skills
|
|
2664
|
+
|
|
2665
|
+
**Release:** `johns-harness@2026.9.26`. Published as `latest` and the `extended` dist-tag moves to it.
|
|
2666
|
+
|
|
2667
|
+
Three of the Family 72 bundled skills are removed from the bundled set on request after `2026.9.25`: `content-story`, `dashboard` and `cold-outreach`. The remaining eight (`activity-logging`, `arch-viz`, `code-ops`, `gcp-logs`, `outlook`, `plan-archival`, `todos`, `web-research`) are unchanged, and a workspace or managed copy of a removed skill still overrides and loads as it always did. Nothing else differs from `2026.9.25`.
|
|
2668
|
+
|
|
2669
|
+
The counters move with the set: the verifier emits one check per remaining skill through the same 72.1 loop (455 checks in total), `tests/bundled-skills.test.mjs` asserts exactly eight bundled skills, `scripts/check-packed-artifact.mjs` fails closed unless a tarball carries all eight with frontmatter, and `README.md` and the pinned copy in `patches/59-migrate-cli.patch` carry the new counts together so check 59c stays green. `RULES.md` section 5 drops the three rows.
|
|
2670
|
+
|
|
2671
|
+
Roll back with `npm i -g johns-harness@2026.9.25`.
|
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,33 @@ 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
|
+
"gcp-logs",
|
|
54
|
+
"outlook",
|
|
55
|
+
"plan-archival",
|
|
56
|
+
"todos",
|
|
57
|
+
"web-research",
|
|
58
|
+
];
|
|
59
|
+
|
|
60
|
+
/** Family 72: verify every bundled generic skill is present with frontmatter. Returns the count. */
|
|
61
|
+
export function inspectSkills72(pkgDir) {
|
|
62
|
+
const problems = [];
|
|
63
|
+
for (const name of F72_SKILLS) {
|
|
64
|
+
const file = path.join(pkgDir, "skills", name, "SKILL.md");
|
|
65
|
+
if (!fs.existsSync(file)) { problems.push(`${name}: skills/${name}/SKILL.md missing from artifact`); continue; }
|
|
66
|
+
const text = fs.readFileSync(file, "utf8");
|
|
67
|
+
if (!/^name: [a-z0-9-]+$/m.test(text)) problems.push(`${name}: frontmatter has no name line`);
|
|
68
|
+
if (!/^description: .+$/m.test(text)) problems.push(`${name}: frontmatter has no description line`);
|
|
69
|
+
}
|
|
70
|
+
if (problems.length) throw new Error(`Family 72: packed artifact is missing bundled generic skills:\n ${problems.join("\n ")}`);
|
|
71
|
+
return F72_SKILLS.length;
|
|
72
|
+
}
|
|
73
|
+
|
|
43
74
|
/** Inspect an extracted package directory (the `package/` folder of a tarball). Throws on any gap. */
|
|
44
75
|
export function inspectExtracted71(pkgDir, { expectVersion } = {}) {
|
|
45
76
|
const manifestPath = path.join(pkgDir, "package.json");
|
|
@@ -62,7 +93,8 @@ export function inspectExtracted71(pkgDir, { expectVersion } = {}) {
|
|
|
62
93
|
if (m === 1 && o === 1) markers += 1;
|
|
63
94
|
}
|
|
64
95
|
if (problems.length) throw new Error(`Family 71: packed artifact lacks native-first Jiti:\n ${problems.join("\n ")}`);
|
|
65
|
-
|
|
96
|
+
const skills = inspectSkills72(pkgDir);
|
|
97
|
+
return { version: manifest.version, loaders: LOADERS10.length, markers, skills };
|
|
66
98
|
}
|
|
67
99
|
|
|
68
100
|
/** Extract a tarball into a temp dir and inspect it. */
|
|
@@ -105,7 +137,7 @@ if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.me
|
|
|
105
137
|
const root = path.resolve(positional[0] || path.join(path.dirname(fileURLToPath(import.meta.url)), ".."));
|
|
106
138
|
result = packAndInspect71(root);
|
|
107
139
|
}
|
|
108
|
-
console.log(`Family 71: ${result.markers}/${result.loaders} loader copies carry native-first Jiti in ${path.basename(result.tarball)} (version ${result.version})`);
|
|
140
|
+
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
141
|
} catch (error) {
|
|
110
142
|
console.error(error.message);
|
|
111
143
|
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,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gcp-logs
|
|
3
|
+
description: Check Google Cloud Run logs for errors, debug issues, and monitor services. Use when debugging Cloud Run deployments, checking for errors, or investigating issues.
|
|
4
|
+
metadata: { "johnness": { "emoji": "📋", "requires": { "bins": ["gcloud"] } } }
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# GCP Cloud Run Logs
|
|
8
|
+
|
|
9
|
+
Check Cloud Run service logs to debug issues, find errors, and monitor services.
|
|
10
|
+
|
|
11
|
+
## Service Names
|
|
12
|
+
|
|
13
|
+
Run `gcloud run services list` to see the user's service names, then substitute `SERVICE_NAME` in the commands below.
|
|
14
|
+
|
|
15
|
+
## Quick Commands
|
|
16
|
+
|
|
17
|
+
### Check Recent Errors (any service)
|
|
18
|
+
```bash
|
|
19
|
+
gcloud logging read "resource.type=cloud_run_revision AND severity>=ERROR" --limit=10 --format="table(timestamp,resource.labels.service_name,textPayload)"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
### Check Specific Service Errors
|
|
23
|
+
```bash
|
|
24
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME AND severity>=ERROR" --limit=10 --format="value(textPayload)"
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Check Errors in Last N Minutes
|
|
28
|
+
```bash
|
|
29
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME AND severity>=ERROR AND timestamp>=\"$(date -u -v-10M '+%Y-%m-%dT%H:%M:%SZ')\"" --limit=20 --format="value(textPayload)"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### All Logs for a Service (recent)
|
|
33
|
+
```bash
|
|
34
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME" --limit=50 --format="table(timestamp,severity,textPayload)"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Common Patterns
|
|
38
|
+
|
|
39
|
+
### Startup Failures
|
|
40
|
+
```bash
|
|
41
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME AND textPayload:\"STARTUP\"" --limit=5
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Database Connection Issues
|
|
45
|
+
```bash
|
|
46
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME AND (textPayload:\"sqlalchemy\" OR textPayload:\"database\" OR textPayload:\"connection\")" --limit=10
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Python Tracebacks
|
|
50
|
+
```bash
|
|
51
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME AND textPayload:\"Traceback\"" --limit=5 --format="value(textPayload)"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Output Formats
|
|
55
|
+
|
|
56
|
+
- `--format="table(timestamp,severity,textPayload)"`: clean table
|
|
57
|
+
- `--format="value(textPayload)"`: raw text only
|
|
58
|
+
- `--format="json"`: full JSON (verbose)
|
|
59
|
+
|
|
60
|
+
## Examples
|
|
61
|
+
|
|
62
|
+
### Check if staging is erroring
|
|
63
|
+
```bash
|
|
64
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME-staging AND severity>=ERROR" --limit=5 --format="value(textPayload)"
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Check prod for last hour errors
|
|
68
|
+
```bash
|
|
69
|
+
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=SERVICE_NAME AND severity>=ERROR AND timestamp>=\"$(date -u -v-1H '+%Y-%m-%dT%H:%M:%SZ')\"" --limit=20
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Get health check status
|
|
73
|
+
```bash
|
|
74
|
+
curl -s https://SERVICE_NAME-PROJECT_NUMBER.REGION.run.app/health
|
|
75
|
+
curl -s https://SERVICE_NAME-staging-PROJECT_NUMBER.REGION.run.app/health
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Service URLs
|
|
79
|
+
|
|
80
|
+
- **Production:** `https://SERVICE_NAME-PROJECT_NUMBER.REGION.run.app`
|
|
81
|
+
- **Staging:** `https://SERVICE_NAME-staging-PROJECT_NUMBER.REGION.run.app`
|
|
82
|
+
|
|
83
|
+
(Find the region and project number with `gcloud run services list` or `gcloud projects describe PROJECT_ID`.)
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: outlook
|
|
3
|
+
description: Use the outlook tool to read, send, reply to, forward, and organize Microsoft 365 email, including inbox rules and folders. Load when the user asks to handle Outlook or Microsoft 365 email.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Outlook Tool Skill
|
|
7
|
+
|
|
8
|
+
Use the `outlook` tool to interact with Microsoft 365 email for the user's account.
|
|
9
|
+
|
|
10
|
+
## Email Operations
|
|
11
|
+
|
|
12
|
+
### Search Emails
|
|
13
|
+
```
|
|
14
|
+
outlook(action="search", query="is:unread", max=10)
|
|
15
|
+
outlook(action="search", query="from:someone@example.com", max=20)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### Read Specific Email
|
|
19
|
+
```
|
|
20
|
+
outlook(action="read", messageId="<MESSAGE_ID>")
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Send New Email
|
|
24
|
+
```
|
|
25
|
+
outlook(
|
|
26
|
+
action="send",
|
|
27
|
+
to="recipient@example.com",
|
|
28
|
+
subject="Subject here",
|
|
29
|
+
body="Email body here"
|
|
30
|
+
)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
With CC/BCC:
|
|
34
|
+
```
|
|
35
|
+
outlook(
|
|
36
|
+
action="send",
|
|
37
|
+
to="to@example.com",
|
|
38
|
+
cc="cc@example.com",
|
|
39
|
+
bcc="bcc@example.com",
|
|
40
|
+
subject="Subject here",
|
|
41
|
+
body="Body here"
|
|
42
|
+
)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
For HTML body:
|
|
46
|
+
```
|
|
47
|
+
outlook(
|
|
48
|
+
action="send",
|
|
49
|
+
to="recipient@example.com",
|
|
50
|
+
subject="Subject",
|
|
51
|
+
bodyHtml="<p>Formatted content</p>"
|
|
52
|
+
)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Reply to Email
|
|
56
|
+
```
|
|
57
|
+
outlook(
|
|
58
|
+
action="reply",
|
|
59
|
+
messageId="<ORIGINAL_MSG_ID>",
|
|
60
|
+
body="Your reply text here"
|
|
61
|
+
)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Reply All
|
|
65
|
+
```
|
|
66
|
+
outlook(
|
|
67
|
+
action="reply_all",
|
|
68
|
+
messageId="<ORIGINAL_MSG_ID>",
|
|
69
|
+
body="Reply all text here"
|
|
70
|
+
)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Forward Email
|
|
74
|
+
```
|
|
75
|
+
outlook(
|
|
76
|
+
action="forward",
|
|
77
|
+
messageId="<ORIGINAL_MSG_ID>",
|
|
78
|
+
to="forward-to@example.com",
|
|
79
|
+
body="Forwarding note"
|
|
80
|
+
)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Mark Read/Unread
|
|
84
|
+
```
|
|
85
|
+
outlook(action="mark_read", messageId="<MSG_ID>")
|
|
86
|
+
outlook(action="mark_unread", messageId="<MSG_ID>")
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Flag/Unflag
|
|
90
|
+
```
|
|
91
|
+
outlook(action="flag", messageId="<MSG_ID>")
|
|
92
|
+
outlook(action="unflag", messageId="<MSG_ID>")
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Delete/Move
|
|
96
|
+
```
|
|
97
|
+
outlook(action="delete", messageId="<MSG_ID>")
|
|
98
|
+
outlook(action="move", messageId="<MSG_ID>", destinationFolderId="<FOLDER_ID>")
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### List Folders
|
|
102
|
+
```
|
|
103
|
+
outlook(action="folders_list")
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Inbox Rules
|
|
107
|
+
|
|
108
|
+
### Create Rule
|
|
109
|
+
```
|
|
110
|
+
outlook(
|
|
111
|
+
action="rule_create",
|
|
112
|
+
ruleName="Auto-archive newsletters",
|
|
113
|
+
ruleSenderContains=["newsletter@", "updates@"],
|
|
114
|
+
ruleMarkAsRead=true,
|
|
115
|
+
ruleMoveToFolder="<ARCHIVE_FOLDER_ID>"
|
|
116
|
+
)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### List/Delete Rules
|
|
120
|
+
```
|
|
121
|
+
outlook(action="rules_list")
|
|
122
|
+
outlook(action="rule_delete", ruleId="<RULE_ID>")
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Quick Reference
|
|
126
|
+
|
|
127
|
+
| Action | Tool Call |
|
|
128
|
+
|--------|-----------|
|
|
129
|
+
| Search emails | `outlook(action="search", query="...", max=10)` |
|
|
130
|
+
| Read email | `outlook(action="read", messageId="...")` |
|
|
131
|
+
| Send email | `outlook(action="send", to="...", subject="...", body="...")` |
|
|
132
|
+
| Reply | `outlook(action="reply", messageId="...", body="...")` |
|
|
133
|
+
| Reply all | `outlook(action="reply_all", messageId="...", body="...")` |
|
|
134
|
+
| Forward | `outlook(action="forward", messageId="...", to="...", body="...")` |
|
|
135
|
+
| Mark read | `outlook(action="mark_read", messageId="...")` |
|
|
136
|
+
| Flag | `outlook(action="flag", messageId="...")` |
|
|
137
|
+
| Delete | `outlook(action="delete", messageId="...")` |
|
|
138
|
+
| List folders | `outlook(action="folders_list")` |
|
|
139
|
+
| List rules | `outlook(action="rules_list")` |
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan-archival
|
|
3
|
+
description: Archive completed plans. Load when a plan is finished or a sub-agent completes plan work.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Plan Archival
|
|
7
|
+
|
|
8
|
+
## When a Plan is Completed: Archive It
|
|
9
|
+
|
|
10
|
+
### Workflow
|
|
11
|
+
1. **Execute the plan**: do the work outlined in the plan document
|
|
12
|
+
2. **Move to archive**: `plans/` to `plans/archive/` in the workspace
|
|
13
|
+
3. **Add completion metadata**: date completed, outcome summary at top of file
|
|
14
|
+
4. **Link in logs**: when logging the completion, link to the archived plan
|
|
15
|
+
|
|
16
|
+
### Plan Location
|
|
17
|
+
`plans/` (in the workspace root)
|
|
18
|
+
|
|
19
|
+
### Archive Location
|
|
20
|
+
`plans/archive/`
|
|
21
|
+
|
|
22
|
+
### Completion Metadata (add to top of archived plan)
|
|
23
|
+
```markdown
|
|
24
|
+
> **Status:** ✅ Completed
|
|
25
|
+
> **Completed:** YYYY-MM-DD
|
|
26
|
+
> **Outcome:** [1-2 sentence summary of what was achieved]
|
|
27
|
+
> **Log Entry:** [Link to the log entry that recorded completion]
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
[Original plan content below]
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Why This Matters
|
|
34
|
+
- Todos and logs stay clean (single title line)
|
|
35
|
+
- Full context preserved for posterity
|
|
36
|
+
- Can dive into any past decision/implementation
|
|
37
|
+
- Creates institutional memory
|
|
38
|
+
|
|
39
|
+
### Process
|
|
40
|
+
```bash
|
|
41
|
+
cd <workspace>
|
|
42
|
+
mv plans/PLAN_NAME.md plans/archive/PLAN_NAME.md
|
|
43
|
+
# Edit to add completion metadata
|
|
44
|
+
git add -A && git commit -m "Archive completed plan: PLAN_NAME" && git push
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Completed Plans to Memory
|
|
50
|
+
|
|
51
|
+
**When a plan is completed, also move it to `memory/completed-plans/`.**
|
|
52
|
+
|
|
53
|
+
### When to Move
|
|
54
|
+
- Sub-agent completes work on a plan
|
|
55
|
+
- All phases of a plan are done
|
|
56
|
+
- You review sub-agent work and confirm completion
|
|
57
|
+
|
|
58
|
+
### Process
|
|
59
|
+
1. **Review** the sub-agent's work on the plan
|
|
60
|
+
2. **Confirm** all objectives are met
|
|
61
|
+
3. **Move** the plan file:
|
|
62
|
+
```bash
|
|
63
|
+
mv memory/plans/PLAN_NAME.md memory/completed-plans/PLAN_NAME.md
|
|
64
|
+
# OR
|
|
65
|
+
mv plans/PLAN_NAME.md memory/completed-plans/PLAN_NAME.md
|
|
66
|
+
```
|
|
67
|
+
4. **Add completion note** at top of file:
|
|
68
|
+
```markdown
|
|
69
|
+
> **Status:** ✅ Completed
|
|
70
|
+
> **Completed:** YYYY-MM-DD
|
|
71
|
+
> **Outcome:** [Brief summary of what was achieved]
|
|
72
|
+
```
|
|
73
|
+
5. **Commit + push**
|
|
74
|
+
|
|
75
|
+
### Locations
|
|
76
|
+
- **Active plans:** `plans/` or `memory/plans/`
|
|
77
|
+
- **Completed plans:** `memory/completed-plans/`
|
|
78
|
+
|
|
79
|
+
### Why
|
|
80
|
+
- Keeps active plans clean and focused
|
|
81
|
+
- Preserves history of completed work
|
|
82
|
+
- Easy to find what's been done vs what's pending
|
|
83
|
+
|
|
84
|
+
**Every time you review a sub-agent's completed work on a plan, move it to completed-plans.**
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: todos
|
|
3
|
+
description: Manage the user's todos in memory/todos. Use when the user mentions tasks, todos, things to do, projects, or anything that sounds like "we need to do X". Also use for organizing, updating, or reviewing todos.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Todo Management Skill
|
|
7
|
+
|
|
8
|
+
Todos live in `memory/todos/` in the workspace.
|
|
9
|
+
|
|
10
|
+
## Structure
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
memory/todos/
|
|
14
|
+
├── README.md # Main dashboard with TODAY section at top
|
|
15
|
+
├── TODAY.md # Copy of today's daily todos (refreshed daily)
|
|
16
|
+
├── projects/ # Project folders
|
|
17
|
+
│ ├── project-name/
|
|
18
|
+
│ │ ├── README.md # Project todos + context (Unassigned → In Progress → Done)
|
|
19
|
+
│ │ ├── DONE.md # Completed todos for this project
|
|
20
|
+
│ │ └── *.md # Additional context/reference files
|
|
21
|
+
│ └── ...
|
|
22
|
+
└── archive/ # Stale projects (no activity >30 days)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Todo Format
|
|
26
|
+
|
|
27
|
+
Use checkboxes for all todos. Todos can have sub-todos:
|
|
28
|
+
|
|
29
|
+
```markdown
|
|
30
|
+
- [ ] Main task
|
|
31
|
+
- [ ] Subtask 1
|
|
32
|
+
- [ ] Subtask 2
|
|
33
|
+
- [ ] Sub-subtask
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Project README Structure
|
|
37
|
+
|
|
38
|
+
Each project folder has a README.md:
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
# Project Name
|
|
42
|
+
|
|
43
|
+
**Last Active:** YYYY-MM-DD
|
|
44
|
+
|
|
45
|
+
## Context
|
|
46
|
+
Brief description of the project.
|
|
47
|
+
|
|
48
|
+
## Unassigned
|
|
49
|
+
- [ ] Task not yet started
|
|
50
|
+
|
|
51
|
+
## In Progress
|
|
52
|
+
- [ ] Task being worked on
|
|
53
|
+
|
|
54
|
+
## Done
|
|
55
|
+
- [x] Completed task (move to DONE.md when section gets long)
|
|
56
|
+
|
|
57
|
+
## References
|
|
58
|
+
- [Related doc](./related.md)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Main README (todos/README.md)
|
|
62
|
+
|
|
63
|
+
```markdown
|
|
64
|
+
# Todos Dashboard
|
|
65
|
+
|
|
66
|
+
**Last Updated:** YYYY-MM-DD
|
|
67
|
+
|
|
68
|
+
## 📅 Today
|
|
69
|
+
<!-- Copy from TODAY.md each morning -->
|
|
70
|
+
- [ ] Daily task 1
|
|
71
|
+
- [ ] Daily task 2
|
|
72
|
+
|
|
73
|
+
## 🔥 Active Projects
|
|
74
|
+
- [Project Name](./projects/project-name/) - brief status
|
|
75
|
+
|
|
76
|
+
## 📦 Archive
|
|
77
|
+
- [Old Project](./archive/old-project/) - archived YYYY-MM-DD
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Rules
|
|
81
|
+
|
|
82
|
+
1. **Capture everything**: if the user says "we need to do X" or anything todo-like, add it
|
|
83
|
+
2. **Update dates**: every edit, update "Last Active" or "Last Updated"
|
|
84
|
+
3. **Archive stale projects**: no activity in 30+ days, move to archive/
|
|
85
|
+
4. **Group by project**: new topics become new project folders
|
|
86
|
+
5. **Daily refresh**: a daily scheduled job reviews recent conversations and updates todos
|
|
87
|
+
6. **Push changes**: after updating, commit and push to git:
|
|
88
|
+
```bash
|
|
89
|
+
cd <workspace>
|
|
90
|
+
git add -A && git commit -m "Update todos" && git push
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Workflow
|
|
94
|
+
|
|
95
|
+
### Adding a todo
|
|
96
|
+
1. Identify the project (create folder if new)
|
|
97
|
+
2. Add to appropriate section (Unassigned/In Progress)
|
|
98
|
+
3. Update "Last Active" date
|
|
99
|
+
4. Push to git
|
|
100
|
+
|
|
101
|
+
### Completing a todo
|
|
102
|
+
1. Mark with [x]
|
|
103
|
+
2. Move to Done section (or DONE.md if section is long)
|
|
104
|
+
3. Update dates
|
|
105
|
+
4. Push to git
|
|
106
|
+
|
|
107
|
+
### Archiving a project
|
|
108
|
+
1. Check "Last Active" date
|
|
109
|
+
2. If >30 days with no mentions, move folder to archive/
|
|
110
|
+
3. Update main README.md
|
|
111
|
+
4. Push to git
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: web-research
|
|
3
|
+
description: Deep web research methodology. Use when searching for information, investigating topics, or answering questions that require thorough research. Never give up until the answer is found.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Web Research Skill
|
|
7
|
+
|
|
8
|
+
**Objective:** Find the answer. Don't stop until you have it.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## The Process
|
|
13
|
+
|
|
14
|
+
### 1. Initial Search
|
|
15
|
+
```
|
|
16
|
+
web_search(query="<initial query>", count=10)
|
|
17
|
+
```
|
|
18
|
+
- Start broad but relevant
|
|
19
|
+
- Look at the results: identify which URLs look most promising
|
|
20
|
+
- Note: titles and descriptions give clues about content quality
|
|
21
|
+
|
|
22
|
+
### 2. Investigate Promising Links
|
|
23
|
+
```
|
|
24
|
+
web_fetch(url="<promising url>")
|
|
25
|
+
```
|
|
26
|
+
For each promising result:
|
|
27
|
+
- Fetch the page content
|
|
28
|
+
- Scan for the information you need
|
|
29
|
+
- Note any specific terminology, names, or concepts discovered
|
|
30
|
+
|
|
31
|
+
### 3. Refine & Go Deeper
|
|
32
|
+
|
|
33
|
+
**If the page answers the question:**
|
|
34
|
+
- Extract the answer
|
|
35
|
+
- Verify with a second source if important
|
|
36
|
+
- Report back
|
|
37
|
+
|
|
38
|
+
**If the page gives you better search terms:**
|
|
39
|
+
- Search again with the refined query
|
|
40
|
+
- New terminology, proper names, or specific phrases = better results
|
|
41
|
+
```
|
|
42
|
+
web_search(query="<refined specific query>", count=10)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**If the page has promising links:**
|
|
46
|
+
- Follow them with `web_fetch`
|
|
47
|
+
- Go deeper into the rabbit hole
|
|
48
|
+
- Source pages often link to primary sources
|
|
49
|
+
|
|
50
|
+
**If the page is useless:**
|
|
51
|
+
- Move to the next promising result
|
|
52
|
+
- Don't waste time on dead ends
|
|
53
|
+
|
|
54
|
+
### 4. Change Strategy If Stuck
|
|
55
|
+
|
|
56
|
+
If initial searches aren't yielding results:
|
|
57
|
+
- Try different phrasings
|
|
58
|
+
- Search for adjacent topics that might lead to the answer
|
|
59
|
+
- Look for expert sources (academic, official, specialized sites)
|
|
60
|
+
- Try adding "reddit", "forum", "explained" for human perspectives
|
|
61
|
+
- Use date filters for recent info: `startDate`, `endDate`
|
|
62
|
+
- Use category filters: `news`, `papers`, `company`, etc.
|
|
63
|
+
|
|
64
|
+
### 5. Never Give Up
|
|
65
|
+
|
|
66
|
+
The information exists. Keep searching until you find it:
|
|
67
|
+
- Try 3-5 different search strategies before considering it unfindable
|
|
68
|
+
- If one angle fails, approach from another
|
|
69
|
+
- Sometimes the answer is in an unexpected place
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Search Tips
|
|
74
|
+
|
|
75
|
+
### Query Strategies
|
|
76
|
+
| Goal | Strategy |
|
|
77
|
+
|------|----------|
|
|
78
|
+
| Exact phrase | `"exact phrase here"` |
|
|
79
|
+
| Exclude terms | Add negative context in query |
|
|
80
|
+
| Recent only | Use `startDate` parameter |
|
|
81
|
+
| Specific sites | Include domain in query |
|
|
82
|
+
| Technical depth | Add "documentation", "spec", "RFC" |
|
|
83
|
+
| Human explanation | Add "explained", "ELI5", "guide" |
|
|
84
|
+
|
|
85
|
+
### Source Quality
|
|
86
|
+
| High Quality | Lower Quality |
|
|
87
|
+
|--------------|---------------|
|
|
88
|
+
| Official docs | Content farms |
|
|
89
|
+
| Primary sources | Aggregators |
|
|
90
|
+
| Expert blogs | Generic listicles |
|
|
91
|
+
| Academic papers | Thin affiliate content |
|
|
92
|
+
| GitHub repos | Outdated forums |
|
|
93
|
+
|
|
94
|
+
### Category Filters (search APIs)
|
|
95
|
+
- `news` - Recent news articles
|
|
96
|
+
- `papers` - Academic/research papers
|
|
97
|
+
- `company` - Company websites
|
|
98
|
+
- `github` - GitHub repos
|
|
99
|
+
- `tweet` - Twitter/X posts
|
|
100
|
+
- `linkedin` - LinkedIn content
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## Example Workflows
|
|
105
|
+
|
|
106
|
+
### Finding a specific fact
|
|
107
|
+
1. `web_search("who invented X")`
|
|
108
|
+
2. Fetch top 2-3 results
|
|
109
|
+
3. Cross-reference the answer
|
|
110
|
+
4. Report with source
|
|
111
|
+
|
|
112
|
+
### Understanding a concept
|
|
113
|
+
1. `web_search("how does X work explained")`
|
|
114
|
+
2. Fetch educational content
|
|
115
|
+
3. If too shallow, search for technical docs
|
|
116
|
+
4. If too deep, search for simpler explanations
|
|
117
|
+
5. Synthesize understanding
|
|
118
|
+
|
|
119
|
+
### Finding current information
|
|
120
|
+
1. `web_search("X 2026", startDate="2026-01-01")`
|
|
121
|
+
2. Fetch recent articles
|
|
122
|
+
3. Follow links to primary announcements
|
|
123
|
+
4. Verify with multiple sources
|
|
124
|
+
|
|
125
|
+
### Investigating a company/person
|
|
126
|
+
1. `web_search("Company Name")` - official site
|
|
127
|
+
2. `web_search("Company Name news", category="news")`
|
|
128
|
+
3. `web_search("Company Name reviews reddit")`
|
|
129
|
+
4. Fetch and synthesize multiple perspectives
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## Rules
|
|
134
|
+
|
|
135
|
+
1. **Don't report "I couldn't find it" after one search** - try harder
|
|
136
|
+
2. **Don't summarize search results without fetching** - actually read the pages
|
|
137
|
+
3. **Don't stop at surface level** - dig until you hit truth
|
|
138
|
+
4. **Do verify important facts** - cross-reference sources
|
|
139
|
+
5. **Do follow the trail** - links lead to better links
|
|
140
|
+
6. **Do adapt your strategy** - different questions need different approaches
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## The Mindset
|
|
145
|
+
|
|
146
|
+
You're an investigator. The answer is out there. Your job is to find it.
|
|
147
|
+
|
|
148
|
+
- First search = opening a door
|
|
149
|
+
- Each fetch = looking inside a room
|
|
150
|
+
- Each refinement = getting closer
|
|
151
|
+
- The answer = mission complete
|
|
152
|
+
|
|
153
|
+
**Don't come back empty-handed.**
|