@owlmeans/agent-skills 0.1.12 → 0.1.14

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.
@@ -1,43 +1,139 @@
1
1
  ---
2
- description: "How project memory works in an OwlMeans app — where to store facts/decisions/gotchas for Copilot (.github/memory/) and Claude Code (.claude/memory/), the MEMORY.md index, and when to read/write memory. Apply when remembering something about the project or deciding where a note belongs."
3
- applyTo: "**/.github/memory/**, **/.claude/memory/**"
2
+ description: "Shared agent memory protocol for the .agents/memory/ graph store (single store for Copilot and Claude Code) — MEMORY.md index, subsystem nodes, compact-on-write, size caps, read protocol. Apply when reading or writing project memory, or when any legacy .claude/memory or .github/memory path appears."
3
+ applyTo: "**/.agents/memory/**, **/.claude/memory/**, **/.github/memory/**"
4
4
  scope: general
5
5
  ---
6
6
  <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
7
7
 
8
- # Project memory
8
+ # Agent memory (`.agents/memory/`)
9
9
 
10
- Memory is how durable, project-specific knowledge survives across sessions. Keep it **inside the
11
- project**, never outside the repository.
10
+ One shared memory store per repository, used by **both** GitHub Copilot and Claude Code: a graph
11
+ of subsystem nodes rooted in the `MEMORY.md` index. Compactness is the core value — every write
12
+ merges and compacts; nothing is ever appended as a log.
12
13
 
13
- | Tool | Memory dir | Index |
14
- |---|---|---|
15
- | GitHub Copilot | `.github/memory/` | `.github/memory/MEMORY.md` |
16
- | Claude Code | `.claude/memory/` | `.claude/memory/MEMORY.md` |
14
+ Never write memory to `.claude/memory/`, `.github/memory/`, `~/.copilot/`, `~/.claude/`, or
15
+ anywhere outside the repository. Legacy `.claude/memory/` / `.github/memory/` stores are
16
+ retired — if one exists, flag it for migration
17
+ (`.github/instructions/memory-recompact.instructions.md`) instead of writing there.
17
18
 
18
- Each memory is one Markdown file holding one fact, decision, or gotcha. The `MEMORY.md` index keeps a
19
- one-line pointer per file and is loaded every session, so keep it current.
19
+ ## Store layout
20
20
 
21
- ## When to read
21
+ ```
22
+ .agents/memory/
23
+ ├── MEMORY.md # graph root: the only always-read file
24
+ └── <node>.md # one file per subsystem / concern / integration
25
+ ```
22
26
 
23
- - **Start of every session** — read `MEMORY.md`, then open any relevant file.
24
- - **Before a non-trivial task** — check for and read a memory file on that topic.
27
+ Flat directory — graph structure lives in scopes and wiki-links, not subdirectories.
25
28
 
26
- ## When to write
29
+ ## Node naming
27
30
 
28
- After a task produces knowledge not obvious from the code or git history: a decision and its
29
- rationale, a gotcha, or project state/goals. Do not record what the repo or git history already says,
30
- or what only matters to the current conversation.
31
+ Node id = lowercase-kebab name of the **project-structure part** the knowledge attaches to:
31
32
 
32
- ## How to write one
33
+ 1. **Subsystem** — workspace dir / package name: `manager-web`, `auth`, `vslots`. Deepest
34
+ unambiguous segment; prefix with the parent only on collision.
35
+ 2. **Cross-cutting concern** spanning subsystems: `build`, `testing`, `deploy`, `routing`, `i18n`.
36
+ 3. **Integration** — external service/library: `stripe`, `cloudflare`, `openrouter`.
37
+ 4. **`workspace`** — repo-level facts that fit nowhere else (remotes, branch topology, env model).
33
38
 
34
- 1. Create `.github/memory/<topic>.md` (and the Claude copy under `.claude/memory/`) with a short slug
35
- and a one-line description.
36
- 2. Write the single fact; for decisions/gotchas add why it matters and how to apply it.
37
- 3. Add a one-line pointer to `MEMORY.md`.
38
- 4. Update an existing file instead of duplicating; delete memories that prove wrong.
39
+ File is `<node>.md`; the id is the wiki-link target: `[[manager-web]]`. **Never** key a node to an
40
+ event, date, phase, investigation, or task name.
39
41
 
40
- ## Memory vs skill
42
+ ## Index format (`MEMORY.md`)
41
43
 
42
- A repeatable procedure is a skill (see the `skill-authoring` instruction). Memory is for facts about
43
- this project.
44
+ ```markdown
45
+ # Memory Graph — <project>
46
+
47
+ Shared agent memory (`agent-memory` protocol). Read this file at session start.
48
+ Before non-trivial work, open every node whose scope matches the task's files or topics.
49
+
50
+ ## Subsystems
51
+ - [[manager-web]] `sources/manager-web/**` — i18n 8-domain split; owl-theme wiring
52
+ ## Cross-cutting
53
+ - [[build]] `**/tsconfig*.json` — tsbuildinfo path pinning; tolerant library builds
54
+ ## Integrations
55
+ - [[stripe]] `ext:stripe` — sandbox topology; webhook fan-out
56
+ ```
57
+
58
+ Rules: exactly one line per node — `- [[<node>]] ` + backticked scope + ` — <hook>`; hook ≤ 100
59
+ chars; no dates; only non-empty groups; file ≤ 50 lines; no skills listed (skills self-describe).
60
+ The scope column is the router: match the task's paths/topics against scopes to decide which
61
+ nodes to open.
62
+
63
+ ## Node format
64
+
65
+ Frontmatter — exactly three fields:
66
+
67
+ ```yaml
68
+ ---
69
+ node: vslots # = filename without .md; = wiki-link target
70
+ scope: "scripts/vslots/**" # repo-relative globs; ext:<service> for integrations; . for workspace
71
+ updated: 2026-08 # month granularity only
72
+ ---
73
+ ```
74
+
75
+ Body — only non-empty sections, in this order:
76
+
77
+ - `## Facts` — what IS: structure, behavior, topology. 1–3 lines each.
78
+ - `## Invariants` — what MUST HOLD; optionally "broke when violated: <symptom>".
79
+ - `## Gotchas` — symptom → cause → counter-move, ≤ 3 lines each.
80
+ - `## Pointers` — key files, promoted-skill pointer lines, `External docs` (URL + gist).
81
+ - `## Status` — optional; in-flight state only; every line dated; prune resolved lines on every read.
82
+
83
+ `Status` is the **only** place dates and unfinished-work notes are allowed. Link related nodes
84
+ inline with `[[node]]`.
85
+
86
+ ## Read protocol
87
+
88
+ - **Session start**: read `.agents/memory/MEMORY.md` — the index only.
89
+ - **Before a non-trivial task**: open every node whose scope matches the task (typically 1–3).
90
+ - **When a topic surfaces mid-session** that the index names: open its node before acting.
91
+ - **Never bulk-read** the store — the index + scopes exist so you don't have to.
92
+
93
+ ## Write protocol (compact-on-write)
94
+
95
+ Every write is a merge, never an append:
96
+
97
+ 1. **Extract** — reduce the outcome to reusable knowledge atoms (rule below). Nothing survives →
98
+ write nothing.
99
+ 2. **Locate** — match scopes to find the node; none matches → create one per the naming rule and
100
+ add its index line.
101
+ 3. **Merge / supersede** — place each atom in the right section; if it refines or contradicts an
102
+ existing line, **rewrite that line in place** — never append a dated correction. The node
103
+ always reads as current truth.
104
+ 4. **Compact** — reread the node; collapse redundancy; delete anything the code or git history
105
+ now states; prune resolved `Status` lines.
106
+ 5. **Cap** — over soft cap: compact harder. Over hard cap: split by sub-scope into a linked child
107
+ node, or promote procedure-shaped overflow
108
+ (`.github/instructions/memory-promotion.instructions.md`, else the skill-authoring guidance).
109
+ 6. **Index** — update the hook line if the node's center of gravity moved; bump `updated:`.
110
+
111
+ ## Knowledge, not events
112
+
113
+ **Record the rule, not the story.** For every line ask: *what must a future agent know to act
114
+ correctly, stated without reference to this session?* Keep invariants, cause→effect,
115
+ counter-moves, recognition fingerprints (symptoms). Drop dates, phase numbers, who did what,
116
+ attempt sequences, and anything recoverable from code or git.
117
+
118
+ Before (event log): "Verification 2026-06-11 … Bug found: script missing embedded-count logic.
119
+ Fix deployed to all copies; second run idempotent."
120
+ After (knowledge): "`nested-agent-context.sh` exists as byte-identical copies in the archive and
121
+ each repo — fan every fix out to all copies; verify with `diff`. Correct re-runs are no-ops."
122
+
123
+ ## Size caps (hard)
124
+
125
+ | Thing | Cap |
126
+ |---|---|
127
+ | Index entry | 1 line, hook ≤ 100 chars |
128
+ | `MEMORY.md` | ≤ 50 lines |
129
+ | Node file (soft / hard) | 80 / 120 lines |
130
+ | Single fact/gotcha | ≤ 3 lines |
131
+ | `Status` section | ≤ 5 dated lines |
132
+ | Nodes per store (soft) | ~25 — merge low-traffic siblings beyond |
133
+
134
+ ## Memory vs instruction
135
+
136
+ Fact-shaped ("what is true") stays here. Procedure-shaped ("to do X, do Y") becomes an
137
+ instruction/skill — follow `.github/instructions/memory-promotion.instructions.md` where present,
138
+ otherwise the skill-authoring guidance. Repeated use of a node to *perform* tasks, and over-cap
139
+ nodes full of steps, are promotion triggers.
@@ -0,0 +1,52 @@
1
+ ---
2
+ description: "Mandatory git rules — never run state-changing git without explicit instruction, commit only under the user's configured identity (never as the AI/agent, no Co-Authored-By trailer), report finished git work as a Markdown table, and never commit a conflicted working copy. Consult before any git operation."
3
+ applyTo: "**"
4
+ scope: general
5
+ ---
6
+ <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
7
+
8
+ # Git Workflow Rules
9
+
10
+ **Mandatory and universal.** These rules apply to every git operation in this repository and
11
+ **override any default agent behavior** — including any automatic `Co-Authored-By` or
12
+ AI/agent-attribution trailer. Consult them before running any git command.
13
+
14
+ ## 0. Never run state-changing git without explicit instruction
15
+
16
+ - **Never run state-changing git operations** (`commit`, `add`/`rm` staging, `push`,
17
+ `reset`/rollback, `revert`, `rebase`, `merge`, `branch`, `checkout`/`switch`, `stash`,
18
+ `tag`, `cherry-pick`, force-push, etc.) unless the user **explicitly instructs it in the
19
+ current request**. Permission to make code edits is **not** permission to touch git.
20
+ - **Only exception**: creating and operating inside a **temporary git worktree** that a task
21
+ or subagent has **explicitly requested** for that purpose. Outside such an explicitly
22
+ requested tmp worktree, do nothing with git.
23
+ - **Read-only inspection is allowed**: `git status`, `git diff`, `git log`, `git show`,
24
+ `git branch --list`, etc. — use these to report state, never to change it.
25
+
26
+ ## 1. Never commit under the agent's identity
27
+
28
+ - Commit only under the repository's preconfigured git identity — whatever `git config user.name`
29
+ and `git config user.email` resolve to (set by the user, globally or locally).
30
+ - **Never** override authorship: do not pass `--author`, do not set or change `user.name` /
31
+ `user.email`, and never substitute an AI / agent / assistant name or email.
32
+ - **Never** add a `Co-Authored-By:` trailer (or any other trailer) attributing the commit to
33
+ Claude, Copilot, or any AI/agent. Every commit is the user's, attributed solely to the user.
34
+ - If the repository has no git identity configured (neither local nor global), stop and ask the
35
+ user — do not invent one.
36
+
37
+ ## 2. Always report finished git work as a table
38
+
39
+ - After completing any git action (commit, push, branch, checkout, merge, rebase, stash, tag,
40
+ reset, etc.), summarize what was done as a Markdown table.
41
+ - One row per action. Include at least **Action**, **Target** (branch / remote / files / ref),
42
+ and **Result** (commit SHA, `pushed`, `up to date`, `conflict`, …). Add a **Notes** column
43
+ when useful.
44
+
45
+ ## 3. Never commit a conflicted working copy
46
+
47
+ - If a `merge`, `rebase`, `cherry-pick`, `stash pop`/`apply`, or `pull` produces conflicts,
48
+ **do not** finalize it: do not run `git commit`, `git merge --continue`,
49
+ `git rebase --continue`, or stage-and-commit the conflicted tree to "resolve" it on the
50
+ user's behalf.
51
+ - Stop, list the conflicted paths in the report table, and hand control back to the user —
52
+ unless the user has explicitly told you how to resolve the conflict and commit.
@@ -0,0 +1,67 @@
1
+ ---
2
+ description: "Promote procedure-shaped or hot memory into skills/instructions — triggers (procedure test, promote? flags, over-cap), update-vs-create rule, post-promotion pointer state. Apply when converting memory content into guidance files or when a promote? flag appears in a memory node."
3
+ applyTo: "**/.agents/memory/**, **/.claude/skills/**, **/.github/instructions/**"
4
+ scope: general
5
+ ---
6
+ <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
7
+
8
+ # Memory promotion
9
+
10
+ Memory holds **facts**; **procedures** belong in instructions/skills, where they auto-apply and
11
+ stop consuming memory-read cycles. Promotion is how the store stays compact and the harness
12
+ teaches itself.
13
+
14
+ ## Triggers
15
+
16
+ - **Procedure shape**: the content answers *how to do X* — ordered steps, imperative verbs,
17
+ command lines, if-this-do-that tables. Promote it.
18
+ - **Repeated touch**: an existing ` → promote?` flag on content you are touching again means
19
+ promote now; if mid-task, promotion becomes the first row of the completion report.
20
+ - **Over-cap**: a node past the 120-line hard cap with roughly a third or more procedure-shaped
21
+ content → promote the procedures instead of splitting the node.
22
+ - Corroborating only (weak — agents don't commit, so only user commits appear):
23
+ `git log --oneline -- .agents/memory/<node>.md` showing ≥ 3 commits within ~a month marks a
24
+ hot node worth evaluating.
25
+
26
+ ## Procedure-shape test
27
+
28
+ Procedure-shaped answers *how to do X*: ordered steps, imperative verbs, commands, action tables.
29
+ Fact-shaped answers *what is true*: declarative structure, invariants, symptom→cause pairs.
30
+ Mixed entries split — the fact stays in the node, the "then do" moves out.
31
+
32
+ ## Flagging (how content earns promotion)
33
+
34
+ When you **merge** procedure-shaped content into a node, or you **use** (not merely check) a
35
+ node's content to perform a task, append ` → promote?` to that line or section heading.
36
+ Evaluable by reading the file alone — no tooling required.
37
+
38
+ ## Update vs create
39
+
40
+ **Default is update** — extend the existing instruction/skill whose scope covers the activity,
41
+ even partially; keep both twins in sync. Create a NEW pair only when:
42
+
43
+ - (a) a new subsystem or technology entered the repo;
44
+ - (b) an activity with no covering instruction needed memory read/write more than once (a
45
+ re-encountered ` → promote?` flag);
46
+ - (c) an external technology required internet docs and has no governing instruction.
47
+
48
+ New instructions multiply lookup cost — compactness applies to the guidance population too.
49
+
50
+ ## Procedure
51
+
52
+ 1. Collect the flagged / procedure-shaped memory lines.
53
+ 2. Author or extend the `.github/instructions/<name>.instructions.md` and its
54
+ `.claude/skills/<name>/SKILL.md` twin, following the repo's skill-authoring / create-skill
55
+ conventions.
56
+ 3. Shrink the node: delete the promoted prose; leave one pointer line (format below).
57
+ 4. Remove the ` → promote?` flags.
58
+ 5. Update the node's index hook if its main value moved; bump `updated:`.
59
+ 6. Report per the Reporting rule.
60
+
61
+ ## Post-promotion state
62
+
63
+ The node keeps exactly one line under `## Pointers`:
64
+
65
+ ```
66
+ - <activity> → skill `<name>` (procedure lives in .claude/skills/<name>/ + .github/instructions/<name>.instructions.md)
67
+ ```
@@ -0,0 +1,72 @@
1
+ ---
2
+ description: "Whole-store memory recompaction and migration for .agents/memory/ — rebuild node map from project structure, merge records, enforce caps, regenerate the index, fold in and delete legacy .claude/memory and .github/memory stores. Apply when restructuring a memory store or migrating legacy stores."
3
+ applyTo: "**/.agents/memory/**, **/.claude/memory/**, **/.github/memory/**"
4
+ scope: general
5
+ ---
6
+ <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
7
+
8
+ # Memory recompaction
9
+
10
+ Whole-store maintenance for `.agents/memory/` (protocol:
11
+ `.github/instructions/agent-memory.instructions.md`). Also the migration procedure for legacy
12
+ `.claude/memory/` + `.github/memory/` stores. Store-wide rewrite — propose it when triggers
13
+ appear; the operator invokes it.
14
+
15
+ ## When
16
+
17
+ - An index entry runs longer than one line, or the index exceeds 50 lines.
18
+ - Nodes keyed by event/date/phase/task, or bodies reading as session narratives.
19
+ - The same fact stated in two or more nodes.
20
+ - More than ~20% of a node is stale `Status` content.
21
+ - A node's `updated:` is months behind commits touching its scope.
22
+ - Legacy `.claude/memory/` or `.github/memory/` dirs exist → run the migration below.
23
+
24
+ ## Build the target node map first
25
+
26
+ Before reading any record bodies, derive the node set from **project structure**: workspaces
27
+ array / top-level dirs → subsystem nodes; then the cross-cutting concerns and external
28
+ integrations actually present. Write the map down (old file/section → target node). Every
29
+ existing record must land in exactly one node — or split into atoms landing in several. Only
30
+ then process records.
31
+
32
+ ## Per-record pass
33
+
34
+ For each old file or section:
35
+
36
+ 1. Apply the agent-memory extraction rule — keep invariants, cause→effect, counter-moves,
37
+ symptom fingerprints; drop narratives, dates, attempt logs, anything code/git already states.
38
+ 2. Route each surviving atom to its node's section (Facts / Invariants / Gotchas / Pointers;
39
+ genuinely in-flight state → `Status`, dated).
40
+ 3. On conflict between records, the version consistent with **current code** wins — check the
41
+ code, don't average.
42
+ 4. Procedure-shaped survivors do not enter nodes — route them to
43
+ `.github/instructions/memory-promotion.instructions.md`.
44
+
45
+ ## Legacy-store merge (migration)
46
+
47
+ 1. Union `.claude/memory/` and `.github/memory/`. Same-named files are two drifted sources of
48
+ ONE node — merge both; the code-consistent version wins.
49
+ 2. Index-only entries with no backing file: extract the fact into its node, or drop if stale.
50
+ 3. Old `## Skills` / "Key Files" index sections are dropped — skills self-describe; harness
51
+ layout belongs to `CLAUDE.md` / `.github/copilot-instructions.md`. Move genuinely non-obvious
52
+ dispatch hints there.
53
+ 4. When the new store verifies (below), delete both legacy dirs entirely.
54
+
55
+ ## Regenerate the index
56
+
57
+ Rebuild `MEMORY.md` from the resulting nodes per the agent-memory format — never edit the old
58
+ index incrementally.
59
+
60
+ ## Verify
61
+
62
+ - Every node file is listed in the index; every listed node exists; every wiki-link resolves.
63
+ - All caps met (index ≤ 50 lines; nodes ≤ 120; entries ≤ 3 lines; Status ≤ 5 dated lines).
64
+ - No dates outside `Status` and `updated:`; no event-keyed filenames.
65
+ - Both root instruction files' Memory sections point at `.agents/memory/`.
66
+ - Legacy dirs gone; `grep -rn '\.claude/memory\|\.github/memory'` over the repo's harness files
67
+ returns nothing but allowlisted historical mentions.
68
+
69
+ ## Report
70
+
71
+ One table: **Node** | **Sources merged** | **Lines before → after**. Follow the Reporting rule
72
+ (what, not why).
@@ -0,0 +1,46 @@
1
+ ---
2
+ description: "How OwlMeans UI routing plugins work — the RouterPlugin contract, cascade selection, choosing/switching the router at context provisioning (default OwlMeans vs opt-in react-router), and authoring a plugin. Use before wiring routing in an app or writing a routing plugin."
3
+ applyTo: "**/*.ts, **/*.tsx"
4
+ ---
5
+ <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
6
+
7
+ # OwlMeans routing plugins
8
+
9
+ OwlMeans UI routing is pluggable. `@owlmeans/router` is a **host**: it defines the `RouterService`
10
+ facade and a `RouterPlugin` registry, selecting the active plugin by **cascade** (priority + `match`).
11
+ Route descriptions are react-router-compatible (static, `:param`, nested, index), so the same route
12
+ trees work across plugins.
13
+
14
+ ## Plugins
15
+
16
+ | Plugin | Package | Register | Priority |
17
+ |--------|---------|----------|----------|
18
+ | OwlMeans in-browser (default) | `@owlmeans/web-router` | `appendWebRouter(ctx)` | 0 |
19
+ | react-router v7 (opt-in) | `@owlmeans/web-router-react-router` | `appendReactRouter(ctx)` | 100 |
20
+ | SSR (future) | — | higher-priority `match: env => env.ssr` | >0 |
21
+
22
+ ## Choosing the router at context provisioning
23
+
24
+ `web-client`/`web-panel` register the OwlMeans plugin by default. To switch to react-router, add it
25
+ in your `makeContext` — its higher priority wins:
26
+
27
+ ```typescript
28
+ import { appendReactRouter } from '@owlmeans/web-router-react-router'
29
+ export const makeContext = (cfg) => { const c = makeBase(cfg); appendReactRouter(c); return c }
30
+ ```
31
+
32
+ Do NOT pass a `provide`/`createBrowserRouter` prop anymore — routing resolves its compiler from the
33
+ active plugin (`context.router().compile`). The old `provide` export from `web-client` is a
34
+ deprecated `undefined`.
35
+
36
+ ## RouterPlugin contract
37
+
38
+ `{ alias; priority?; mode?; match?(env,ctx); compile(routes,ctx); provider(); outlet(); useParams;
39
+ useLocation; useNavigate; useSearchParams }`. `RouteObject` (`{index?,path?,children?,Component?}`)
40
+ is the neutral IR both plugins consume. `RouterEnv` (`{hasWindow,ssr,request?}`) drives selection.
41
+
42
+ ## Authoring a plugin
43
+
44
+ Reuse the pure matcher (`flattenRoutes`/`rankRouteBranches`/`matchRoutes` from `@owlmeans/router`),
45
+ expose `appendMyRouter(ctx) = ensureRouterService(ctx).registerPlugin(makeMyPlugin())`, set a
46
+ `priority`/`match` for your environment, and keep facade methods assignable (native-safety).
@@ -19,7 +19,9 @@ npx @owlmeans/create-app my-app
19
19
  ```
20
20
 
21
21
  By default it copies the template, runs `git init`, installs dependencies, and deploys agent
22
- guidance via `@owlmeans/agent-skills` (`.claude/skills/` + `.github/instructions/`).
22
+ guidance via `@owlmeans/agent-skills` (`.claude/skills/` + `.github/instructions/`). With
23
+ `--no-install` the deploy still runs from the installer's own bundled extras, so the project gets
24
+ its general/harness guidance; package-specific skills wait for `npx @owlmeans/agent-skills`.
23
25
 
24
26
  Flags: `--name`, `--pm <bun|npm|yarn>` (default `bun`), `--no-install`, `--no-skills`, `--no-git`,
25
27
  `--yes`. Run with `cd my-app && bun run dev` (API :3000, web :3001).
@@ -38,6 +40,11 @@ Follow Option B in `docs/getting-started.md`: bun workspace → `common` (entryp
38
40
  ```
39
41
  my-app/
40
42
  ├── package.json # bun workspaces: sources/*
43
+ ├── CLAUDE.md # git/reporting/memory/self-education rules + project-purpose placeholder
44
+ ├── .github/copilot-instructions.md # same directives for Copilot
45
+ ├── .github/instructions/ # seeded harness instructions (+ deployed ones)
46
+ ├── .claude/skills/ # seeded harness skills (+ deployed ones)
47
+ ├── .agents/memory/MEMORY.md # starter shared memory graph index (both tools)
41
48
  ├── sources/common/ # consts, types, schemas, config, modules
42
49
  ├── sources/api/ # context (appendStaticResource), app/session/*, modules, index
43
50
  └── sources/web/ # vite + tailwind v4, components/ui/*, layout, nav, screens, render
@@ -45,3 +52,17 @@ my-app/
45
52
 
46
53
  Session items live in `@owlmeans/static-resource`, namespaced by a client-generated `sid` in
47
54
  `localStorage` — no database, no authentication.
55
+
56
+ ## Generated agent guidance
57
+
58
+ Both root files carry the same four mandatory sections as a real OwlMeans monorepo — Git Workflow,
59
+ Reporting, Memory, Self-Education — plus the mandatory reuse-code section and a project-purpose
60
+ placeholder (`<!-- OWLMEANS:PROJECT-PURPOSE -->`) the agent fills in on its first session.
61
+
62
+ Memory lives **only** in `.agents/memory/` — the legacy `.claude/memory/` and `.github/memory/`
63
+ starters are gone (`memory-recompact.instructions.md` migrates a project that still has them).
64
+
65
+ The harness guidance is seeded into the template as generated, banner-carrying copies, so a project
66
+ has it before the installer runs: `agent-memory`, `memory-promotion`, `memory-recompact`,
67
+ `self-education`, `skill-authoring`, `git`, `reuse-code`, `getting-started`. Never hand-edit a seeded
68
+ copy — regenerate with `sync-agent-meta --seed-only` in the library-manager.
@@ -0,0 +1,69 @@
1
+ ---
2
+ description: "Mandatory post-development skill/instruction updating — after adding or changing functionality, update touched project guidance, note external-doc findings in the governing instruction, or add instructions for new subsystems/technologies; required before the completion report when development started from an agreed plan. Apply when editing skills or instruction files after development."
3
+ applyTo: "**/.claude/skills/**, **/.github/instructions/**"
4
+ scope: general
5
+ ---
6
+ <!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
7
+
8
+ # Self-education
9
+
10
+ After functionality is added or changed, the guidance that describes it must catch up — the agent
11
+ teaches itself for next time. This pass runs after implementation and verification, **before**
12
+ the completion report.
13
+
14
+ ## When (mandatory)
15
+
16
+ Development "started from planning" when the session produced a plan the operator approved before
17
+ implementation — a plan approval, an agreed written plan/spec, or an explicit "go ahead" on a
18
+ proposed approach. **Approval of a plan is simultaneously approval of its implicit final step:
19
+ this self-education pass.** A planned task is not finishable without it. If guidance files cannot
20
+ be edited (read-only run), list the required updates in the report instead.
21
+
22
+ Also recommended after any unplanned change that made an existing instruction/skill inaccurate.
23
+
24
+ ## Review checklist
25
+
26
+ For each area the work touched:
27
+
28
+ 1. Which existing instruction/skill covers it? (Check `.github/instructions/` +
29
+ `.claude/skills/`.)
30
+ 2. Do its commands, paths, APIs, and behavior claims still hold after the change?
31
+ 3. Fix in place — and keep the instruction and its skill twin in sync.
32
+
33
+ ## Non-project instructions
34
+
35
+ If a general or imported instruction gained an important usage pattern during the work, add the
36
+ pattern to the **deployed copy** in this repo and note it in the report as an upstream
37
+ candidate — canonical archive copies change only on explicit operator request.
38
+
39
+ ## External docs
40
+
41
+ If the work required reading internet documentation for an external API, library, or service,
42
+ the governing instruction must record it under an `## External docs` heading:
43
+
44
+ ```
45
+ - <URL> — <one-line gist of what it settled> (<version/date if load-bearing>)
46
+ ```
47
+
48
+ Governing instruction = the project instruction covering the touched area; else the one covering
49
+ that library; if none exists and the technology will recur, create one (update-vs-create rule in
50
+ `.github/instructions/memory-promotion.instructions.md`). Never leave doc findings only in
51
+ memory or the conversation.
52
+
53
+ ## New subsystems / technologies
54
+
55
+ When new technology or a new subsystem entered the repo: create the instruction/skill pair for
56
+ its procedures, and/or the `.agents/memory/` node for its facts — split along the
57
+ memory-vs-instruction boundary (`.github/instructions/agent-memory.instructions.md` /
58
+ `.github/instructions/memory-promotion.instructions.md`).
59
+
60
+ ## Completion gate
61
+
62
+ The completion report must contain a Self-education table:
63
+
64
+ | Item | Action | Path |
65
+ |---|---|---|
66
+ | <area/skill> | updated / created / none-needed | <path> |
67
+
68
+ "none-needed" requires a one-phrase reason. A post-plan completion report without this table is
69
+ a protocol violation.
@@ -51,10 +51,12 @@ Cross-reference related guidance by name.
51
51
  ## Skill vs memory
52
52
 
53
53
  - **Skill / instruction** — a reusable procedure or reference worth auto-invoking.
54
- - **Memory** (`.claude/memory/`, `.github/memory/`) — a fact, decision, or gotcha specific to this
55
- project's history. See the `agent-memory` instruction.
54
+ - **Memory** (shared `.agents/memory/` graph store, both tools) — a fact, decision, or gotcha
55
+ specific to this project's history. See the agent-memory instruction; promotion triggers live
56
+ in the memory-promotion instruction.
56
57
 
57
58
  ## After adding a skill
58
59
 
59
- List it in `.github/memory/MEMORY.md` (and `.claude/memory/MEMORY.md`), and reference it from
60
+ If it absorbed memory content, shrink the source `.agents/memory/` node to a pointer line
61
+ (memory-promotion instruction) — the memory index does not list skills. Reference it from
60
62
  `.github/copilot-instructions.md` / `CLAUDE.md` if it should be discoverable every session.