skillwiki 0.2.1-beta.16 → 0.2.1-beta.21

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.
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ git,
4
+ gitStrict
5
+ } from "./chunk-TPS5XD2J.js";
6
+ export {
7
+ git,
8
+ gitStrict
9
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.2.1-beta.16",
3
+ "version": "0.2.1-beta.21",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "skillwiki": "dist/cli.js"
@@ -19,6 +19,8 @@
19
19
  "prepublishOnly": "npm run build"
20
20
  },
21
21
  "dependencies": {
22
+ "@aws-sdk/client-s3": "^3.1045.0",
23
+ "@aws-sdk/credential-provider-env": "^3.972.34",
22
24
  "commander": "^12.1.0",
23
25
  "js-yaml": "^4.1.0",
24
26
  "zod": "^3.23.0"
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.2.1-beta.16",
3
+ "version": "0.2.1-beta.21",
4
4
  "skills": "./",
5
- "description": "Project-aware Karpathy-style knowledge base for Claude Code: 15 prompt-only skills (wiki-*, proj-*, using-skillwiki) backed by the deterministic `skillwiki` CLI.",
5
+ "description": "Project-aware Karpathy-style knowledge base for Claude Code: 17 prompt-only skills (wiki-*, proj-*, using-skillwiki) backed by the deterministic `skillwiki` CLI.",
6
6
  "author": {
7
7
  "name": "karlorz",
8
8
  "url": "https://github.com/karlorz"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillwiki/skills",
3
- "version": "0.2.1-beta.16",
3
+ "version": "0.2.1-beta.21",
4
4
  "private": true,
5
5
  "files": [
6
6
  "wiki-*",
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: proj-decide
3
4
  description: Write an Architectural Decision Record (ADR). If the decision generalizes, also create a concepts/ page.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: proj-distill
3
4
  description: 2-step distillation (E4) — analyze project compound entry, then generate a vault concept page with provenance.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: proj-init
3
4
  description: Bootstrap a project workspace at projects/{slug}/ with README, requirements/, architecture/, work/, compound/.
4
5
  ---
@@ -18,7 +19,7 @@ Standard four reads (vault SCHEMA, index, log) — no project context yet.
18
19
  ## Steps
19
20
  1. Verify `projects/{slug}/` does not exist.
20
21
  2. Create folders: `projects/{slug}/{requirements,architecture,work,compound}/`.
21
- 3. Render `projects/{slug}/README.md` from `project-README.md` template, filling `{{slug}}` and `{{date}}`.
22
+ 3. Render `projects/{slug}/README.md` from `project-README.md` template, filling `{{slug}}` and `{{date}}`. The template includes a `## Knowledge Pages` section with a placeholder; agents populate it on first ingest via `skillwiki project-index`.
22
23
  4. Update vault `index.md` "Projects" section: add `- [[projects/{slug}]]`.
23
24
  5. Append vault `log.md` entry: "Project {slug} initialized."
24
25
 
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: proj-work
3
4
  description: Open or run a work item under projects/{slug}/work/YYYY-MM-DD-{slug}/. Redirects brainstorming/writing-plans output paths.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: using-skillwiki
3
4
  description: Invoke at session start or when knowledge-base tasks arise — maps all wiki-*/proj-* skills and teaches the skillwiki CLI workflow
4
5
  ---
@@ -25,6 +26,8 @@ Invoke a skillwiki skill when the user:
25
26
  - Needs to detect source drift or re-ingest updated content
26
27
  - Has a spec/plan in a non-skillwiki format (CodeStable, RFC, AIDE)
27
28
  - Asks about their skillwiki configuration or setup health
29
+ - Wants to sync vault changes to/from a git remote
30
+ - Wants to visualize the vault graph as an Obsidian Canvas
28
31
 
29
32
  ## Vault Structure
30
33
 
@@ -59,7 +62,7 @@ sha256: # computed by skillwiki hash over body bytes after closing ---
59
62
 
60
63
  | Entry | When | What happens |
61
64
  |-------|------|-------------|
62
- | `/wiki-add-task <text>` | You're in a Claude session | Appends entry to `raw/transcripts/YYYY-MM-DD-ad-hoc-captures.md` |
65
+ | `/wiki-add-task <text>` | You're in a Claude session | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
63
66
  | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) | Create/edit any `.md` file in `raw/transcripts/` — dev-loop discovers it on next cycle |
64
67
  | Dev-loop discovery | Automatic, next cycle | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
65
68
 
@@ -80,13 +83,15 @@ sha256: # computed by skillwiki hash over body bytes after closing ---
80
83
  | `proj-init` | Bootstrap a project workspace (README, requirements, architecture) |
81
84
  | `proj-work` | Open or run a work item under a project's work/ directory |
82
85
  | `proj-distill` | Distill project compound entries into vault concept pages |
86
+ | `wiki-sync` | Safely sync vault git repository — push/pull with lint guards and conflict resolution |
87
+ | `wiki-canvas` | Generate Obsidian Canvas visualization from vault graph data |
83
88
  | `proj-decide` | Write an Architectural Decision Record (ADR) |
84
89
 
85
90
  ## CLI Backbone
86
91
 
87
92
  All skills are backed by the `skillwiki` CLI — a deterministic tool with no LLM calls. It handles path resolution, config management, validation, and linting. Skills invoke it via Bash for the mechanical parts and use Claude for the creative parts.
88
93
 
89
- Key CLI subcommands: `init`, `lint`, `config`, `doctor`, `path`, `lang`, `install`, `graph build`, `archive`, `drift`.
94
+ Key CLI subcommands: `init`, `lint`, `config`, `doctor`, `path`, `lang`, `install`, `graph build`, `archive`, `drift`, `compound`, `tag-sync`, `sync status`, `seed`, `stale`, `observe`, `canvas generate`.
90
95
 
91
96
  Run `skillwiki doctor` to diagnose setup issues. Run `skillwiki config list` to see current configuration.
92
97
 
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-adapter-prd
3
4
  description: Map foreign PRD formats (CodeStable, RFCs, structured markdown) into skillwiki raw + typed-knowledge pages.
4
5
  ---
@@ -1,6 +1,7 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-add-task
3
- description: Capture ad-hoc ideas, bugs, tasks, or notes into the vault via /wiki-add-task or filesystem drop.
4
+ description: Capture ad-hoc ideas, bugs, tasks, or notes into the vault with ad-hoc capture frontmatter and descriptive filenames.
4
5
  ---
5
6
 
6
7
  # wiki-add-task
@@ -9,7 +10,7 @@ Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Three entry points
9
10
 
10
11
  | Entry | When | What happens |
11
12
  |-------|------|-------------|
12
- | `/wiki-add-task <text>` | You're in a Claude session | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with raw-valid frontmatter |
13
+ | `/wiki-add-task <text>` | You're in a Claude session | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
13
14
  | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) | Create any `.md` file in `raw/transcripts/` using the vault template — dev-loop discovers it on next cycle |
14
15
  | Dev-loop discovery | Automatic, next cycle | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
15
16
 
@@ -30,14 +31,12 @@ Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the r
30
31
  - `text` — the idea/bug/task/note content (required)
31
32
  - `type` — one of: `idea`, `bug`, `task`, `note` (default: `idea`)
32
33
  - `project` — optional project slug to cross-reference (e.g., `llm-wiki`)
33
- 2. **Build filename.** Derive a short slug from the text (lowercase, hyphenated, max 8 words). The capture file is `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md`. Each capture gets its own file — never append to an existing file.
34
- 3. **Write frontmatter.** Create the file with raw-source frontmatter:
34
+ 2. **Build filename.** Derive a slug from the first ~6 words of the text (lowercased, hyphens for spaces, non-alphanumeric stripped). The capture file is `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md`. Each capture gets its own file — never append to an existing file.
35
+ 3. **Write frontmatter.** Create the file with ad-hoc capture frontmatter:
35
36
  ```yaml
36
37
  ---
37
38
  source_url:
38
39
  ingested: YYYY-MM-DD
39
- ingested_by: manual
40
- sha256:
41
40
  kind: {type}
42
41
  project: "[[{slug}]]"
43
42
  ---
@@ -45,8 +44,8 @@ Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the r
45
44
  - Set `kind` to the parsed type (`idea`, `bug`, `task`, `note`).
46
45
  - If a `project` slug was provided, set `project: "[[slug]]"`.
47
46
  - If no project, omit the `project` field entirely.
48
- - Leave `sha256` empty for now — step 5 fills it in.
49
47
  - `source_url` is null (these are locally originated captures).
48
+ - No `sha256` — ad-hoc captures are mutable working notes, not immutable sources.
50
49
  4. **Write body.** Below the frontmatter, write:
51
50
  ```markdown
52
51
  # {type}: {text}
@@ -54,14 +53,13 @@ Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the r
54
53
  {text}
55
54
  ```
56
55
  Use the resolved output language for any prose. The type label and frontmatter stay English.
57
- 5. **Compute and write sha256.** Run `skillwiki hash <file>` to get the SHA-256 of the body. Update the `sha256:` field in the frontmatter with the computed value. This makes the file validate as a raw source.
58
- 6. **Cross-reference (optional).** If a `project` slug was provided:
56
+ 5. **Cross-reference (optional).** If a `project` slug was provided:
59
57
  - Check that `projects/{slug}/` exists in the vault.
60
58
  - Append a one-line reference to the project's compound notes:
61
59
  `- [YYYY-MM-DD] capture: [text (first 60 chars)] → raw/transcripts/YYYY-MM-DD-{type}-{slug}.md`
62
60
  - Do NOT create a full work item (that's `proj-work`'s job).
63
- 7. **Update log.md.** Append: `## [YYYY-MM-DD] capture | [type]: [text (first 60 chars)]`
64
- 8. **Confirm to user.** Report what was captured and where. Suggest next steps:
61
+ 6. **Update log.md.** Append: `## [YYYY-MM-DD] capture | [type]: [text (first 60 chars)]`
62
+ 7. **Confirm to user.** Report what was captured and where. Suggest next steps:
65
63
  - If `type: idea` → "Consider ingesting related sources to develop this idea."
66
64
  - If `type: bug` → "Use proj-work to create a bug-fix work item."
67
65
  - If `type: task` → "Use proj-work to track this task through the dev loop."
@@ -69,14 +67,12 @@ Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the r
69
67
 
70
68
  ## Capture file format
71
69
 
72
- Each capture is a standalone raw source file with valid frontmatter:
70
+ Each capture is a standalone file with ad-hoc capture frontmatter:
73
71
 
74
72
  ```yaml
75
73
  ---
76
74
  source_url:
77
75
  ingested: 2026-05-08
78
- ingested_by: manual
79
- sha256: <64-char hex computed over body>
80
76
  kind: idea
81
77
  project: "[[llm-wiki]]"
82
78
  ---
@@ -90,6 +86,8 @@ The `kind` field uses the capture type and must be one of: `idea`, `bug`, `task`
90
86
 
91
87
  The `project` and `kind` fields can be set independently — they do not require `work_item`. The `work_item` field is only used when the raw source is directly tied to a project work item (set by `proj-work`).
92
88
 
89
+ Ad-hoc captures omit `sha256` — they are mutable working notes, not immutable sources. The `sha256` field is reserved for ingested raw sources that require integrity verification.
90
+
93
91
  ## Stop conditions
94
92
 
95
93
  - `skillwiki path` returns NO_VAULT_CONFIGURED.
@@ -108,9 +106,8 @@ The `project` and `kind` fields can be set independently — they do not require
108
106
  When you're not in a Claude session, drop files directly into `raw/transcripts/`:
109
107
 
110
108
  1. Create a `.md` file in `raw/transcripts/` — name it descriptively (e.g., `2026-05-08-idea-fix-template.md`)
111
- 2. Use the vault template at `_Templates/tpl-ad-hoc-capture.md` for frontmatter scaffolding
109
+ 2. Use ad-hoc capture frontmatter: `source_url:`, `ingested:`, `kind:`, and optionally `project:`
112
110
  3. Write your idea/bug/task/note below the frontmatter
113
- 4. Run `skillwiki hash <file>` when you're back in a session to fill in sha256
114
111
 
115
112
  No special format required — the dev-loop QUERY step will discover new files on the next cycle and surface them as claimable work. Mark the type with a heading like `## idea`, `## bug`, `## task`, or just write freeform.
116
113
 
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-archive
3
4
  description: Archive a superseded typed-knowledge page. Moves page to _archive/, removes from index.md, logs the action.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-audit
3
4
  description: Verify per-page that every ^[raw/...] resolves and sources frontmatter matches the body.
4
5
  ---
@@ -0,0 +1,57 @@
1
+ ---
2
+ version: 0.2.1
3
+ name: wiki-canvas
4
+ description: Generate an Obsidian Canvas visualization of the vault graph. Runs skillwiki graph build then skillwiki canvas generate.
5
+ ---
6
+
7
+ # wiki-canvas
8
+
9
+ ## When This Skill Activates
10
+
11
+ - User wants a visual map of their vault structure.
12
+ - User asks to see how pages are connected.
13
+ - After significant ingestion or restructuring, user wants an updated overview.
14
+ - User mentions Obsidian Canvas or visual vault exploration.
15
+
16
+ ## Pre-orientation reads
17
+
18
+ Standard four reads (SCHEMA, index, log, project context if applicable).
19
+
20
+ ## Steps
21
+
22
+ 0. Resolve vault: `skillwiki path`.
23
+ 1. Run `skillwiki graph build <vault>` to produce the adjacency graph at `<vault>/.skillwiki/graph.json`. If graph.json already exists and the vault has not changed, this step can be skipped — but regenerate after any ingestion, reingest, archive, or restructuring to keep the canvas current.
24
+ 2. Run `skillwiki canvas generate <vault>`. This reads graph.json and writes `<vault>/vault-graph.canvas`.
25
+ 3. Present the result to the user: node count, edge count, and the output path.
26
+ 4. Advise the user on opening the canvas:
27
+ - In Obsidian, open the vault folder and click `vault-graph.canvas` in the file explorer, or use the Quick Switcher (`Cmd/Ctrl+O`) and search for "vault-graph".
28
+ - Nodes are arranged in columns by type: **entities** (red), **concepts** (green), **comparisons** (orange), **queries** (cyan), **meta** (purple). Unclassified pages appear in yellow in the comparisons column.
29
+ - Edges represent wikilink connections. Click any node to jump to the source page; drag to rearrange.
30
+ - Zoom and pan with mouse/trackpad to explore large vaults.
31
+ 5. Append one `log.md` entry noting the canvas generation (node/edge counts).
32
+
33
+ ## When to regenerate
34
+
35
+ Regenerate the canvas after any of these events:
36
+ - One or more `wiki-ingest` runs that added new pages.
37
+ - `wiki-reingest` or `wiki-archive` that changed or removed pages.
38
+ - Manual restructuring of the vault directories.
39
+ - After running `wiki-lint` and fixing structural issues.
40
+
41
+ Stale canvases are not harmful, but they will not reflect new or removed pages until regenerated.
42
+
43
+ ## Future: Bases view
44
+
45
+ Obsidian Bases (`.base` files) offer tabular data views of vault content. A Bases generation capability may be added in a future version to complement the graph canvas with filterable, sortable table layouts. For now, the canvas is the primary visualization.
46
+
47
+ ## Stop conditions
48
+
49
+ - `skillwiki graph build` returns a non-zero exit code — investigate before continuing.
50
+ - `graph.json` is missing or invalid — the canvas command will surface the error; direct the user to run `skillwiki graph build` first.
51
+ - User cancels before generation.
52
+
53
+ ## Forbidden
54
+
55
+ - Modifying `vault-graph.canvas` by hand after generation — regenerate it instead.
56
+ - Regenating the canvas without first regenerating graph.json when the vault has changed.
57
+ - Deleting the previous canvas without generating a replacement.
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-crystallize
3
4
  description: Distill the current working session into a typed-knowledge page with provenance.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-ingest
3
4
  description: Convert URLs, files, or pasted text into typed-knowledge pages with raw provenance. Supports single and batch mode.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-init
3
4
  description: Bootstrap a CodeWiki vault — domain-aware SCHEMA.md, index.md, log.md, and ~/.skillwiki/.env binding. Use when starting a fresh vault.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-lint
3
4
  description: Vault health check via the umbrella `skillwiki lint` subcommand. Read-only by default; rotation requires explicit user consent.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-query
3
4
  description: Search the vault and synthesize an answer with E2 4-signal ranking. Optional file to queries/ or comparisons/.
4
5
  ---
@@ -1,4 +1,5 @@
1
1
  ---
2
+ version: 0.2.1
2
3
  name: wiki-reingest
3
4
  description: Detect and act on source drift. Runs skillwiki drift, reviews changes, archives old raw + ingests new content.
4
5
  ---
@@ -0,0 +1,91 @@
1
+ ---
2
+ version: 0.2.1
3
+ name: wiki-sync
4
+ description: Safely sync the vault git repository. Runs skillwiki sync status, then guides push or pull with lint guards and conflict resolution.
5
+ ---
6
+
7
+ # wiki-sync
8
+
9
+ ## When This Skill Activates
10
+
11
+ - User wants to push local vault changes to the remote.
12
+ - User wants to pull remote changes into their local vault.
13
+ - User asks about vault sync status, git state, or multi-device coordination.
14
+ - Periodic maintenance before or after editing sessions.
15
+
16
+ ## Pre-orientation reads
17
+
18
+ Standard four reads.
19
+
20
+ ## Steps
21
+
22
+ 0. Resolve vault: `skillwiki path` (record source for context).
23
+ 1. Run `skillwiki sync status <vault>`. Read the JSON output.
24
+ - Exit code 0: vault is clean (nothing to sync).
25
+ - Exit code 22: warnings — dirty/ahead/behind (needs action).
26
+ 2. Present the current state: `status`, `dirty`, `ahead`, `behind`, `last_commit`.
27
+ 3. Ask the user which operation they want: **push**, **pull**, or **both** (pull then push).
28
+
29
+ ### Push workflow
30
+
31
+ 4. If vault is dirty, ask the user to review uncommitted changes before proceeding.
32
+ 5. Run `skillwiki lint <vault>`. If errors exist, stop and report — do not push lint errors to remote.
33
+ 6. If lint passes (errors = 0), stage and commit:
34
+ - `git -C <vault> add -A`
35
+ - `git -C <vault> commit -m "sync: vault update $(date -u +%Y-%m-%dT%H:%MZ)"`
36
+ 7. Run `git -C <vault> push origin HEAD`. Report result.
37
+ 8. Append one `log.md` entry summarizing: files pushed, lint result, commit hash.
38
+
39
+ ### Pull workflow
40
+
41
+ 9. If vault is dirty, stash first: `git -C <vault> stash push -m "auto-stash before pull $(date -u +%Y-%m-%dT%H:%MZ)"`.
42
+ 10. Run `git -C <vault> pull --rebase origin HEAD`. Report result.
43
+ 11. If a stash was created, pop it: `git -C <vault> stash pop`.
44
+ 12. If conflicts occur during stash pop, identify them and present to the user for resolution (see Conflict Resolution below).
45
+ 13. Run `skillwiki lint <vault>` after pull to verify vault integrity.
46
+ 14. Append one `log.md` entry summarizing: commits pulled, lint result, any conflicts.
47
+
48
+ ### Pull-then-push workflow
49
+
50
+ 15. Execute the pull workflow (steps 9-13) first.
51
+ 16. Then execute the push workflow (steps 4-8).
52
+
53
+ ## Conflict Resolution
54
+
55
+ When merge conflicts are detected:
56
+
57
+ - **Frontmatter conflicts:**
58
+ - For `updated:` fields: always take the newer timestamp (compare both sides, keep the later one).
59
+ - For all other frontmatter fields: present both versions to the user and ask which to keep.
60
+ - **Body conflicts:**
61
+ - Do not auto-resolve body conflicts.
62
+ - Mark unresolved regions with `???` on a line by itself between the conflicting versions, so the user can see both sides and decide.
63
+ - Example:
64
+ ```
65
+ Content from local version
66
+ ???
67
+ Content from remote version
68
+ ```
69
+ - After resolving conflicts, run `skillwiki lint <vault>` to verify before committing.
70
+
71
+ ## Multi-device coordination
72
+
73
+ When the user mentions editing from Obsidian desktop and Claude Code on a server (or any two-device setup):
74
+
75
+ - Recommend pulling before every editing session on each device.
76
+ - Recommend pushing after every editing session on each device.
77
+ - If both devices edit the same page between syncs, conflicts are inevitable — the Conflict Resolution section handles this.
78
+ - Suggest enabling auto-commit in Obsidian (Community Plugins: `obsidian-git`) to reduce dirty-state drift.
79
+
80
+ ## Stop conditions
81
+
82
+ - `skillwiki sync status` reports `not_a_repo` — the vault is not a git repository. Advise the user to initialize one.
83
+ - Lint errors are found before a push — do not push until resolved.
84
+ - `git push` or `git pull` fails with a network error — report and stop.
85
+
86
+ ## Forbidden
87
+
88
+ - Pushing when lint errors exist.
89
+ - Auto-resolving body conflicts without user review.
90
+ - Force-pushing (`git push --force`).
91
+ - Modifying files in `raw/` to resolve conflicts (N9 — archive and re-ingest instead).
@@ -14,6 +14,9 @@
14
14
  ## Queries
15
15
  <!-- queries listed here -->
16
16
 
17
+ ## Summaries
18
+ <!-- summaries listed here -->
19
+
17
20
  ## Projects
18
21
  <!-- registered projects listed here -->
19
22
 
@@ -13,6 +13,8 @@
13
13
  - `work/YYYY-MM-DD-{slug}/` — per-work-item folders containing `spec.md`, `plan.md`, `log.md`.
14
14
  - `compound/` — project-local concrete learnings.
15
15
 
16
- ## Knowledge
16
+ ## Knowledge Pages
17
+
18
+ > Auto-populated: concept and entity pages with `provenance_projects: [[{{slug}}]]` are listed here.
17
19
 
18
20
  Run `skillwiki project-index {{slug}} --apply` to generate `knowledge.md` listing all Layer 2 pages that reference `[[{{slug}}]]` in their provenance_projects.