@ericrisco/rsc 0.1.14 → 0.1.16
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/README.md +1 -1
- package/manifest.json +1 -1
- package/package.json +4 -4
- package/skills/harness/SKILL.md +1 -1
- package/skills/harness/references/daily-curation-automation.md +13 -6
- package/skills/harness/references/ingest-ignore-defaults.md +48 -0
- package/skills/harness/references/wiki-protocol.md +60 -0
- package/targets/session-start.sh +23 -2
package/README.md
CHANGED
|
@@ -71,7 +71,7 @@ Run it inside any project and describe what you want. Working on the catalog
|
|
|
71
71
|
itself? Clone and link:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
git clone https://github.com/ericrisco/
|
|
74
|
+
git clone https://github.com/ericrisco/rsc-harness.git ~/rsc-skills
|
|
75
75
|
cd ~/rsc-skills && npm install && npm link
|
|
76
76
|
```
|
|
77
77
|
|
package/manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ericrisco/rsc",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.16",
|
|
4
4
|
"description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -47,13 +47,13 @@
|
|
|
47
47
|
],
|
|
48
48
|
"license": "MIT",
|
|
49
49
|
"author": "Eric Risco",
|
|
50
|
-
"homepage": "https://github.com/ericrisco/
|
|
50
|
+
"homepage": "https://github.com/ericrisco/rsc-harness#readme",
|
|
51
51
|
"repository": {
|
|
52
52
|
"type": "git",
|
|
53
|
-
"url": "git+https://github.com/ericrisco/
|
|
53
|
+
"url": "git+https://github.com/ericrisco/rsc-harness.git"
|
|
54
54
|
},
|
|
55
55
|
"bugs": {
|
|
56
|
-
"url": "https://github.com/ericrisco/
|
|
56
|
+
"url": "https://github.com/ericrisco/rsc-harness/issues"
|
|
57
57
|
},
|
|
58
58
|
"publishConfig": {
|
|
59
59
|
"access": "public"
|
package/skills/harness/SKILL.md
CHANGED
|
@@ -11,7 +11,7 @@ profiles: [minimal, core, full]
|
|
|
11
11
|
The **harness** is the control plane of a workspace. A workspace need not be code: it can be a company, an ops desk, a legal archive, a personal knowledge vault. Whatever it is, the harness is the durable apparatus that keeps it operable and legible, made of three parts:
|
|
12
12
|
|
|
13
13
|
- **`01-TOOLS/<PROVIDER>/`** — the operational tooling layer. One folder per external provider, co-locating credentials (`.env`) with the scripts that consume them. Each tool ships a working `test_connection` against the real API.
|
|
14
|
-
- **`02-DOCS/`** — the **Karpathy chaos→knowledge engine**: a domain-agnostic LLM wiki (`inbox/` + `raw/` + `raw/worklog/` + `wiki/` + `wiki/index.md` + `wiki/log.md` + `wiki/gaps.md` + `wiki/scores.json` + the `.base` views), fully embedded in this skill. It feeds from **two on-ramps**: (1) the user drops **any raw file in any format** (PDF, image, CSV, JSON, txt, html…) into `inbox/`, and an **
|
|
14
|
+
- **`02-DOCS/`** — the **Karpathy chaos→knowledge engine**: a domain-agnostic LLM wiki (`inbox/` + `raw/` + `raw/worklog/` + `wiki/` + `wiki/index.md` + `wiki/log.md` + `wiki/gaps.md` + `wiki/scores.json` + the `.base` views), fully embedded in this skill. It feeds from **two on-ramps**: (1) the user drops **any raw file in any format** (PDF, image, CSV, JSON, txt, html…) into `inbox/`, and an **Auto-Ingest Sweep** ("the agent goes for a walk") extracts, classifies, cross-links, and compiles it — and goes further, **discovering un-ingested documents anywhere in the workspace** (a stray `/transcripts`, `/facturas`…), bounded by `.rscignore` and de-duplicated by the `wiki/.ingested.json` ledger, fired automatically at SessionStart (when the inbox has material) and by the daily cron. Ingest is non-destructive (originals are copied, never moved); removing an emptied folder needs explicit consent; (2) a **Worklog Sweep** captures **what we do** — every meaningful session of work is itself a `raw` source (`raw/worklog/`) compiled into the wiki, fired by a `PreCompact`/`SessionEnd` hook, by an explicit milestone (a commit), or by the daily curation automation (`references/daily-curation-automation.md`). The wiki is **Obsidian-native**: wikilinks, YAML frontmatter (Properties), readable filenames, and `.base` views give a real graph + live tables — structure, **not vector DB / embeddings / RAG**. The agent writes it; the human reads it in Obsidian. See `references/wiki-protocol.md` for the protocol, `references/ingest-formats.md` for the multiformat Fetch, `references/wiki-worklog-template.md` for the work capture, and `references/obsidian-scaffolding.md` for the vault scaffolding. Topics are inferred from content (`finanzas/`, `legal/`, `crm/`…), never hardcoded. The wiki **self-improves continuously**: every Ingest, Sweep and Query triggers a Maintenance Pass (deterministic lint, score recomputation, gap detection, Related/See-Also sweep), and every N interactions a Micro-Improve runs. Deep Improve runs on explicit request or via the scheduled daily curation. No external skill needed.
|
|
15
15
|
- **The Knowledge map** — the `## Knowledge map` section of the root `CLAUDE.md` that indexes the wiki (including the `harness/` topic) and is read by every other skill before it works in its area.
|
|
16
16
|
|
|
17
17
|
`harness` is the **protagonist concept**. `init` is the bootstrap front door — it gauges the user, drafts the profile, and hands off the first scaffold. THIS skill (`harness`) is the **ongoing control**: it audits, migrates, scaffolds, sweeps the inbox, and keeps the wiki, the tooling and the Knowledge map honest over the life of the workspace. It also generates root `CLAUDE.md` and `AGENTS.md`, and migrates legacy `XX-*` numbered folders into the canonical layout.
|
|
@@ -14,7 +14,10 @@ cron via the `schedule` skill pointed at this prompt.
|
|
|
14
14
|
|
|
15
15
|
Run once per day, at a quiet hour, to keep the second brain alive:
|
|
16
16
|
|
|
17
|
-
-
|
|
17
|
+
- run the **Auto-Ingest Sweep**: process `inbox/`, then scan the workspace (minus
|
|
18
|
+
`.rscignore`) for un-ingested documents, ingest the clearly-documentary folders,
|
|
19
|
+
record them in `wiki/.ingested.json`, and propose the ambiguous ones
|
|
20
|
+
- process pending `raw/worklog/` material into `wiki/`
|
|
18
21
|
- strengthen weak / low-score pages; fill one open gap
|
|
19
22
|
- repair links and the graph (resolve broken wikilinks, add `## Related` where proper nouns recur)
|
|
20
23
|
- mark `stale` pages whose sources moved on
|
|
@@ -26,17 +29,21 @@ Daily, at a quiet hour when the user is unlikely to be editing the vault.
|
|
|
26
29
|
|
|
27
30
|
## Scope (paths)
|
|
28
31
|
|
|
29
|
-
|
|
32
|
+
The **workspace root** (for Auto-Ingest discovery, bounded by `.rscignore`),
|
|
33
|
+
`raw/worklog/`, `inbox/`, `raw/`, `wiki/`, `wiki/.ingested.json`, `wiki/harness/`.
|
|
30
34
|
|
|
31
35
|
## Prompt
|
|
32
36
|
|
|
33
37
|
```text
|
|
34
38
|
Run the daily curation pass for this 02-DOCS second brain.
|
|
35
39
|
|
|
36
|
-
Use the harness wiki-protocol.md as the contract.
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
wiki
|
|
40
|
+
Use the harness wiki-protocol.md as the contract. First run the Auto-Ingest Sweep:
|
|
41
|
+
process inbox/, then scan the workspace (minus .rscignore) for un-ingested documents,
|
|
42
|
+
ingest the clearly-documentary folders (copy originals, never move), record them in
|
|
43
|
+
wiki/.ingested.json, and list ambiguous folders as proposals (do not grab them).
|
|
44
|
+
Then compile pending raw/worklog/ material into wiki/ pages (update existing before
|
|
45
|
+
creating new), keep frontmatter + wikilinks consistent, append significant decisions
|
|
46
|
+
to wiki/harness/decisions.md, refresh the .base-backed navigation, recompute
|
|
40
47
|
scores.json + the score: property, and append a dated entry to wiki/log.md.
|
|
41
48
|
|
|
42
49
|
Be conservative. If the topic map no longer fits, record a recommendation in
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Ignore defaults — what the Auto-Ingest Sweep must never scan
|
|
2
|
+
|
|
3
|
+
The Auto-Ingest Sweep discovers un-ingested documents across the whole workspace.
|
|
4
|
+
`02-DOCS/.rscignore` scopes that scan so it never grabs code, build output, tooling,
|
|
5
|
+
the wiki's own internals, or non-document files. This is the single guardrail that
|
|
6
|
+
keeps "automatic, workspace-wide" from turning into "tragar lo que no toca".
|
|
7
|
+
|
|
8
|
+
`02-DOCS/.rscignore` is **tracked** (not gitignored): the team shares the same scan
|
|
9
|
+
boundary. Users append their own patterns freely.
|
|
10
|
+
|
|
11
|
+
## Default `02-DOCS/.rscignore`
|
|
12
|
+
|
|
13
|
+
```gitignore
|
|
14
|
+
# 02-DOCS/.rscignore — paths the Auto-Ingest Sweep must NEVER scan as a knowledge source.
|
|
15
|
+
# Tracked (the team shares it). Append your own patterns below.
|
|
16
|
+
node_modules/
|
|
17
|
+
.git/
|
|
18
|
+
.next/
|
|
19
|
+
dist/
|
|
20
|
+
build/
|
|
21
|
+
.venv/
|
|
22
|
+
__pycache__/
|
|
23
|
+
.dart_tool/
|
|
24
|
+
.pytest_cache/
|
|
25
|
+
.ruff_cache/
|
|
26
|
+
01-TOOLS/
|
|
27
|
+
02-DOCS/inbox/_processed/
|
|
28
|
+
02-DOCS/raw/
|
|
29
|
+
02-DOCS/wiki/
|
|
30
|
+
.DS_Store
|
|
31
|
+
# Only document-like files are candidates anyway — pdf, docx, doc, md, txt, csv,
|
|
32
|
+
# tsv, json, html, rtf, and doc-like images (png/jpg of scans). Everything else
|
|
33
|
+
# (code, archives, binaries, lockfiles) is ignored even outside these paths.
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## App source dirs are ignored at scan time
|
|
37
|
+
|
|
38
|
+
Beyond the file above, the sweep adds every detected **app source directory** to the
|
|
39
|
+
effective ignore set: any directory carrying a manifest (`package.json`,
|
|
40
|
+
`pyproject.toml`, `pubspec.yaml`, `go.mod`, `Cargo.toml`) and its tree. Source code is
|
|
41
|
+
never a knowledge source — `02-DOCS/wiki/` is where understanding about the code lives,
|
|
42
|
+
written deliberately, not scraped from the repo.
|
|
43
|
+
|
|
44
|
+
## Why `02-DOCS/raw/` and `02-DOCS/wiki/` are ignored
|
|
45
|
+
|
|
46
|
+
They are *outputs* of ingestion, not inputs. Scanning them would re-ingest the wiki
|
|
47
|
+
into itself. `inbox/` is the only `02-DOCS/` subtree the sweep reads as a source
|
|
48
|
+
(plus discovered external folders).
|
|
@@ -17,6 +17,7 @@ skill required. When the parent skill (`SKILL.md`) reaches Phase 4 step 8
|
|
|
17
17
|
- [Ingest](#ingest) · [Fetch](#fetch-raw) · [Compile](#compile-wiki) · [Cascade Updates](#cascade-updates) · [Post-Ingest](#post-ingest)
|
|
18
18
|
- [Inbox Sweep — "el agente sale a pasear"](#inbox-sweep--el-agente-sale-a-pasear)
|
|
19
19
|
- [Worklog Sweep — work-driven capture](#worklog-sweep--work-driven-capture)
|
|
20
|
+
- [Auto-Ingest Sweep — automatic, workspace-wide](#auto-ingest-sweep--automatic-workspace-wide)
|
|
20
21
|
- [Query](#query)
|
|
21
22
|
- [Lint](#lint) · [Deterministic Checks](#deterministic-checks-auto-fix) · [Heuristic Checks](#heuristic-checks-report-only)
|
|
22
23
|
- [Continuous Improvement](#continuous-improvement) — Maintenance Pass / Micro-Improve / Deep Improve
|
|
@@ -172,6 +173,9 @@ exist. Create only what is missing; never overwrite existing files:
|
|
|
172
173
|
- `02-DOCS/wiki/log.md` — heading `# Wiki Log`, empty body
|
|
173
174
|
- `02-DOCS/wiki/gaps.md` — heading `# Knowledge Gaps`, empty body
|
|
174
175
|
- `02-DOCS/wiki/scores.json` — `{}` (populated by the first Maintenance Pass)
|
|
176
|
+
- `02-DOCS/wiki/.ingested.json` — `{}` (the Auto-Ingest Sweep's seen-ledger)
|
|
177
|
+
- `02-DOCS/.rscignore` — the scan boundary for the Auto-Ingest Sweep, from
|
|
178
|
+
`ingest-ignore-defaults.md` (tracked, not gitignored)
|
|
175
179
|
- `02-DOCS/wiki/reports/` directory (with `.gitkeep`) — will hold Deep Improve reports
|
|
176
180
|
- `02-DOCS/audits/` directory (with `.gitkeep`) — holds per-run audit reports
|
|
177
181
|
from the parent skill (`audit-YYYY-MM-DD-HHMM.html`). May already exist if
|
|
@@ -426,6 +430,62 @@ Append to `02-DOCS/wiki/log.md`:
|
|
|
426
430
|
|
|
427
431
|
---
|
|
428
432
|
|
|
433
|
+
## Auto-Ingest Sweep — automatic, workspace-wide
|
|
434
|
+
|
|
435
|
+
The Inbox Sweep processes what the user *dropped* in `inbox/`. The **Auto-Ingest
|
|
436
|
+
Sweep** extends it: it also **discovers** un-ingested documents anywhere in the
|
|
437
|
+
workspace and ingests them on its own — so the user never has to remember to file
|
|
438
|
+
sources. It runs automatically (SessionStart nudge + daily cron; see Triggers) and
|
|
439
|
+
on request.
|
|
440
|
+
|
|
441
|
+
The hard rule that keeps "automatic, workspace-wide" safe: **ingesting is
|
|
442
|
+
non-destructive** (read + create wiki pages + copy the original into
|
|
443
|
+
`raw/<topic>/_originals/`), so it is safe to do unattended. **Moving or deleting
|
|
444
|
+
anything is destructive** and always requires explicit, quoted consent.
|
|
445
|
+
|
|
446
|
+
### Steps
|
|
447
|
+
|
|
448
|
+
1. **inbox/** — run the Inbox Sweep on `inbox/` (unchanged).
|
|
449
|
+
2. **Scan** — walk the workspace minus `.rscignore` (and minus detected app source
|
|
450
|
+
dirs). Consider only document-like files. A file is **un-ingested** when its
|
|
451
|
+
`path` is absent from `wiki/.ingested.json` OR its content hash differs.
|
|
452
|
+
3. **Classify** each candidate folder:
|
|
453
|
+
- **Clearly documentary** (a folder of docs/transcripts/pdfs, no code) →
|
|
454
|
+
**auto-ingest**: Compile to `wiki/`, copy the original into
|
|
455
|
+
`raw/<topic>/_originals/` (**copy, never move** — the source stays put).
|
|
456
|
+
- **Ambiguous** (mixed, or possibly app data) → **list it and propose**; do not
|
|
457
|
+
touch it. Log it to `gaps.md` so the next pass remembers.
|
|
458
|
+
4. **Record** every ingested source in `wiki/.ingested.json`.
|
|
459
|
+
5. **Offer cleanup** — for a folder the sweep fully ingested, **offer** to remove it
|
|
460
|
+
once empty, with the consent quoted back from the user. **Never auto-delete**, and
|
|
461
|
+
never a folder the sweep did not itself empty.
|
|
462
|
+
|
|
463
|
+
### Ledger — `wiki/.ingested.json`
|
|
464
|
+
|
|
465
|
+
The seen-ledger; the single source of truth for "what we've already ingested",
|
|
466
|
+
which makes the workspace scan idempotent (the Inbox Sweep alone tracks
|
|
467
|
+
processed-ness only by moving files to `inbox/_processed/`).
|
|
468
|
+
|
|
469
|
+
```json
|
|
470
|
+
{
|
|
471
|
+
"<relpath-from-workspace-root>": { "hash": "sha256:…", "ingested": "YYYY-MM-DD", "topic": "…" }
|
|
472
|
+
}
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
Un-ingested = path absent OR hash changed. `inbox/` files still move to
|
|
476
|
+
`inbox/_processed/` **and** get a ledger entry. Initialized as `{}`.
|
|
477
|
+
|
|
478
|
+
### Auto-Ingest safety rails
|
|
479
|
+
|
|
480
|
+
- **Ledger-idempotent.** Never reprocess a source whose path+hash is recorded.
|
|
481
|
+
- **Scoped by `.rscignore`.** Never scan code, build output, `01-TOOLS/`, the
|
|
482
|
+
wiki's own `raw/`+`wiki/`, or non-document files (see `ingest-ignore-defaults.md`).
|
|
483
|
+
- **Copy, don't move.** Discovered originals are copied; the source is left in place.
|
|
484
|
+
- **Consent for destruction.** Removing an emptied folder is quoted-consent only.
|
|
485
|
+
- **Ambiguity is proposed, not grabbed.**
|
|
486
|
+
|
|
487
|
+
---
|
|
488
|
+
|
|
429
489
|
## Query
|
|
430
490
|
|
|
431
491
|
Search the wiki and answer questions. Examples of triggers:
|
package/targets/session-start.sh
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# rsc SessionStart payload (claude). Wired by targets/claude.js.
|
|
3
3
|
# $1 = absolute path to suggest's SKILL.md $2 = absolute project root
|
|
4
|
-
# Always emits suggest's always-on body; appends an onboarding banner
|
|
5
|
-
#
|
|
4
|
+
# Always emits suggest's always-on body; appends an onboarding banner when the
|
|
5
|
+
# workspace has no harness profile yet, and an auto-ingest nudge when there is
|
|
6
|
+
# un-ingested material waiting in the inbox.
|
|
6
7
|
set -u
|
|
7
8
|
|
|
8
9
|
cat "$1" 2>/dev/null
|
|
@@ -20,3 +21,23 @@ If the user does not want a harness here: create .rsc/.no-harness
|
|
|
20
21
|
==========================
|
|
21
22
|
BANNER
|
|
22
23
|
fi
|
|
24
|
+
|
|
25
|
+
# Auto-Ingest nudge: when a harness wiki exists and the inbox holds a real file
|
|
26
|
+
# (anything other than README.md / dotfiles / the _processed archive), tell the
|
|
27
|
+
# agent to run the Auto-Ingest Sweep. The hook only reminds; the agent does the
|
|
28
|
+
# scan + ingest. Cheap signal here; the thorough workspace scan lives in the sweep.
|
|
29
|
+
inbox="$2/02-DOCS/inbox"
|
|
30
|
+
if [ -d "$2/02-DOCS/wiki" ] && [ -d "$inbox" ]; then
|
|
31
|
+
pending=$(find "$inbox" -maxdepth 1 -type f ! -name 'README.md' ! -name '.*' 2>/dev/null | head -1)
|
|
32
|
+
if [ -n "$pending" ]; then
|
|
33
|
+
cat <<'BANNER'
|
|
34
|
+
|
|
35
|
+
===== rsc auto-ingest =====
|
|
36
|
+
Un-ingested material is waiting in 02-DOCS/inbox/.
|
|
37
|
+
ACTION: run the Auto-Ingest Sweep now — ingest inbox/, then scan the workspace
|
|
38
|
+
(minus .rscignore) for un-ingested documents, recording them in wiki/.ingested.json.
|
|
39
|
+
Originals are copied, never moved; deleting an emptied folder needs explicit consent.
|
|
40
|
+
===========================
|
|
41
|
+
BANNER
|
|
42
|
+
fi
|
|
43
|
+
fi
|