skillwiki 0.10.113 → 0.10.115

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,5 +1,9 @@
1
1
  # Clip-outbox worker and attended migration
2
2
 
3
+ Agents asked to save a generated image or attachment should follow
4
+ `packages/skills/using-skillwiki/references/save-attachments.md`. This file is
5
+ the operator enablement runbook; it is not an unattended enablement checklist.
6
+
3
7
  The channel remains disabled by default. Installing or updating npm ships the
4
8
  worker and launchd template; it does not change `clip_outbox.enabled`, load a
5
9
  job, import browser settings, or enable wiki-push. `skillwiki doctor` reports
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.113",
3
+ "version": "0.10.115",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "skillwiki": "dist/cli.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.113",
3
+ "version": "0.10.115",
4
4
  "skills": "./",
5
5
  "description": "Project-aware Karpathy-style knowledge base for Claude Code: 22 prompt-only skills (wiki-*, proj-*, using-skillwiki, skillwiki-mcp, skillwiki-connect) backed by the deterministic `skillwiki` CLI.",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.113",
3
+ "version": "0.10.115",
4
4
  "description": "Project-aware Karpathy-style knowledge base for Codex with 22 prompt-only skills backed by the deterministic skillwiki CLI.",
5
5
  "author": {
6
6
  "name": "karlorz",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.113",
3
+ "version": "0.10.115",
4
4
  "description": "Project-aware Karpathy-style knowledge base: 22 prompt-only skills (wiki-*, proj-*, using-skillwiki, skillwiki-mcp, skillwiki-connect) backed by HTTP MCP wiki_capture.",
5
5
  "author": {
6
6
  "name": "karlorz"
@@ -13,6 +13,7 @@ You are a quick-capture agent specializing in recording ad-hoc captures destined
13
13
  - **Idea capture.** Dev-loop spawns you to log an idea surfaced during maintenance.
14
14
  - **Bug logging.** A lint/audit cycle found something worth tracking as a bug.
15
15
  - **Task note.** Quick note that should persist as a raw transcript for future processing.
16
+ - **Not for generated images or binary attachments.** Follow `using-skillwiki/references/save-attachments.md`.
16
17
 
17
18
  **Your Core Responsibilities:**
18
19
  1. Parse text, type, and optional project from the task prompt
@@ -77,3 +78,4 @@ Return:
77
78
  - Creating a full work item (that's proj-work's job)
78
79
  - Writing to Layer 2 or Layer 3 locations (captures are Layer 1)
79
80
  - Writing live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets to the vault
81
+ - Saving image bytes except via `using-skillwiki/references/save-attachments.md`
@@ -14,6 +14,7 @@ You are a vault ingestion specialist converting source material (URLs and readab
14
14
  - **File ingestion.** Local files need to be captured as raw sources and distilled into concept pages.
15
15
  - **Batch ingestion.** Multiple sources to process through deterministic raw capture and shared publication.
16
16
  - **Raw promotion.** A raw/transcripts/ capture is ready for promotion to a typed-knowledge page.
17
+ - **Not for generated-image ingress.** Follow `using-skillwiki/references/save-attachments.md`. Do not `skillwiki ingest` the binary.
17
18
 
18
19
  **Your Core Responsibilities:**
19
20
  1. Guard: run `skillwiki fetch-guard <url>` for URL sources
@@ -73,3 +74,4 @@ Return:
73
74
  - Writing `[[wikilinks]]` to nonexistent pages — verify first
74
75
  - Writing raw ephemeral data to cloud-mounted wiki paths
75
76
  - Writing live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets to the vault
77
+ - Ingesting image bytes or treating a host-local image path as a portable attachment
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillwiki/skills",
3
- "version": "0.10.113",
3
+ "version": "0.10.115",
4
4
  "private": true,
5
5
  "files": [
6
6
  "wiki-*",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: skillwiki-mcp
3
- description: Use when capturing a note, idea, or bug, appending log.md, or using wiki MCP tools. Writes via wiki_capture / wiki_log_append; never local raw/transcripts.
3
+ description: "Use when capturing a note, idea, or bug, appending log.md, or using wiki MCP tools. Never local transcripts. Images: clip-outbox."
4
4
  ---
5
5
 
6
6
  # SkillWiki HTTP MCP
@@ -9,6 +9,8 @@ Use this skill to capture a note, idea, bug, or task into the wiki, append `log.
9
9
 
10
10
  When this MCP namespace is loaded and available, it wins over wiki-add-task local-write steps for capture intents.
11
11
 
12
+ HTTP MCP captures Markdown only. There is no binary-upload MCP tool. Generated images and attachments use `using-skillwiki/references/save-attachments.md`.
13
+
12
14
  SkillWiki captures are HTTP MCP only (`type: http`). Claude/Grok use `SKILLWIKI_MCP_URL` as an optional override and otherwise default to `https://wiki.karldigi.dev/mcp`. Every host requires an operator-provided bearer as `SKILLWIKI_MCP_TOKEN` before MCP load. Do not start a local stdio `skillwiki mcp` / `skillwiki-mcp` server for captures.
13
15
 
14
16
  ## First-run readiness
@@ -1,12 +1,15 @@
1
1
  ---
2
2
  name: using-skillwiki
3
- description: Invoke for vault, wiki, or SkillWiki setup. Maps skills, workflow profiles, and vault routing.
3
+ description: "Invoke for vault or wiki work: skill map, workflow profiles, routing, generated images, screenshots, design mockups, attachments."
4
4
  ---
5
5
  *Note: If executing as a background subagent, skip this skill section.*
6
6
 
7
7
  # using-skillwiki
8
8
  You have skillwiki — a project-aware Karpathy-style knowledge base for agent harnesses.
9
9
 
10
+ ## Images and attachments
11
+ Generated images, screenshots, design mockups, attachments, saving pictures, and Markdown image rendering use `using-skillwiki/references/save-attachments.md`. HTTP MCP has no binary-upload tool; that is not an unsupported-image conclusion.
12
+
10
13
  ## Last Hook Gate (SessionStart)
11
14
 
12
15
  This skill is activated by the plugin during startup and clear lifecycle
@@ -55,6 +58,7 @@ Invoke a skillwiki skill when the user:
55
58
  - Mentions crystallizing a session into a note
56
59
  - Talks about project workspaces, ADRs, or distillation
57
60
  - Wants to quickly capture an idea, bug, task, or note without interrupting their workflow
61
+ - Wants to save a generated image, screenshot, design mockup, attachment, or make a Markdown image portable in the wiki
58
62
  - Needs unknown-agent HTTP MCP connect (CLI + dotenv; no plugin/connector)
59
63
  - Wants to archive or clean up old vault pages
60
64
  - Wants to hard-delete a vault path without snapshot resurrection (`wiki-remove`)
@@ -174,6 +178,7 @@ If the vault has `.WIKI_GIT_FROZEN`:
174
178
  | Close or mutate a work item (`projects/*/work/**`, `knowledge.md`) | Conditional | If live MCP tools include `wiki_workitem_write`, mutate/close via MCP CAS; if absent, capture a close note via MCP `wiki_capture` or STOP. Never local-write. |
175
179
  | Save project workspace file (`architecture/`, `README.md`, `requirements/`, `compound/` — `.md` only) | Conditional | Via `wiki_workitem_write` CAS. Feature-detect: if the tool is absent or the deployed server predates the workspace-family allowlist (`PATH_DENIED`), STOP. Never rclone/wiki-push as a fallback writer. |
176
180
  | Publish typed Layer-2 page (`concepts/`, `queries/`, etc.) | Conditional | If live MCP tools include `wiki_page_publish`, publish via MCP CAS; if absent, STOP. Do not run local `skillwiki page publish`. |
181
+ | Save generated image, screenshot, design mockup, or attachment | Conditional | Existing enabled clip-outbox only. See `using-skillwiki/references/save-attachments.md`. |
177
182
  | `wiki-sync` push/commit | **No** | Git fail-closed. GitHub is sg01 `wiki-snapshot`. |
178
183
  | Read local `~/wiki` | Yes | Mirror reads only |
179
184
  | `/wiki-add-task <text>` | You're in an interactive session on an authoring host | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
@@ -245,7 +250,7 @@ for code changes.
245
250
 
246
251
  ## CLI Backbone
247
252
  All skills are backed by the `skillwiki` CLI — a deterministic tool with no LLM calls. It handles path resolution, config management, validation, health reporting, and linting. Skills invoke it via Bash for the mechanical parts and use the active agent for the creative parts.
248
- Key CLI subcommands: `init`, `health`, `lint`, `config`, `doctor`, `connect`, `path`, `lang`, `install`, `fleet context`, `fleet validate`, `graph build`, `query`, `vectors rebuild`, `vectors status`, `sources pending`, `sources compile`, `sources review`, `sources reviews`, `sources disposition`, `sources dispose`, `archive`, `remove`, `drift`, `dedup`, `compound`, `tag-sync`, `tag reconcile`, `page publish`, `sync status`, `seed`, `stale`, `claim`, `claims audit`, `observe`, `canvas generate`, `mcp`, `mcp-auth`.
253
+ Key CLI subcommands: `init`, `health`, `lint`, `config`, `doctor`, `connect`, `path`, `lang`, `install`, `fleet context`, `fleet validate`, `graph build`, `query`, `vectors rebuild`, `vectors status`, `sources pending`, `sources compile`, `sources review`, `sources reviews`, `sources disposition`, `sources dispose`, `archive`, `remove`, `drift`, `dedup`, `compound`, `tag-sync`, `tag reconcile`, `page publish`, `sync status`, `seed`, `stale`, `claim`, `claims audit`, `observe`, `canvas generate`, `mcp`, `mcp-auth`, `clip-outbox`.
249
254
  Optional read-only MCP (`skillwiki mcp`) exposes pending/compile/review list tools. Do not use MCP for compile claim, publish, or review writes.
250
255
  `skillwiki claim` binds a transcript to a work item only through an exact `raw/transcripts/...` path in `source:` / `sources:` / `closes:`. A `--project` that contradicts the capture's explicit project is rejected. `skillwiki stale --project` uses exact normalized slugs, not substring matching. `skillwiki claims audit` is the read-only integrity report for duplicate, malformed, dangling, cross-project, and unbacked claims; it never rewrites captures or work items.
251
256
 
@@ -17,6 +17,7 @@ Choose the matching installed skill:
17
17
  `proj-decide`, `wiki-gate-plan-mode`, `dev-loop:research`.
18
18
  - Fleet and visualization: `wiki-sync`, `wiki-canvas`.
19
19
  - HTTP MCP capture, append, or progress query: `skillwiki-mcp`.
20
+ - Generated images, screenshots, design mockups, attachments, Markdown image saving: `using-skillwiki/references/save-attachments.md`. MCP has no binary-upload tool; that is not an unsupported-image conclusion.
20
21
 
21
22
  If routing is unclear, invoke `using-skillwiki` rather than guessing.
22
23
 
@@ -0,0 +1,129 @@
1
+ # Save SkillWiki images and attachments
2
+
3
+ Use this runbook when the user asks to save a generated image, screenshot,
4
+ design mockup, attachment, picture, or Markdown image into the wiki.
5
+
6
+ HTTP MCP Markdown capture and binary bundle transport are different supported
7
+ capabilities. The connected MCP advertises no binary-upload tool. That is
8
+ expected. It is not evidence that SkillWiki cannot save images.
9
+
10
+ Do not invent commands. Confirm the live CLI before acting:
11
+
12
+ ```sh
13
+ skillwiki --version
14
+ skillwiki clip-outbox --help
15
+ skillwiki clip-outbox status
16
+ skillwiki doctor
17
+ ```
18
+
19
+ Historical "planned" or "disabled by default" labels do not override the help
20
+ and status of the installed CLI.
21
+
22
+ ## Live clip-outbox commands
23
+
24
+ Quote these from current `skillwiki clip-outbox --help` (v0.10.113 source in
25
+ `packages/cli/src/cli.ts`). Re-read help if a newer CLI disagrees.
26
+
27
+ | Subcommand | Help text | Agent may run? |
28
+ |---|---|---|
29
+ | `status` | show whether the clip-outbox channel is configured | Yes |
30
+ | `watch` | run the enabled dedicated outbox worker using macOS FSEvents | No, unless the user explicitly asks to operate that worker |
31
+ | `mirror-watch` | copy admitted raw/articles and raw/assets from storage into the frozen mirror using MCP SSE | No, unless the user explicitly asks to operate that listener |
32
+ | `install-or-migrate` | refresh the packaged launchd plist without enabling the channel | No, unless the user explicitly asks to operate infrastructure |
33
+
34
+ Do not run `watch`, `mirror-watch`, or `install-or-migrate` unless the user explicitly asks to operate that infrastructure.
35
+
36
+ `status` with the channel off prints `clip channel not configured` and
37
+ `enabled: false`. `status` with the channel on prints
38
+ `clip-outbox enabled root=<outbox> mode=event-watch` plus journal rows.
39
+
40
+ Doctor clip rows on an MCP-only leaf print `MCP-only leaf — check skipped`.
41
+ That host has Markdown MCP only. It is not a binary ingress.
42
+
43
+ Operator enablement lives in `packages/cli/docs/clip-outbox.md`. Do not follow
44
+ that file as an unattended enablement checklist.
45
+
46
+ ## Routing cases
47
+
48
+ | Request | Host facts | Report and do |
49
+ |---|---|---|
50
+ | Generated PNG, screenshot, design mockup, or attachment | MCP has no binary-upload tool; `clip-outbox status` is enabled | Discover this route without a user hint. Stage the bundle in the dedicated outbox root from status. Never `~/wiki`. |
51
+ | Same request | MCP-only leaf; doctor clip rows `MCP-only leaf — check skipped`; no supported binary ingress | Report that exact limitation. Do not rclone, copy credentials, write the frozen wiki, or invent an upload service. |
52
+ | Same request | `clip channel not configured`, or doctor `production clip watcher not loaded and enabled` | Stop at that prerequisite. Do not set `clip_outbox.enabled`, load launchd, or run `install-or-migrate` / `watch` as a fallback. |
53
+ | Journal `notify-pending`, or object receipts without `central-visible` | Transfer in flight | Report **transfer pending**, not complete. |
54
+ | Existing central Markdown uses `/Users/...`, `file://`, or another host-local image path | Note is already in the wiki | That reference is not a portable attachment. |
55
+ | Enabled outbox finishes | Journal `central-visible`; MCP `wiki_read_page` has `s3_verified=true`; mirror SHA-256 matches the original bytes | Report those verified stages. Keep image bytes. Expect a sibling `note.md`. |
56
+ | Reader on another device | Visual check not done | Distinguish ordinary Markdown `![](url)` from Obsidian `![[raw/assets/...]]`. Do not claim rendering. |
57
+
58
+ ## Bundle layout
59
+
60
+ Parse the outbox root from `skillwiki clip-outbox status` (`root=` in
61
+ `humanHint`). The worker admits Markdown under `raw/articles/` and local
62
+ binaries under `raw/assets/` of that dedicated vault. It is not `~/wiki`.
63
+
64
+ Stage:
65
+
66
+ ```
67
+ <root>/raw/assets/<slug>/<file>.png
68
+ <root>/raw/articles/<slug>.md
69
+ ```
70
+
71
+ The article must reference the image with a vault-relative embed or markdown
72
+ image whose target is `raw/assets/...`. Supported image kinds are png, jpeg,
73
+ gif, and webp. Host-absolute paths (`/Users/...`, `/home/...`, `file://`) are
74
+ not portable and the localizer holds them as unsafe.
75
+
76
+ Example article body:
77
+
78
+ ```markdown
79
+ ---
80
+ source_url:
81
+ ingested: YYYY-MM-DD
82
+ kind: note
83
+ ---
84
+ # Title
85
+
86
+ ![[raw/assets/<slug>/<file>.png]]
87
+ ```
88
+
89
+ The worker localizes, seals snapshots outside raw, and preserves existing local
90
+ asset paths. It does not rewrite the input article. Published keys include a
91
+ date plus capture identity. It also uploads sibling
92
+ `raw/assets/<captureId>/note.md` that embeds each asset. Never use a `.txt`
93
+ sidecar as the only index.
94
+
95
+ After central visibility, a maintained work item may cite the vault-relative
96
+ embed through permitted Markdown MCP (`wiki_workitem_write`). That is still
97
+ not a binary MCP upload.
98
+
99
+ Leave completed raw captures immutable. Later results become a new capture or a
100
+ permitted maintained work-item update.
101
+
102
+ ## Progress labels
103
+
104
+ Use these labels. Do not collapse them into "saved".
105
+
106
+ | Label | Evidence |
107
+ |---|---|
108
+ | local archive saved | Bytes written under the dedicated outbox `raw/articles/` and `raw/assets/` |
109
+ | bundle staged | Journal `sealed` (snapshots under the configured state root) |
110
+ | transfer acknowledged | Journal `assets-verified` / `article-verified` (create-only PUT receipts) |
111
+ | centrally visible | Journal `central-visible` after the ready hint accounts for every path |
112
+ | central note verified | MCP `wiki_read_page` on the article and `raw/assets/<captureId>/note.md` with `s3_verified=true` |
113
+ | mirrored binary hash verified | Frozen-mirror file SHA-256 equals the original image. The worker never infers `mirrored`. |
114
+ | reader rendering verified | A person checked display in a reader. Ordinary Markdown needs a resolvable URL; `![[raw/assets/...]]` needs a compatible resolver. |
115
+
116
+ `notify-pending` means the ready hint is not yet adopted. A queued HTTP 202 is
117
+ not central visibility.
118
+
119
+ ## Authority boundary
120
+
121
+ Markdown writes stay on permitted MCP tools (`wiki_capture`,
122
+ `wiki_log_append`, `wiki_workitem_write`, `wiki_page_publish`).
123
+
124
+ Binary saving uses only an existing enabled clip-outbox ingress. Never write
125
+ binaries into the frozen wiki, never `rclone` / wiki-push as a writer, never
126
+ copy clip credentials, and never stand up another upload service.
127
+
128
+ If the route is missing, disabled, or unauthorized, report that limitation and
129
+ stop.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wiki-add-task
3
- description: Capture ad-hoc ideas, bugs, tasks, or notes into the vault (HTTP MCP wiki_capture on leaf hosts; local raw/transcripts/ on authoring hosts).
3
+ description: "Capture ideas, bugs, tasks, notes (MCP wiki_capture on leaf; authoring-host raw/transcripts). Images: clip-outbox."
4
4
  ---
5
5
  # wiki-add-task
6
6
  Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Destination of captures remains vault `raw/transcripts/`. Entry points depend on host role and environment:
@@ -11,7 +11,7 @@ Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Destination of capt
11
11
  | Filesystem drop | Hermes Agent compact mode on an authoring host | Fallback — create `.md` in `raw/transcripts/`, dev-loop discovers it |
12
12
  | Filesystem drop | Not in a Claude session (Obsidian, editor, sync) on an authoring host | Fallback — create a new `.md` file in `raw/transcripts/` using vault template; dev-loop discovers it on next cycle |
13
13
  | Dev-loop discovery | Automatic, next cycle (authoring-host / leftover-transition only) | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
14
- **Path Rule:** Destination of captures is vault `raw/transcripts/` (Layer 1). Frozen-leaf hosts capture via MCP `wiki_capture` (server writes `raw/transcripts/` remotely); local file writes only occur on authoring hosts. Never capture under `projects/{slug}/raw/` — that violates SCHEMA.md Layer 1 immutability. Text captures stay in `raw/transcripts/`. If the capture includes images or other binaries, store those files under `raw/assets/` with a sibling Markdown note that embeds them; never use a .txt sidecar (such as `README.txt`) as the only index; Obsidian opens Markdown notes.
14
+ **Path Rule:** Destination of captures is vault `raw/transcripts/` (Layer 1). Frozen-leaf hosts capture via MCP `wiki_capture` (server writes `raw/transcripts/` remotely); local file writes only occur on authoring hosts. Never capture under `projects/{slug}/raw/` — that violates SCHEMA.md Layer 1 immutability. Text captures stay in `raw/transcripts/`. Generated images and other binaries are not `wiki_capture` content and are not a local write into the frozen wiki. Follow `using-skillwiki/references/save-attachments.md`.
15
15
  ### Exception: Explicit project task requests
16
16
  When the user explicitly says "raise task to project X", "add a task for X", "create a feature request for X", or uses a directive structure like "raise task to {project} {description}", the intent is a **work item**, not a capture:
17
17
  | User wording | Action | Target |
@@ -26,6 +26,7 @@ This is NOT a violation of the rule below — explicit project task requests are
26
26
  - User provides a short text description and optionally a type tag.
27
27
  - **Precedence:** If SkillWiki MCP tools are available (`wiki_capture`), **skillwiki-mcp / wiki_capture wins**. Do not race to local writes. The local-write path in wiki-add-task is only when MCP is absent AND the host is an authoring host (not a frozen leaf).
28
28
  - **Do NOT activate** when the user says "raise task to project X" or "add work item to project X" — escalate to `proj-work` instead.
29
+ - **Do NOT activate as the binary writer** for generated images, screenshots, design mockups, or attachments. Follow `using-skillwiki/references/save-attachments.md`.
29
30
  ## Output language
30
31
  Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the resolved language. Frontmatter keys, file names, and structural markers stay English.
31
32
  ## Steps
@@ -120,6 +121,7 @@ Ad-hoc captures may omit `sha256`; omission does not grant mutation authority. O
120
121
  - Writing to any Layer 2 or Layer 3 location. Captures are Layer 1 (raw).
121
122
  - Writing live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets to the vault.
122
123
  - Indexing `raw/assets/` binaries with only a `.txt` sidecar.
124
+ - Saving image bytes except via `using-skillwiki/references/save-attachments.md`.
123
125
  ## Filesystem drop (offline capture — authoring hosts only)
124
126
  When you're not in a Claude session on an authoring host, drop files directly into `raw/transcripts/`:
125
127
  1. Create a `.md` file in `raw/transcripts/` — name it descriptively (e.g., `2026-05-08-idea-fix-template.md`)
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  name: wiki-ingest
3
- description: Convert URLs, files, or pasted text into typed-knowledge pages with raw provenance. Supports single and batch mode.
3
+ description: "Convert URLs, files, or pasted text into typed pages with provenance. Images: clip-outbox, not binary ingest."
4
4
  ---
5
5
  # wiki-ingest
6
6
  ## When This Skill Activates
7
7
  - User shares a URL, paste, or local file to capture in the vault.
8
8
  - The output target is `entities/`, `concepts/`, `comparisons/`, or `queries/`.
9
9
  - A vault is resolvable (see step 0).
10
+ - Generated images and attachments use `using-skillwiki/references/save-attachments.md`, not `skillwiki ingest` of the binary.
10
11
  ## Output language
11
12
  Run `skillwiki lang` at the start. Generate page-body prose, narrative sections, and `--human` summaries in the resolved language. Frontmatter keys, file names, schema headers, index/log structural lines, citation markers, and wikilink slugs MUST stay English.
12
13
  ## Pre-orientation reads (mandatory before any write)
@@ -113,6 +114,7 @@ Raw ephemeral data (market feeds, logs, transient JSON) must be written to the *
113
114
  - Writing host-local absolute paths as canonical durable source references (see `using-skillwiki` → Portable Source References).
114
115
  - Writing `[[wikilinks]]` to pages that don't exist in the vault. Before linking, verify the target exists: check `index.md` or `ls` the target directory. If the target doesn't exist yet, use plain text instead of a wikilink.
115
116
  - Indexing `raw/assets/` binaries with only a `.txt` sidecar. Write a sibling Markdown note that embeds each file with `![[ ]]`.
117
+ - Ingesting image bytes or treating a host-local image path as a portable attachment. Follow `using-skillwiki/references/save-attachments.md`.
116
118
  ## Batch Mode
117
119
  When the user provides multiple sources (a directory of files, a list of URLs, or a multi-document input):
118
120
  1. **Loop per source.** Execute steps 1–8 for each source individually, using one `skillwiki ingest` command per source.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: skillwiki-mcp
3
- description: Use when capturing a note, idea, or bug, appending log.md, or using wiki MCP tools. Writes via wiki_capture / wiki_log_append; never local raw/transcripts.
3
+ description: "Use when capturing a note, idea, or bug, appending log.md, or using wiki MCP tools. Never local transcripts. Images: clip-outbox."
4
4
  ---
5
5
 
6
6
  # SkillWiki HTTP MCP
@@ -9,6 +9,8 @@ Use this skill to capture a note, idea, bug, or task into the wiki, append `log.
9
9
 
10
10
  When this MCP namespace is loaded and available, it wins over wiki-add-task local-write steps for capture intents.
11
11
 
12
+ HTTP MCP captures Markdown only. There is no binary-upload MCP tool. Generated images and attachments use `using-skillwiki/references/save-attachments.md`.
13
+
12
14
  SkillWiki captures are HTTP MCP only (`type: http`). Claude/Grok use `SKILLWIKI_MCP_URL` as an optional override and otherwise default to `https://wiki.karldigi.dev/mcp`. Every host requires an operator-provided bearer as `SKILLWIKI_MCP_TOKEN` before MCP load. Do not start a local stdio `skillwiki mcp` / `skillwiki-mcp` server for captures.
13
15
 
14
16
  ## First-run readiness
@@ -1,12 +1,15 @@
1
1
  ---
2
2
  name: using-skillwiki
3
- description: Invoke for vault, wiki, or SkillWiki setup. Maps skills, workflow profiles, and vault routing.
3
+ description: "Invoke for vault or wiki work: skill map, workflow profiles, routing, generated images, screenshots, design mockups, attachments."
4
4
  ---
5
5
  *Note: If executing as a background subagent, skip this skill section.*
6
6
 
7
7
  # using-skillwiki
8
8
  You have skillwiki — a project-aware Karpathy-style knowledge base for agent harnesses.
9
9
 
10
+ ## Images and attachments
11
+ Generated images, screenshots, design mockups, attachments, saving pictures, and Markdown image rendering use `using-skillwiki/references/save-attachments.md`. HTTP MCP has no binary-upload tool; that is not an unsupported-image conclusion.
12
+
10
13
  ## Last Hook Gate (SessionStart)
11
14
 
12
15
  This skill is activated by the plugin during startup and clear lifecycle
@@ -55,6 +58,7 @@ Invoke a skillwiki skill when the user:
55
58
  - Mentions crystallizing a session into a note
56
59
  - Talks about project workspaces, ADRs, or distillation
57
60
  - Wants to quickly capture an idea, bug, task, or note without interrupting their workflow
61
+ - Wants to save a generated image, screenshot, design mockup, attachment, or make a Markdown image portable in the wiki
58
62
  - Needs unknown-agent HTTP MCP connect (CLI + dotenv; no plugin/connector)
59
63
  - Wants to archive or clean up old vault pages
60
64
  - Wants to hard-delete a vault path without snapshot resurrection (`wiki-remove`)
@@ -174,6 +178,7 @@ If the vault has `.WIKI_GIT_FROZEN`:
174
178
  | Close or mutate a work item (`projects/*/work/**`, `knowledge.md`) | Conditional | If live MCP tools include `wiki_workitem_write`, mutate/close via MCP CAS; if absent, capture a close note via MCP `wiki_capture` or STOP. Never local-write. |
175
179
  | Save project workspace file (`architecture/`, `README.md`, `requirements/`, `compound/` — `.md` only) | Conditional | Via `wiki_workitem_write` CAS. Feature-detect: if the tool is absent or the deployed server predates the workspace-family allowlist (`PATH_DENIED`), STOP. Never rclone/wiki-push as a fallback writer. |
176
180
  | Publish typed Layer-2 page (`concepts/`, `queries/`, etc.) | Conditional | If live MCP tools include `wiki_page_publish`, publish via MCP CAS; if absent, STOP. Do not run local `skillwiki page publish`. |
181
+ | Save generated image, screenshot, design mockup, or attachment | Conditional | Existing enabled clip-outbox only. See `using-skillwiki/references/save-attachments.md`. |
177
182
  | `wiki-sync` push/commit | **No** | Git fail-closed. GitHub is sg01 `wiki-snapshot`. |
178
183
  | Read local `~/wiki` | Yes | Mirror reads only |
179
184
  | `/wiki-add-task <text>` | You're in an interactive session on an authoring host | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
@@ -245,7 +250,7 @@ for code changes.
245
250
 
246
251
  ## CLI Backbone
247
252
  All skills are backed by the `skillwiki` CLI — a deterministic tool with no LLM calls. It handles path resolution, config management, validation, health reporting, and linting. Skills invoke it via Bash for the mechanical parts and use the active agent for the creative parts.
248
- Key CLI subcommands: `init`, `health`, `lint`, `config`, `doctor`, `connect`, `path`, `lang`, `install`, `fleet context`, `fleet validate`, `graph build`, `query`, `vectors rebuild`, `vectors status`, `sources pending`, `sources compile`, `sources review`, `sources reviews`, `sources disposition`, `sources dispose`, `archive`, `remove`, `drift`, `dedup`, `compound`, `tag-sync`, `tag reconcile`, `page publish`, `sync status`, `seed`, `stale`, `claim`, `claims audit`, `observe`, `canvas generate`, `mcp`, `mcp-auth`.
253
+ Key CLI subcommands: `init`, `health`, `lint`, `config`, `doctor`, `connect`, `path`, `lang`, `install`, `fleet context`, `fleet validate`, `graph build`, `query`, `vectors rebuild`, `vectors status`, `sources pending`, `sources compile`, `sources review`, `sources reviews`, `sources disposition`, `sources dispose`, `archive`, `remove`, `drift`, `dedup`, `compound`, `tag-sync`, `tag reconcile`, `page publish`, `sync status`, `seed`, `stale`, `claim`, `claims audit`, `observe`, `canvas generate`, `mcp`, `mcp-auth`, `clip-outbox`.
249
254
  Optional read-only MCP (`skillwiki mcp`) exposes pending/compile/review list tools. Do not use MCP for compile claim, publish, or review writes.
250
255
  `skillwiki claim` binds a transcript to a work item only through an exact `raw/transcripts/...` path in `source:` / `sources:` / `closes:`. A `--project` that contradicts the capture's explicit project is rejected. `skillwiki stale --project` uses exact normalized slugs, not substring matching. `skillwiki claims audit` is the read-only integrity report for duplicate, malformed, dangling, cross-project, and unbacked claims; it never rewrites captures or work items.
251
256
 
@@ -17,6 +17,7 @@ Choose the matching installed skill:
17
17
  `proj-decide`, `wiki-gate-plan-mode`, `dev-loop:research`.
18
18
  - Fleet and visualization: `wiki-sync`, `wiki-canvas`.
19
19
  - HTTP MCP capture, append, or progress query: `skillwiki-mcp`.
20
+ - Generated images, screenshots, design mockups, attachments, Markdown image saving: `using-skillwiki/references/save-attachments.md`. MCP has no binary-upload tool; that is not an unsupported-image conclusion.
20
21
 
21
22
  If routing is unclear, invoke `using-skillwiki` rather than guessing.
22
23
 
@@ -0,0 +1,129 @@
1
+ # Save SkillWiki images and attachments
2
+
3
+ Use this runbook when the user asks to save a generated image, screenshot,
4
+ design mockup, attachment, picture, or Markdown image into the wiki.
5
+
6
+ HTTP MCP Markdown capture and binary bundle transport are different supported
7
+ capabilities. The connected MCP advertises no binary-upload tool. That is
8
+ expected. It is not evidence that SkillWiki cannot save images.
9
+
10
+ Do not invent commands. Confirm the live CLI before acting:
11
+
12
+ ```sh
13
+ skillwiki --version
14
+ skillwiki clip-outbox --help
15
+ skillwiki clip-outbox status
16
+ skillwiki doctor
17
+ ```
18
+
19
+ Historical "planned" or "disabled by default" labels do not override the help
20
+ and status of the installed CLI.
21
+
22
+ ## Live clip-outbox commands
23
+
24
+ Quote these from current `skillwiki clip-outbox --help` (v0.10.113 source in
25
+ `packages/cli/src/cli.ts`). Re-read help if a newer CLI disagrees.
26
+
27
+ | Subcommand | Help text | Agent may run? |
28
+ |---|---|---|
29
+ | `status` | show whether the clip-outbox channel is configured | Yes |
30
+ | `watch` | run the enabled dedicated outbox worker using macOS FSEvents | No, unless the user explicitly asks to operate that worker |
31
+ | `mirror-watch` | copy admitted raw/articles and raw/assets from storage into the frozen mirror using MCP SSE | No, unless the user explicitly asks to operate that listener |
32
+ | `install-or-migrate` | refresh the packaged launchd plist without enabling the channel | No, unless the user explicitly asks to operate infrastructure |
33
+
34
+ Do not run `watch`, `mirror-watch`, or `install-or-migrate` unless the user explicitly asks to operate that infrastructure.
35
+
36
+ `status` with the channel off prints `clip channel not configured` and
37
+ `enabled: false`. `status` with the channel on prints
38
+ `clip-outbox enabled root=<outbox> mode=event-watch` plus journal rows.
39
+
40
+ Doctor clip rows on an MCP-only leaf print `MCP-only leaf — check skipped`.
41
+ That host has Markdown MCP only. It is not a binary ingress.
42
+
43
+ Operator enablement lives in `packages/cli/docs/clip-outbox.md`. Do not follow
44
+ that file as an unattended enablement checklist.
45
+
46
+ ## Routing cases
47
+
48
+ | Request | Host facts | Report and do |
49
+ |---|---|---|
50
+ | Generated PNG, screenshot, design mockup, or attachment | MCP has no binary-upload tool; `clip-outbox status` is enabled | Discover this route without a user hint. Stage the bundle in the dedicated outbox root from status. Never `~/wiki`. |
51
+ | Same request | MCP-only leaf; doctor clip rows `MCP-only leaf — check skipped`; no supported binary ingress | Report that exact limitation. Do not rclone, copy credentials, write the frozen wiki, or invent an upload service. |
52
+ | Same request | `clip channel not configured`, or doctor `production clip watcher not loaded and enabled` | Stop at that prerequisite. Do not set `clip_outbox.enabled`, load launchd, or run `install-or-migrate` / `watch` as a fallback. |
53
+ | Journal `notify-pending`, or object receipts without `central-visible` | Transfer in flight | Report **transfer pending**, not complete. |
54
+ | Existing central Markdown uses `/Users/...`, `file://`, or another host-local image path | Note is already in the wiki | That reference is not a portable attachment. |
55
+ | Enabled outbox finishes | Journal `central-visible`; MCP `wiki_read_page` has `s3_verified=true`; mirror SHA-256 matches the original bytes | Report those verified stages. Keep image bytes. Expect a sibling `note.md`. |
56
+ | Reader on another device | Visual check not done | Distinguish ordinary Markdown `![](url)` from Obsidian `![[raw/assets/...]]`. Do not claim rendering. |
57
+
58
+ ## Bundle layout
59
+
60
+ Parse the outbox root from `skillwiki clip-outbox status` (`root=` in
61
+ `humanHint`). The worker admits Markdown under `raw/articles/` and local
62
+ binaries under `raw/assets/` of that dedicated vault. It is not `~/wiki`.
63
+
64
+ Stage:
65
+
66
+ ```
67
+ <root>/raw/assets/<slug>/<file>.png
68
+ <root>/raw/articles/<slug>.md
69
+ ```
70
+
71
+ The article must reference the image with a vault-relative embed or markdown
72
+ image whose target is `raw/assets/...`. Supported image kinds are png, jpeg,
73
+ gif, and webp. Host-absolute paths (`/Users/...`, `/home/...`, `file://`) are
74
+ not portable and the localizer holds them as unsafe.
75
+
76
+ Example article body:
77
+
78
+ ```markdown
79
+ ---
80
+ source_url:
81
+ ingested: YYYY-MM-DD
82
+ kind: note
83
+ ---
84
+ # Title
85
+
86
+ ![[raw/assets/<slug>/<file>.png]]
87
+ ```
88
+
89
+ The worker localizes, seals snapshots outside raw, and preserves existing local
90
+ asset paths. It does not rewrite the input article. Published keys include a
91
+ date plus capture identity. It also uploads sibling
92
+ `raw/assets/<captureId>/note.md` that embeds each asset. Never use a `.txt`
93
+ sidecar as the only index.
94
+
95
+ After central visibility, a maintained work item may cite the vault-relative
96
+ embed through permitted Markdown MCP (`wiki_workitem_write`). That is still
97
+ not a binary MCP upload.
98
+
99
+ Leave completed raw captures immutable. Later results become a new capture or a
100
+ permitted maintained work-item update.
101
+
102
+ ## Progress labels
103
+
104
+ Use these labels. Do not collapse them into "saved".
105
+
106
+ | Label | Evidence |
107
+ |---|---|
108
+ | local archive saved | Bytes written under the dedicated outbox `raw/articles/` and `raw/assets/` |
109
+ | bundle staged | Journal `sealed` (snapshots under the configured state root) |
110
+ | transfer acknowledged | Journal `assets-verified` / `article-verified` (create-only PUT receipts) |
111
+ | centrally visible | Journal `central-visible` after the ready hint accounts for every path |
112
+ | central note verified | MCP `wiki_read_page` on the article and `raw/assets/<captureId>/note.md` with `s3_verified=true` |
113
+ | mirrored binary hash verified | Frozen-mirror file SHA-256 equals the original image. The worker never infers `mirrored`. |
114
+ | reader rendering verified | A person checked display in a reader. Ordinary Markdown needs a resolvable URL; `![[raw/assets/...]]` needs a compatible resolver. |
115
+
116
+ `notify-pending` means the ready hint is not yet adopted. A queued HTTP 202 is
117
+ not central visibility.
118
+
119
+ ## Authority boundary
120
+
121
+ Markdown writes stay on permitted MCP tools (`wiki_capture`,
122
+ `wiki_log_append`, `wiki_workitem_write`, `wiki_page_publish`).
123
+
124
+ Binary saving uses only an existing enabled clip-outbox ingress. Never write
125
+ binaries into the frozen wiki, never `rclone` / wiki-push as a writer, never
126
+ copy clip credentials, and never stand up another upload service.
127
+
128
+ If the route is missing, disabled, or unauthorized, report that limitation and
129
+ stop.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: wiki-add-task
3
- description: Capture ad-hoc ideas, bugs, tasks, or notes into the vault (HTTP MCP wiki_capture on leaf hosts; local raw/transcripts/ on authoring hosts).
3
+ description: "Capture ideas, bugs, tasks, notes (MCP wiki_capture on leaf; authoring-host raw/transcripts). Images: clip-outbox."
4
4
  ---
5
5
  # wiki-add-task
6
6
  Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Destination of captures remains vault `raw/transcripts/`. Entry points depend on host role and environment:
@@ -11,7 +11,7 @@ Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Destination of capt
11
11
  | Filesystem drop | Hermes Agent compact mode on an authoring host | Fallback — create `.md` in `raw/transcripts/`, dev-loop discovers it |
12
12
  | Filesystem drop | Not in a Claude session (Obsidian, editor, sync) on an authoring host | Fallback — create a new `.md` file in `raw/transcripts/` using vault template; dev-loop discovers it on next cycle |
13
13
  | Dev-loop discovery | Automatic, next cycle (authoring-host / leftover-transition only) | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
14
- **Path Rule:** Destination of captures is vault `raw/transcripts/` (Layer 1). Frozen-leaf hosts capture via MCP `wiki_capture` (server writes `raw/transcripts/` remotely); local file writes only occur on authoring hosts. Never capture under `projects/{slug}/raw/` — that violates SCHEMA.md Layer 1 immutability. Text captures stay in `raw/transcripts/`. If the capture includes images or other binaries, store those files under `raw/assets/` with a sibling Markdown note that embeds them; never use a .txt sidecar (such as `README.txt`) as the only index; Obsidian opens Markdown notes.
14
+ **Path Rule:** Destination of captures is vault `raw/transcripts/` (Layer 1). Frozen-leaf hosts capture via MCP `wiki_capture` (server writes `raw/transcripts/` remotely); local file writes only occur on authoring hosts. Never capture under `projects/{slug}/raw/` — that violates SCHEMA.md Layer 1 immutability. Text captures stay in `raw/transcripts/`. Generated images and other binaries are not `wiki_capture` content and are not a local write into the frozen wiki. Follow `using-skillwiki/references/save-attachments.md`.
15
15
  ### Exception: Explicit project task requests
16
16
  When the user explicitly says "raise task to project X", "add a task for X", "create a feature request for X", or uses a directive structure like "raise task to {project} {description}", the intent is a **work item**, not a capture:
17
17
  | User wording | Action | Target |
@@ -26,6 +26,7 @@ This is NOT a violation of the rule below — explicit project task requests are
26
26
  - User provides a short text description and optionally a type tag.
27
27
  - **Precedence:** If SkillWiki MCP tools are available (`wiki_capture`), **skillwiki-mcp / wiki_capture wins**. Do not race to local writes. The local-write path in wiki-add-task is only when MCP is absent AND the host is an authoring host (not a frozen leaf).
28
28
  - **Do NOT activate** when the user says "raise task to project X" or "add work item to project X" — escalate to `proj-work` instead.
29
+ - **Do NOT activate as the binary writer** for generated images, screenshots, design mockups, or attachments. Follow `using-skillwiki/references/save-attachments.md`.
29
30
  ## Output language
30
31
  Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the resolved language. Frontmatter keys, file names, and structural markers stay English.
31
32
  ## Steps
@@ -120,6 +121,7 @@ Ad-hoc captures may omit `sha256`; omission does not grant mutation authority. O
120
121
  - Writing to any Layer 2 or Layer 3 location. Captures are Layer 1 (raw).
121
122
  - Writing live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets to the vault.
122
123
  - Indexing `raw/assets/` binaries with only a `.txt` sidecar.
124
+ - Saving image bytes except via `using-skillwiki/references/save-attachments.md`.
123
125
  ## Filesystem drop (offline capture — authoring hosts only)
124
126
  When you're not in a Claude session on an authoring host, drop files directly into `raw/transcripts/`:
125
127
  1. Create a `.md` file in `raw/transcripts/` — name it descriptively (e.g., `2026-05-08-idea-fix-template.md`)
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  name: wiki-ingest
3
- description: Convert URLs, files, or pasted text into typed-knowledge pages with raw provenance. Supports single and batch mode.
3
+ description: "Convert URLs, files, or pasted text into typed pages with provenance. Images: clip-outbox, not binary ingest."
4
4
  ---
5
5
  # wiki-ingest
6
6
  ## When This Skill Activates
7
7
  - User shares a URL, paste, or local file to capture in the vault.
8
8
  - The output target is `entities/`, `concepts/`, `comparisons/`, or `queries/`.
9
9
  - A vault is resolvable (see step 0).
10
+ - Generated images and attachments use `using-skillwiki/references/save-attachments.md`, not `skillwiki ingest` of the binary.
10
11
  ## Output language
11
12
  Run `skillwiki lang` at the start. Generate page-body prose, narrative sections, and `--human` summaries in the resolved language. Frontmatter keys, file names, schema headers, index/log structural lines, citation markers, and wikilink slugs MUST stay English.
12
13
  ## Pre-orientation reads (mandatory before any write)
@@ -113,6 +114,7 @@ Raw ephemeral data (market feeds, logs, transient JSON) must be written to the *
113
114
  - Writing host-local absolute paths as canonical durable source references (see `using-skillwiki` → Portable Source References).
114
115
  - Writing `[[wikilinks]]` to pages that don't exist in the vault. Before linking, verify the target exists: check `index.md` or `ls` the target directory. If the target doesn't exist yet, use plain text instead of a wikilink.
115
116
  - Indexing `raw/assets/` binaries with only a `.txt` sidecar. Write a sibling Markdown note that embeds each file with `![[ ]]`.
117
+ - Ingesting image bytes or treating a host-local image path as a portable attachment. Follow `using-skillwiki/references/save-attachments.md`.
116
118
  ## Batch Mode
117
119
  When the user provides multiple sources (a directory of files, a list of URLs, or a multi-document input):
118
120
  1. **Loop per source.** Execute steps 1–8 for each source individually, using one `skillwiki ingest` command per source.