skillwiki 0.10.70 → 0.10.72

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.70",
3
+ "version": "0.10.72",
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.70",
3
+ "version": "0.10.72",
4
4
  "skills": "./",
5
5
  "description": "Project-aware Karpathy-style knowledge base for Claude Code: 21 prompt-only skills (wiki-*, proj-*, using-skillwiki, skillwiki-mcp) backed by the deterministic `skillwiki` CLI.",
6
6
  "author": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skillwiki",
3
- "version": "0.10.70",
3
+ "version": "0.10.72",
4
4
  "description": "Project-aware Karpathy-style knowledge base for Codex with 21 prompt-only skills backed by the deterministic skillwiki CLI.",
5
5
  "author": {
6
6
  "name": "karlorz",
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "skillwiki",
3
+ "version": "0.10.72",
4
+ "description": "Project-aware Karpathy-style knowledge base: 21 prompt-only skills (wiki-*, proj-*, using-skillwiki, skillwiki-mcp) backed by HTTP MCP wiki_capture.",
5
+ "author": {
6
+ "name": "karlorz"
7
+ },
8
+ "repository": "https://github.com/karlorz/llm-wiki",
9
+ "license": "MIT",
10
+ "keywords": [
11
+ "knowledge-base",
12
+ "wiki",
13
+ "mcp",
14
+ "skillwiki"
15
+ ],
16
+ "variables": {
17
+ "type": "object",
18
+ "properties": {
19
+ "SKILLWIKI_MCP_TOKEN": {
20
+ "type": "string",
21
+ "title": "SkillWiki HTTP MCP bearer",
22
+ "description": "Bearer for https://wiki.karldigi.dev/mcp. Same SKILLWIKI_MCP_TOKEN used by Grok CLI. Never put the value in plugin files."
23
+ }
24
+ },
25
+ "required": [
26
+ "SKILLWIKI_MCP_TOKEN"
27
+ ]
28
+ },
29
+ "skills": "./",
30
+ "mcpServers": "./mcp.json"
31
+ }
@@ -6,7 +6,7 @@ color: green
6
6
  tools: ["Read", "Write", "Bash", "Grep", "Glob"]
7
7
  ---
8
8
 
9
- You are a quick-capture agent specializing in writing ad-hoc captures to `raw/transcripts/`. You parse a description into a typed capture file with proper frontmatter and descriptive filename. You operate autonomously — the capture text and optional type/project are in your task prompt.
9
+ You are a quick-capture agent specializing in recording ad-hoc captures destined for vault `raw/transcripts/`. On frozen-leaf hosts, capture goes through HTTP MCP `wiki_capture`; do not write local files or append local `log.md`. Local file writes and direct `log.md` appends are restricted to authoring hosts. You operate autonomously — the capture text and optional type/project are in your task prompt.
10
10
 
11
11
  ## When to invoke
12
12
 
@@ -16,48 +16,61 @@ You are a quick-capture agent specializing in writing ad-hoc captures to `raw/tr
16
16
 
17
17
  **Your Core Responsibilities:**
18
18
  1. Parse text, type, and optional project from the task prompt
19
- 2. Derive a filename slug from the first ~6 words
20
- 3. Write the capture file to `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md`
21
- 4. Optionally cross-reference to a project
22
- 5. Append to log.md
19
+ 2. On leaf/frozen hosts: call MCP `wiki_capture(kind, project, title, content)`; never write local captures or append local `log.md`
20
+ 3. On authoring hosts (only when MCP is unavailable and host is authoring-capable): derive slug, write local capture file under `raw/transcripts/`, cross-reference, and append to log.md
23
21
 
24
22
  **Execution Process:**
25
23
 
26
- 1. **Resolve vault.** Run `skillwiki path`. If NO_VAULT_CONFIGURED, report failure and STOP.
24
+ 1. **Resolve host and environment.**
25
+ - Run `skillwiki path`. If NO_VAULT_CONFIGURED, report failure and STOP.
26
+ - Check if SkillWiki MCP namespace (`wiki_capture`) is available or if running on a leaf host.
27
+ - On a leaf host, capture MUST go through MCP `wiki_capture`. If MCP is missing, unauthenticated (401), or reports `missing_prereq`, STOP and report; never fall back to local `raw/transcripts/` or `log.md` writes.
28
+ - Local file writes are only permitted on authoring hosts when MCP is absent.
27
29
  2. **Parse arguments.** From the task prompt:
28
30
  - `text` — the idea/bug/task/note content (required)
29
31
  - `type` — `idea`, `bug`, `task`, or `note` (default: `idea`)
30
32
  - `project` — optional project slug
31
- 3. **Sensitive content guard.** Before writing a capture, scan the text for live credentials, access keys, tokens, passwords, cookies, bearer headers, or private keys. Redact before writing. If the source text itself contains a live secret that must be preserved verbatim, STOP instead of filing it.
32
- 4. **Build filename.** Derive slug from first ~6 words of text (lowercased, hyphens, non-alphanumeric stripped). File: `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md`. If exists, add suffix.
33
- 5. **Write frontmatter:**
34
- ```yaml
35
- ---
36
- source_url:
37
- ingested: YYYY-MM-DD
38
- kind: {type}
39
- project: "[[{slug}]]" # omit if no project
40
- ---
41
- ```
42
- `sha256` may be omitted, but the completed capture is still immutable evidence.
43
- 6. **Write body:** `# {type}: {text}` then the text content.
44
- 7. **Cross-reference (optional).** If project slug provided, verify `projects/{slug}/` exists. Append one-line reference to project compound notes.
45
- 8. **Log.** Append to `{vault}/log.md`: `## [YYYY-MM-DD] capture | [type]: [text (first 60 chars)]`.
33
+ 3. **Sensitive content guard.** Before capturing, scan the text for live credentials, access keys, tokens, passwords, cookies, bearer headers, or private keys. Redact before capturing. If the source text itself contains a live secret that must be preserved verbatim, STOP instead of filing it.
34
+ 4. **Capture execution:**
35
+ - **MCP Mode (Leaf hosts / MCP available):**
36
+ - Map `type` → `kind` (`idea`, `bug`, `task`, `note`).
37
+ - Derive title from first ~6 words of `text`.
38
+ - Call MCP `wiki_capture(kind, project, title, content)`.
39
+ - Do not construct a local filename, do not write local frontmatter, and do not write local `log.md`.
40
+ - If a structural log entry is genuinely required, call MCP `wiki_log_append(content)`. Server owns structural log; do not dual-write.
41
+ - **Authoring-Host Fallback (Local writes — Authoring hosts only when MCP absent):**
42
+ - Derive slug from first ~6 words of text (lowercased, hyphens, non-alphanumeric stripped). File: `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md`. If exists, add suffix.
43
+ - Write frontmatter:
44
+ ```yaml
45
+ ---
46
+ source_url:
47
+ ingested: YYYY-MM-DD
48
+ kind: {type}
49
+ project: "[[{slug}]]" # omit if no project
50
+ ---
51
+ ```
52
+ `sha256` may be omitted, but completed capture is immutable evidence.
53
+ - Write body: `# {type}: {text}` then the text content.
54
+ - Cross-reference (optional): If project slug provided and `projects/{slug}/` exists, append one-line reference to project compound notes.
55
+ - Log: Append to `{vault}/log.md`: `## [YYYY-MM-DD] capture | [type]: [text (first 60 chars)]`.
46
56
 
47
57
  **Output Format:**
48
58
  Return:
49
- - Capture file path
50
- - Type and slug
59
+ - Capture target / file path (or MCP capture response path)
60
+ - Type and title / slug
51
61
  - Whether project cross-reference was added
52
62
  - Suggested next step (e.g., "Use proj-work to track this task")
53
63
 
54
64
  **Stop Conditions:**
55
65
  - No text provided
56
- - Target file already exists and slug can't be disambiguated
66
+ - On leaf hosts: MCP namespace missing, unauthenticated (401), or reports `missing_prereq` (STOP and report; do not fall back to local writes)
67
+ - Target file already exists and slug can't be disambiguated (authoring host fallback)
57
68
  - `skillwiki path` returns NO_VAULT_CONFIGURED
58
69
  - Capture text contains unredacted live credentials or other authenticating secrets
59
70
 
60
71
  **Forbidden:**
72
+ - On frozen-leaf hosts: writing local `raw/transcripts/` or `log.md`
73
+ - Inventing curl-to-MCP commands or printing bearer tokens
61
74
  - Creating an `inbox/` directory
62
75
  - Appending to existing capture files
63
76
  - Editing or correcting an existing raw transcript; create a new capture or maintained work-item note
package/skills/mcp.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "mcpServers": {
3
3
  "skillwiki": {
4
4
  "type": "http",
5
- "url": "${SKILLWIKI_MCP_URL:-https://wiki.karldigi.dev/mcp}",
5
+ "url": "https://wiki.karldigi.dev/mcp",
6
6
  "headers": {
7
7
  "Authorization": "Bearer ${SKILLWIKI_MCP_TOKEN}"
8
8
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skillwiki/skills",
3
- "version": "0.10.70",
3
+ "version": "0.10.72",
4
4
  "private": true,
5
5
  "files": [
6
6
  "wiki-*",
@@ -7,11 +7,14 @@ description: Use when capturing a note, idea, or bug into the wiki, appending lo
7
7
 
8
8
  Use this skill to capture a note, idea, bug, or task into the wiki, append `log.md`, or call SkillWiki HTTP MCP tools.
9
9
 
10
+ When this MCP namespace is loaded and available, it wins over wiki-add-task local-write steps for capture intents.
11
+
10
12
  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.
11
13
 
12
14
  ## First-run readiness
13
15
 
14
16
  - Resolve the installed plugin root from `GROK_PLUGIN_ROOT`, falling back to `CLAUDE_PLUGIN_ROOT`, and run `python3 "$PLUGIN_ROOT/scripts/check_readiness.py" --apply --json` before the first SkillWiki MCP call.
17
+ - **Cursor / Grok Bot:** the Cursor-native plugin requires `SKILLWIKI_MCP_TOKEN` under **Plugins → Configure**. It pins `https://wiki.karldigi.dev/mcp`. Grok Bot does not inherit Mac process env or `~/.cursor/mcp.json`. `failed_to_load` with no token box means this package is missing; after this package is installed, Configure is the token field (same pattern as grok-search).
15
18
  - `missing_prereq` means `SKILLWIKI_MCP_TOKEN` is absent from process environment; stop and ask for a bearer. Do not invent a stdio MCP.
16
19
  - `in_sync` means the probe has a usable URL/token decision.
17
20
  - A 401 is an MCP handshake failure, not a readiness-probe status. Report that the token is missing or rejected and stop.
@@ -87,7 +87,7 @@ sha256: # computed by skillwiki hash over body bytes after closing ---
87
87
  ```
88
88
  **Layer 2 — Typed Knowledge:** `entities/`, `concepts/`, `comparisons/`, `queries/`, `meta/`. Agent-owned pages with `^[raw/...]` citation markers at paragraph-end. Global scope — project association via `provenance_projects:` frontmatter, not directory nesting.
89
89
  **Layer 3 — Project Workspaces (`projects/{slug}/`):** Per-project lifecycle directories with `work/` (spec + plan + retro), `compound/` (distilled lessons/patterns), `architecture/` (ADRs), and `history/` (archived specs/plans).
90
- **No `inbox/` directory.** Ad-hoc captures go to `raw/transcripts/` or directly into a project work item via `proj-work`. Do not invent new top-level directories — extend Layer 2 via SCHEMA.md tag taxonomy if needed.
90
+ **No `inbox/` directory.** Ad-hoc captures go to `raw/transcripts/` (destination stays `raw/transcripts/` in the vault; on leaf hosts the writer is the HTTP MCP server, not a local file create) or directly into a project work item via `proj-work`. Do not invent new top-level directories — extend Layer 2 via SCHEMA.md tag taxonomy if needed.
91
91
 
92
92
  ## Sensitive Content Policy
93
93
  Vault content must not contain live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets. This includes development-only and local-only credentials. Redact values before filing using `[REDACTED:<kind>]` or `[REDACTED:<kind>:<fingerprint>]`. If a source contains live secrets, stop and ask for a redacted source or explicit rotation/remediation direction; do not preserve the secret in `raw/`.
@@ -161,8 +161,9 @@ The vault is shared across hosts, so host-local absolute paths are not durable s
161
161
  ### Ad-hoc capture: three entry points
162
162
  | Entry | When | What happens |
163
163
  |-------|------|-------------|
164
- | `/wiki-add-task <text>` | You're in a Claude session | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
165
- | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) | Create a new `.md` file in `raw/transcripts/` — dev-loop discovers it on next cycle; do not edit it after capture |
164
+ | `wiki_capture` | You're on a frozen-leaf host with HTTP MCP | Calls MCP `wiki_capture(kind, project, title, content)`; server writes `raw/transcripts/` remotely |
165
+ | `/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 |
166
+ | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) on an authoring host | Create a new `.md` file in `raw/transcripts/` — dev-loop discovers it on next cycle; do not edit it after capture |
166
167
  | Dev-loop discovery | Automatic, next cycle | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
167
168
 
168
169
  ## Skill Map
@@ -177,7 +178,8 @@ The vault is shared across hosts, so host-local absolute paths are not durable s
177
178
  | `wiki-archive` | Archive typed pages, or attended preserve-move exact raw sources under `raw/archived/` |
178
179
  | `wiki-remove` | Remove maintained pages; exact raw disposal uses the separate attended `sources dispose` flow |
179
180
  | `wiki-reingest` | Detect drift in raw sources (sha256 comparison) and re-ingest updated content |
180
- | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes into `raw/transcripts/` without leaving the current workflow |
181
+ | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes (captures via wiki_capture on leaf hosts; local raw/transcripts/ only on authoring hosts) |
182
+ | `skillwiki-mcp` | HTTP MCP captures (`wiki_capture` / `wiki_log_append`); never local raw/transcripts on leaf hosts |
181
183
  | `wiki-adapter-prd` | Map foreign PRD formats (CodeStable, RFC, AIDE, Hermes) into vault pages |
182
184
  | `proj-init` | Bootstrap a project workspace (README, requirements, architecture) |
183
185
  | `proj-work` | Open or run a work item under a project's work/ directory |
@@ -24,7 +24,8 @@ Invoke a SkillWiki skill when the user: wants vault/wiki/knowledge-base operatio
24
24
  | `wiki-archive` | Archive typed pages or preserve-move raw sources |
25
25
  | `wiki-remove` | Hard-delete vault paths without snapshot resurrection |
26
26
  | `wiki-reingest` | Detect source drift and re-ingest updated content |
27
- | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes |
27
+ | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes (HTTP MCP on leaf hosts; local files on authoring hosts) |
28
+ | `skillwiki-mcp` | HTTP MCP captures (`wiki_capture`, `wiki_log_append`); never local writes on leaf hosts |
28
29
  | `wiki-adapter-prd` | Map foreign PRD formats (CodeStable, RFC, AIDE, Hermes) |
29
30
  | `wiki-sync` | Safely sync vault git repository |
30
31
  | `wiki-canvas` | Generate Obsidian Canvas visualization |
@@ -54,7 +55,7 @@ separate concerns.
54
55
 
55
56
  ## Fail-Closed Boundary
56
57
 
57
- Never write typed pages, `index.md`, or `log.md` directly. Never bare `rm` or `git rm` as a fleet delete (snapshot resurrects from S3). Never auto `npm install -g skillwiki` in headless/goal/satellite sessions. If `skillwiki page publish --help` is unavailable, fail closed.
58
+ Never write typed pages, `index.md`, or `log.md` directly. On leaf hosts, captures use HTTP MCP (`wiki_capture`), never local `raw/transcripts` or `log.md` writes. Never bare `rm` or `git rm` as a fleet delete (snapshot resurrects from S3). Never auto `npm install -g skillwiki` in headless/goal/satellite sessions. If `skillwiki page publish --help` is unavailable, fail closed.
58
59
 
59
60
  ## Sensitive Content
60
61
 
@@ -1,33 +1,58 @@
1
1
  ---
2
2
  name: wiki-add-task
3
- description: Capture ad-hoc ideas, bugs, tasks, or notes into the vault with ad-hoc capture frontmatter and descriptive filenames.
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).
4
4
  ---
5
5
  # wiki-add-task
6
- Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Three entry points depending on where you are:
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:
7
7
  | Entry | When | What happens |
8
8
  |-------|------|-------------|
9
- | `/wiki-add-task <text>` | You're in a Claude Code session (NOT Hermes compact) | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
10
- | Filesystem drop | Hermes Agent compact mode (no slash commands available) | Same as above — create `.md` in `raw/transcripts/`, dev-loop discovers it |
11
- | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) | Create a new `.md` file in `raw/transcripts/` using the vault template — dev-loop discovers it on next cycle |
12
- | Dev-loop discovery | Automatic, next cycle | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
13
- **Path Rule:** Captures ALWAYS go to `$(skillwiki path)/raw/transcripts/` (Layer 1). Never 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.
9
+ | MCP `wiki_capture` | SkillWiki MCP namespace is loaded and ready | Maps to `wiki_capture(kind, project, title, content)`; server writes `raw/transcripts/` remotely |
10
+ | `/wiki-add-task <text>` | Interactive session on an authoring host (MCP absent) | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
11
+ | Filesystem drop | Hermes Agent compact mode on an authoring host | Fallback — create `.md` in `raw/transcripts/`, dev-loop discovers it |
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
+ | 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
15
  ### Exception: Explicit project task requests
15
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:
16
17
  | User wording | Action | Target |
17
18
  |---|---|---|
18
- | "capture this", "note this", "remember this" | Use wiki-add-task (this skill) | `raw/transcripts/` |
19
+ | "capture this", "note this", "remember this" | Leaf: MCP `wiki_capture`; Authoring: wiki-add-task | `raw/transcripts/` (leaf writes via `wiki_capture`, authoring writes local file) |
19
20
  | "raise task to project X", "add task to X project" | Escalate to `proj-work` | `projects/{slug}/work/YYYY-MM-DD-{slug}/task.md` |
20
21
  | "save to wiki" + content | Use `wiki-ingest` | `concepts/`, `entities/`, etc. |
21
- This is NOT a violation of the "ALWAYS" rule below — explicit project task requests are a distinct user intent that bypasses raw capture and goes directly to a Layer 3 work item.
22
+ This is NOT a violation of the rule below — explicit project task requests are a distinct user intent that bypasses raw capture and goes directly to a Layer 3 work item.
22
23
  ## When This Skill Activates
23
24
  - User invokes `/wiki-add-task` with a description.
24
25
  - User says "add task", "capture this", "note this", "remember this", "log this idea", or similar.
25
26
  - User provides a short text description and optionally a type tag.
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).
26
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.
27
29
  ## Output language
28
30
  Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the resolved language. Frontmatter keys, file names, and structural markers stay English.
29
31
  ## Steps
30
- 0. **Resolve vault and language.** Run `skillwiki path` (fail if NO_VAULT_CONFIGURED) and `skillwiki lang`.
32
+ 0. **Resolve environment and host role.** Run `skillwiki path` (fail if NO_VAULT_CONFIGURED) and `skillwiki lang`. Check if SkillWiki MCP namespace (`wiki_capture`) is available or if running on a leaf host.
33
+ - **On frozen-leaf hosts:** Captures MUST go through MCP `wiki_capture`. If MCP is missing or returns 401, STOP and report (see Stop conditions); never fall back to local file writes.
34
+ - **Precedence:** If SkillWiki MCP namespace is loaded and ready, execute via **MCP Mode (Step A)**.
35
+ - **Authoring host local write:** Only when MCP is absent AND running on an authoring host, execute via **Local Write Mode (Step B)**.
36
+
37
+ ### Step A: MCP Mode (Leaf hosts / MCP available)
38
+ 1. **Parse arguments.** Extract from the user's message:
39
+ - `text` — the idea/bug/task/note content (required)
40
+ - `kind` — map user type (`idea`, `bug`, `task`, `note`) to `kind` (default: `idea`)
41
+ - `project` — optional project slug to cross-reference (e.g., `llm-wiki`)
42
+ - `title` — derive from first ~6 words of `text`
43
+ 2. **Sensitive content guard.** Before sending capture, scan the text for live credentials, access keys, tokens, passwords, cookies, bearer headers, or private keys. Redact before writing. If the source text itself contains a live secret that must be preserved verbatim, STOP instead of filing it.
44
+ 3. **Call `wiki_capture`.** Invoke MCP `wiki_capture(kind, project, title, content)`.
45
+ - Do NOT build a local filename.
46
+ - Do NOT write local frontmatter.
47
+ - Do NOT append to local `log.md` on leaf hosts.
48
+ 4. **Structural log (optional).** Call MCP `wiki_log_append` only when a structural log line is genuinely needed. The MCP server owns the structural log; do not dual-write.
49
+ 5. **Confirm to user.** Report the capture confirmation using the path returned by MCP `wiki_capture`. Suggest next steps:
50
+ - If `kind: idea` → "Consider ingesting related sources to develop this idea."
51
+ - If `kind: bug` → "Use proj-work to create a bug-fix work item."
52
+ - If `kind: task` → "Use proj-work to track this task through the dev loop."
53
+ - If `kind: note` → "Will be available for future wiki-query searches."
54
+
55
+ ### Step B: Local Write Mode (Authoring hosts only, when MCP absent)
31
56
  1. **Parse arguments.** Extract from the user's message:
32
57
  - `text` — the idea/bug/task/note content (required)
33
58
  - `type` — one of: `idea`, `bug`, `task`, `note` (default: `idea`)
@@ -81,11 +106,13 @@ The `kind` field uses the capture type and must be one of: `idea`, `bug`, `task`
81
106
  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`).
82
107
  Ad-hoc captures may omit `sha256`; omission does not grant mutation authority. Once created, the transcript's content and frontmatter are immutable. The `sha256` field remains required for ingest pipelines that provide integrity verification.
83
108
  ## Stop conditions
109
+ - On frozen-leaf hosts: MCP namespace missing, unauthenticated (401), or `missing_prereq` (STOP and report; never fallback to local `raw/transcripts/` writes).
84
110
  - `skillwiki path` returns NO_VAULT_CONFIGURED.
85
111
  - No `text` provided (prompt user once, then stop).
86
112
  - Target file already exists (use a different slug or add a suffix).
87
113
  - Capture text contains unredacted live credentials or other authenticating secrets.
88
114
  ## Forbidden
115
+ - On frozen-leaf hosts, writing local `raw/transcripts/` or `log.md`.
89
116
  - Creating an `inbox/` directory. All captures go to `raw/transcripts/`.
90
117
  - Appending to existing capture files — each capture gets its own file.
91
118
  - Editing or correcting an existing raw transcript; create a new capture or maintained work-item note instead.
@@ -93,14 +120,14 @@ Ad-hoc captures may omit `sha256`; omission does not grant mutation authority. O
93
120
  - Writing to any Layer 2 or Layer 3 location. Captures are Layer 1 (raw).
94
121
  - Writing live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets to the vault.
95
122
  - Indexing `raw/assets/` binaries with only a `.txt` sidecar.
96
- ## Filesystem drop (offline capture)
97
- When you're not in a Claude session, drop files directly into `raw/transcripts/`:
123
+ ## Filesystem drop (offline capture — authoring hosts only)
124
+ When you're not in a Claude session on an authoring host, drop files directly into `raw/transcripts/`:
98
125
  1. Create a `.md` file in `raw/transcripts/` — name it descriptively (e.g., `2026-05-08-idea-fix-template.md`)
99
126
  2. Use ad-hoc capture frontmatter: `source_url:`, `ingested:`, `kind:`, and optionally `project:`
100
127
  3. Write your idea/bug/task/note below the frontmatter
101
128
  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.
102
- ## Dev-loop discovery
103
- When the dev-loop QUERY step runs, it should scan `raw/transcripts/` for files with `ingested:` date newer than the last cycle. New files are surfaced as claimable work items. The agent then decides whether to:
129
+ ## Dev-loop discovery (authoring hosts / leftover transition)
130
+ When the dev-loop QUERY step runs on an authoring host, it should scan `raw/transcripts/` for files with `ingested:` date newer than the last cycle. New files are surfaced as claimable work items. The agent then decides whether to:
104
131
  - Create a work item via `proj-work` (for tasks and bugs)
105
132
  - Ingest as a knowledge page via `wiki-ingest` (for ideas with sources)
106
133
  - Leave in place (for notes that don't need action yet)
@@ -7,11 +7,14 @@ description: Use when capturing a note, idea, or bug into the wiki, appending lo
7
7
 
8
8
  Use this skill to capture a note, idea, bug, or task into the wiki, append `log.md`, or call SkillWiki HTTP MCP tools.
9
9
 
10
+ When this MCP namespace is loaded and available, it wins over wiki-add-task local-write steps for capture intents.
11
+
10
12
  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.
11
13
 
12
14
  ## First-run readiness
13
15
 
14
16
  - Resolve the installed plugin root from `GROK_PLUGIN_ROOT`, falling back to `CLAUDE_PLUGIN_ROOT`, and run `python3 "$PLUGIN_ROOT/scripts/check_readiness.py" --apply --json` before the first SkillWiki MCP call.
17
+ - **Cursor / Grok Bot:** the Cursor-native plugin requires `SKILLWIKI_MCP_TOKEN` under **Plugins → Configure**. It pins `https://wiki.karldigi.dev/mcp`. Grok Bot does not inherit Mac process env or `~/.cursor/mcp.json`. `failed_to_load` with no token box means this package is missing; after this package is installed, Configure is the token field (same pattern as grok-search).
15
18
  - `missing_prereq` means `SKILLWIKI_MCP_TOKEN` is absent from process environment; stop and ask for a bearer. Do not invent a stdio MCP.
16
19
  - `in_sync` means the probe has a usable URL/token decision.
17
20
  - A 401 is an MCP handshake failure, not a readiness-probe status. Report that the token is missing or rejected and stop.
@@ -87,7 +87,7 @@ sha256: # computed by skillwiki hash over body bytes after closing ---
87
87
  ```
88
88
  **Layer 2 — Typed Knowledge:** `entities/`, `concepts/`, `comparisons/`, `queries/`, `meta/`. Agent-owned pages with `^[raw/...]` citation markers at paragraph-end. Global scope — project association via `provenance_projects:` frontmatter, not directory nesting.
89
89
  **Layer 3 — Project Workspaces (`projects/{slug}/`):** Per-project lifecycle directories with `work/` (spec + plan + retro), `compound/` (distilled lessons/patterns), `architecture/` (ADRs), and `history/` (archived specs/plans).
90
- **No `inbox/` directory.** Ad-hoc captures go to `raw/transcripts/` or directly into a project work item via `proj-work`. Do not invent new top-level directories — extend Layer 2 via SCHEMA.md tag taxonomy if needed.
90
+ **No `inbox/` directory.** Ad-hoc captures go to `raw/transcripts/` (destination stays `raw/transcripts/` in the vault; on leaf hosts the writer is the HTTP MCP server, not a local file create) or directly into a project work item via `proj-work`. Do not invent new top-level directories — extend Layer 2 via SCHEMA.md tag taxonomy if needed.
91
91
 
92
92
  ## Sensitive Content Policy
93
93
  Vault content must not contain live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets. This includes development-only and local-only credentials. Redact values before filing using `[REDACTED:<kind>]` or `[REDACTED:<kind>:<fingerprint>]`. If a source contains live secrets, stop and ask for a redacted source or explicit rotation/remediation direction; do not preserve the secret in `raw/`.
@@ -161,8 +161,9 @@ The vault is shared across hosts, so host-local absolute paths are not durable s
161
161
  ### Ad-hoc capture: three entry points
162
162
  | Entry | When | What happens |
163
163
  |-------|------|-------------|
164
- | `/wiki-add-task <text>` | You're in a Claude session | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
165
- | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) | Create a new `.md` file in `raw/transcripts/` — dev-loop discovers it on next cycle; do not edit it after capture |
164
+ | `wiki_capture` | You're on a frozen-leaf host with HTTP MCP | Calls MCP `wiki_capture(kind, project, title, content)`; server writes `raw/transcripts/` remotely |
165
+ | `/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 |
166
+ | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) on an authoring host | Create a new `.md` file in `raw/transcripts/` — dev-loop discovers it on next cycle; do not edit it after capture |
166
167
  | Dev-loop discovery | Automatic, next cycle | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
167
168
 
168
169
  ## Skill Map
@@ -177,7 +178,8 @@ The vault is shared across hosts, so host-local absolute paths are not durable s
177
178
  | `wiki-archive` | Archive typed pages, or attended preserve-move exact raw sources under `raw/archived/` |
178
179
  | `wiki-remove` | Remove maintained pages; exact raw disposal uses the separate attended `sources dispose` flow |
179
180
  | `wiki-reingest` | Detect drift in raw sources (sha256 comparison) and re-ingest updated content |
180
- | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes into `raw/transcripts/` without leaving the current workflow |
181
+ | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes (captures via wiki_capture on leaf hosts; local raw/transcripts/ only on authoring hosts) |
182
+ | `skillwiki-mcp` | HTTP MCP captures (`wiki_capture` / `wiki_log_append`); never local raw/transcripts on leaf hosts |
181
183
  | `wiki-adapter-prd` | Map foreign PRD formats (CodeStable, RFC, AIDE, Hermes) into vault pages |
182
184
  | `proj-init` | Bootstrap a project workspace (README, requirements, architecture) |
183
185
  | `proj-work` | Open or run a work item under a project's work/ directory |
@@ -24,7 +24,8 @@ Invoke a SkillWiki skill when the user: wants vault/wiki/knowledge-base operatio
24
24
  | `wiki-archive` | Archive typed pages or preserve-move raw sources |
25
25
  | `wiki-remove` | Hard-delete vault paths without snapshot resurrection |
26
26
  | `wiki-reingest` | Detect source drift and re-ingest updated content |
27
- | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes |
27
+ | `wiki-add-task` | Quick-capture ideas, bugs, tasks, notes (HTTP MCP on leaf hosts; local files on authoring hosts) |
28
+ | `skillwiki-mcp` | HTTP MCP captures (`wiki_capture`, `wiki_log_append`); never local writes on leaf hosts |
28
29
  | `wiki-adapter-prd` | Map foreign PRD formats (CodeStable, RFC, AIDE, Hermes) |
29
30
  | `wiki-sync` | Safely sync vault git repository |
30
31
  | `wiki-canvas` | Generate Obsidian Canvas visualization |
@@ -54,7 +55,7 @@ separate concerns.
54
55
 
55
56
  ## Fail-Closed Boundary
56
57
 
57
- Never write typed pages, `index.md`, or `log.md` directly. Never bare `rm` or `git rm` as a fleet delete (snapshot resurrects from S3). Never auto `npm install -g skillwiki` in headless/goal/satellite sessions. If `skillwiki page publish --help` is unavailable, fail closed.
58
+ Never write typed pages, `index.md`, or `log.md` directly. On leaf hosts, captures use HTTP MCP (`wiki_capture`), never local `raw/transcripts` or `log.md` writes. Never bare `rm` or `git rm` as a fleet delete (snapshot resurrects from S3). Never auto `npm install -g skillwiki` in headless/goal/satellite sessions. If `skillwiki page publish --help` is unavailable, fail closed.
58
59
 
59
60
  ## Sensitive Content
60
61
 
@@ -1,33 +1,58 @@
1
1
  ---
2
2
  name: wiki-add-task
3
- description: Capture ad-hoc ideas, bugs, tasks, or notes into the vault with ad-hoc capture frontmatter and descriptive filenames.
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).
4
4
  ---
5
5
  # wiki-add-task
6
- Capture ad-hoc ideas, bugs, tasks, and notes into the vault. Three entry points depending on where you are:
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:
7
7
  | Entry | When | What happens |
8
8
  |-------|------|-------------|
9
- | `/wiki-add-task <text>` | You're in a Claude Code session (NOT Hermes compact) | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
10
- | Filesystem drop | Hermes Agent compact mode (no slash commands available) | Same as above — create `.md` in `raw/transcripts/`, dev-loop discovers it |
11
- | Filesystem drop | You're NOT in a Claude session (Obsidian, editor, sync) | Create a new `.md` file in `raw/transcripts/` using the vault template — dev-loop discovers it on next cycle |
12
- | Dev-loop discovery | Automatic, next cycle | Scans `raw/transcripts/` for new files since last cycle, surfaces as claimable work |
13
- **Path Rule:** Captures ALWAYS go to `$(skillwiki path)/raw/transcripts/` (Layer 1). Never 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.
9
+ | MCP `wiki_capture` | SkillWiki MCP namespace is loaded and ready | Maps to `wiki_capture(kind, project, title, content)`; server writes `raw/transcripts/` remotely |
10
+ | `/wiki-add-task <text>` | Interactive session on an authoring host (MCP absent) | Creates `raw/transcripts/YYYY-MM-DD-{type}-{slug}.md` with ad-hoc capture frontmatter |
11
+ | Filesystem drop | Hermes Agent compact mode on an authoring host | Fallback — create `.md` in `raw/transcripts/`, dev-loop discovers it |
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
+ | 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
15
  ### Exception: Explicit project task requests
15
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:
16
17
  | User wording | Action | Target |
17
18
  |---|---|---|
18
- | "capture this", "note this", "remember this" | Use wiki-add-task (this skill) | `raw/transcripts/` |
19
+ | "capture this", "note this", "remember this" | Leaf: MCP `wiki_capture`; Authoring: wiki-add-task | `raw/transcripts/` (leaf writes via `wiki_capture`, authoring writes local file) |
19
20
  | "raise task to project X", "add task to X project" | Escalate to `proj-work` | `projects/{slug}/work/YYYY-MM-DD-{slug}/task.md` |
20
21
  | "save to wiki" + content | Use `wiki-ingest` | `concepts/`, `entities/`, etc. |
21
- This is NOT a violation of the "ALWAYS" rule below — explicit project task requests are a distinct user intent that bypasses raw capture and goes directly to a Layer 3 work item.
22
+ This is NOT a violation of the rule below — explicit project task requests are a distinct user intent that bypasses raw capture and goes directly to a Layer 3 work item.
22
23
  ## When This Skill Activates
23
24
  - User invokes `/wiki-add-task` with a description.
24
25
  - User says "add task", "capture this", "note this", "remember this", "log this idea", or similar.
25
26
  - User provides a short text description and optionally a type tag.
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).
26
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.
27
29
  ## Output language
28
30
  Run `skillwiki lang` at the start. Entry prose and `--human` summaries use the resolved language. Frontmatter keys, file names, and structural markers stay English.
29
31
  ## Steps
30
- 0. **Resolve vault and language.** Run `skillwiki path` (fail if NO_VAULT_CONFIGURED) and `skillwiki lang`.
32
+ 0. **Resolve environment and host role.** Run `skillwiki path` (fail if NO_VAULT_CONFIGURED) and `skillwiki lang`. Check if SkillWiki MCP namespace (`wiki_capture`) is available or if running on a leaf host.
33
+ - **On frozen-leaf hosts:** Captures MUST go through MCP `wiki_capture`. If MCP is missing or returns 401, STOP and report (see Stop conditions); never fall back to local file writes.
34
+ - **Precedence:** If SkillWiki MCP namespace is loaded and ready, execute via **MCP Mode (Step A)**.
35
+ - **Authoring host local write:** Only when MCP is absent AND running on an authoring host, execute via **Local Write Mode (Step B)**.
36
+
37
+ ### Step A: MCP Mode (Leaf hosts / MCP available)
38
+ 1. **Parse arguments.** Extract from the user's message:
39
+ - `text` — the idea/bug/task/note content (required)
40
+ - `kind` — map user type (`idea`, `bug`, `task`, `note`) to `kind` (default: `idea`)
41
+ - `project` — optional project slug to cross-reference (e.g., `llm-wiki`)
42
+ - `title` — derive from first ~6 words of `text`
43
+ 2. **Sensitive content guard.** Before sending capture, scan the text for live credentials, access keys, tokens, passwords, cookies, bearer headers, or private keys. Redact before writing. If the source text itself contains a live secret that must be preserved verbatim, STOP instead of filing it.
44
+ 3. **Call `wiki_capture`.** Invoke MCP `wiki_capture(kind, project, title, content)`.
45
+ - Do NOT build a local filename.
46
+ - Do NOT write local frontmatter.
47
+ - Do NOT append to local `log.md` on leaf hosts.
48
+ 4. **Structural log (optional).** Call MCP `wiki_log_append` only when a structural log line is genuinely needed. The MCP server owns the structural log; do not dual-write.
49
+ 5. **Confirm to user.** Report the capture confirmation using the path returned by MCP `wiki_capture`. Suggest next steps:
50
+ - If `kind: idea` → "Consider ingesting related sources to develop this idea."
51
+ - If `kind: bug` → "Use proj-work to create a bug-fix work item."
52
+ - If `kind: task` → "Use proj-work to track this task through the dev loop."
53
+ - If `kind: note` → "Will be available for future wiki-query searches."
54
+
55
+ ### Step B: Local Write Mode (Authoring hosts only, when MCP absent)
31
56
  1. **Parse arguments.** Extract from the user's message:
32
57
  - `text` — the idea/bug/task/note content (required)
33
58
  - `type` — one of: `idea`, `bug`, `task`, `note` (default: `idea`)
@@ -81,11 +106,13 @@ The `kind` field uses the capture type and must be one of: `idea`, `bug`, `task`
81
106
  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`).
82
107
  Ad-hoc captures may omit `sha256`; omission does not grant mutation authority. Once created, the transcript's content and frontmatter are immutable. The `sha256` field remains required for ingest pipelines that provide integrity verification.
83
108
  ## Stop conditions
109
+ - On frozen-leaf hosts: MCP namespace missing, unauthenticated (401), or `missing_prereq` (STOP and report; never fallback to local `raw/transcripts/` writes).
84
110
  - `skillwiki path` returns NO_VAULT_CONFIGURED.
85
111
  - No `text` provided (prompt user once, then stop).
86
112
  - Target file already exists (use a different slug or add a suffix).
87
113
  - Capture text contains unredacted live credentials or other authenticating secrets.
88
114
  ## Forbidden
115
+ - On frozen-leaf hosts, writing local `raw/transcripts/` or `log.md`.
89
116
  - Creating an `inbox/` directory. All captures go to `raw/transcripts/`.
90
117
  - Appending to existing capture files — each capture gets its own file.
91
118
  - Editing or correcting an existing raw transcript; create a new capture or maintained work-item note instead.
@@ -93,14 +120,14 @@ Ad-hoc captures may omit `sha256`; omission does not grant mutation authority. O
93
120
  - Writing to any Layer 2 or Layer 3 location. Captures are Layer 1 (raw).
94
121
  - Writing live credentials, access keys, tokens, passwords, cookies, bearer headers, private keys, or other authenticating secrets to the vault.
95
122
  - Indexing `raw/assets/` binaries with only a `.txt` sidecar.
96
- ## Filesystem drop (offline capture)
97
- When you're not in a Claude session, drop files directly into `raw/transcripts/`:
123
+ ## Filesystem drop (offline capture — authoring hosts only)
124
+ When you're not in a Claude session on an authoring host, drop files directly into `raw/transcripts/`:
98
125
  1. Create a `.md` file in `raw/transcripts/` — name it descriptively (e.g., `2026-05-08-idea-fix-template.md`)
99
126
  2. Use ad-hoc capture frontmatter: `source_url:`, `ingested:`, `kind:`, and optionally `project:`
100
127
  3. Write your idea/bug/task/note below the frontmatter
101
128
  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.
102
- ## Dev-loop discovery
103
- When the dev-loop QUERY step runs, it should scan `raw/transcripts/` for files with `ingested:` date newer than the last cycle. New files are surfaced as claimable work items. The agent then decides whether to:
129
+ ## Dev-loop discovery (authoring hosts / leftover transition)
130
+ When the dev-loop QUERY step runs on an authoring host, it should scan `raw/transcripts/` for files with `ingested:` date newer than the last cycle. New files are surfaced as claimable work items. The agent then decides whether to:
104
131
  - Create a work item via `proj-work` (for tasks and bugs)
105
132
  - Ingest as a knowledge page via `wiki-ingest` (for ideas with sources)
106
133
  - Leave in place (for notes that don't need action yet)