@onlooker-community/ecosystem 0.30.0 → 0.31.0
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/.claude-plugin/plugin.json +1 -1
- package/.gitattributes +18 -0
- package/.release-please-manifest.json +17 -17
- package/CHANGELOG.md +19 -0
- package/CLAUDE.md +10 -0
- package/package.json +2 -3
- package/plugins/archivist/.claude-plugin/plugin.json +1 -1
- package/plugins/archivist/CHANGELOG.md +7 -0
- package/plugins/archivist/README.md +4 -10
- package/plugins/archivist/config.json +0 -1
- package/plugins/archivist/scripts/hooks/archivist-extract.sh +0 -6
- package/plugins/archivist/scripts/hooks/archivist-inject.sh +2 -7
- package/plugins/archivist/scripts/lib/archivist-config.sh +0 -8
- package/plugins/assayer/.claude-plugin/plugin.json +1 -1
- package/plugins/assayer/CHANGELOG.md +7 -0
- package/plugins/assayer/README.md +4 -10
- package/plugins/assayer/config.json +0 -1
- package/plugins/assayer/scripts/hooks/assayer-stop.sh +1 -3
- package/plugins/assayer/scripts/lib/assayer-config.sh +0 -6
- package/plugins/bursar/.claude-plugin/plugin.json +1 -1
- package/plugins/bursar/CHANGELOG.md +7 -0
- package/plugins/bursar/README.md +3 -11
- package/plugins/bursar/config.json +0 -1
- package/plugins/bursar/scripts/hooks/bursar-session-end.sh +4 -6
- package/plugins/bursar/scripts/hooks/bursar-session-start.sh +3 -5
- package/plugins/bursar/scripts/lib/bursar-config.sh +1 -7
- package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
- package/plugins/cartographer/CHANGELOG.md +7 -0
- package/plugins/cartographer/README.md +3 -10
- package/plugins/cartographer/config.json +0 -1
- package/plugins/cartographer/scripts/hooks/cartographer-post-write.sh +0 -2
- package/plugins/cartographer/scripts/hooks/cartographer-session-start.sh +0 -2
- package/plugins/cartographer/scripts/lib/cartographer-config.sh +0 -7
- package/plugins/cartographer/skills/cartographer/SKILL.md +0 -5
- package/plugins/compass/.claude-plugin/plugin.json +1 -1
- package/plugins/compass/CHANGELOG.md +7 -0
- package/plugins/compass/README.md +4 -10
- package/plugins/compass/config.json +0 -1
- package/plugins/compass/scripts/hooks/compass-bash-gate.sh +0 -4
- package/plugins/compass/scripts/hooks/compass-pre-tool-use.sh +0 -4
- package/plugins/compass/scripts/hooks/compass-record-write.sh +0 -4
- package/plugins/compass/scripts/hooks/compass-session-start.sh +1 -6
- package/plugins/compass/scripts/lib/compass-config.sh +0 -7
- package/plugins/counsel/.claude-plugin/plugin.json +1 -1
- package/plugins/counsel/CHANGELOG.md +7 -0
- package/plugins/counsel/README.md +6 -10
- package/plugins/counsel/config.json +0 -1
- package/plugins/counsel/scripts/hooks/counsel-session-start.sh +1 -7
- package/plugins/counsel/scripts/lib/counsel-config.sh +0 -6
- package/plugins/counsel/skills/counsel/SKILL.md +0 -5
- package/plugins/curator/.claude-plugin/plugin.json +1 -1
- package/plugins/curator/CHANGELOG.md +7 -0
- package/plugins/curator/README.md +1 -11
- package/plugins/curator/config.json +0 -1
- package/plugins/curator/scripts/hooks/curator-session-start.sh +0 -6
- package/plugins/curator/scripts/lib/curator-config.sh +0 -7
- package/plugins/echo/.claude-plugin/plugin.json +1 -1
- package/plugins/echo/CHANGELOG.md +7 -0
- package/plugins/echo/README.md +3 -9
- package/plugins/echo/config.json +0 -1
- package/plugins/echo/scripts/hooks/echo-stop-gate.sh +1 -3
- package/plugins/echo/scripts/lib/echo-config.sh +0 -6
- package/plugins/governor/.claude-plugin/plugin.json +1 -1
- package/plugins/governor/CHANGELOG.md +7 -0
- package/plugins/governor/README.md +4 -10
- package/plugins/governor/config.json +0 -1
- package/plugins/governor/scripts/hooks/governor-post-tool-use.sh +0 -5
- package/plugins/governor/scripts/hooks/governor-pre-tool-use.sh +0 -5
- package/plugins/governor/scripts/hooks/governor-session-start.sh +4 -9
- package/plugins/governor/scripts/hooks/governor-stop.sh +0 -5
- package/plugins/governor/scripts/lib/governor-config.sh +0 -7
- package/plugins/historian/.claude-plugin/plugin.json +1 -1
- package/plugins/historian/CHANGELOG.md +14 -0
- package/plugins/historian/README.md +3 -7
- package/plugins/historian/config.json +0 -1
- package/plugins/historian/scripts/hooks/historian-prompt-submit.sh +1 -6
- package/plugins/historian/scripts/hooks/historian-session-end.sh +2 -6
- package/plugins/historian/scripts/lib/historian-config.sh +0 -6
- package/plugins/historian/scripts/lib/historian-embedder.sh +10 -6
- package/plugins/inspector/.claude-plugin/plugin.json +1 -1
- package/plugins/inspector/CHANGELOG.md +7 -0
- package/plugins/inspector/README.md +9 -5
- package/plugins/inspector/config.json +0 -1
- package/plugins/inspector/scripts/hooks/inspector-post-write.sh +0 -7
- package/plugins/inspector/scripts/lib/inspector-config.sh +0 -7
- package/plugins/librarian/.claude-plugin/plugin.json +1 -1
- package/plugins/librarian/CHANGELOG.md +7 -0
- package/plugins/librarian/README.md +5 -9
- package/plugins/librarian/config.json +0 -1
- package/plugins/librarian/scripts/hooks/librarian-session-end.sh +0 -2
- package/plugins/librarian/scripts/hooks/librarian-session-start.sh +0 -6
- package/plugins/librarian/scripts/lib/librarian-config.sh +0 -8
- package/plugins/lineage/.claude-plugin/plugin.json +1 -1
- package/plugins/lineage/CHANGELOG.md +7 -1
- package/plugins/lineage/README.md +3 -12
- package/plugins/lineage/config.json +0 -1
- package/plugins/lineage/scripts/hooks/lineage-post-tool-use.sh +0 -1
- package/plugins/lineage/scripts/lib/lineage-config.sh +0 -7
- package/plugins/lineage/skills/lineage/SKILL.md +1 -4
- package/plugins/scribe/.claude-plugin/plugin.json +1 -1
- package/plugins/scribe/CHANGELOG.md +7 -0
- package/plugins/scribe/README.md +4 -12
- package/plugins/scribe/config.json +0 -1
- package/plugins/scribe/scripts/hooks/scribe-capture.sh +0 -4
- package/plugins/scribe/scripts/hooks/scribe-session-start.sh +2 -7
- package/plugins/scribe/scripts/hooks/scribe-stop.sh +0 -5
- package/plugins/scribe/scripts/lib/scribe-config.sh +1 -8
- package/plugins/scribe/scripts/lib/scribe-extract.sh +16 -12
- package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
- package/plugins/tribunal/CHANGELOG.md +7 -0
- package/plugins/tribunal/README.md +7 -1
- package/plugins/tribunal/config.json +0 -1
- package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +3 -14
- package/plugins/tribunal/scripts/lib/tribunal-config.sh +0 -8
- package/plugins/warden/.claude-plugin/plugin.json +1 -1
- package/plugins/warden/CHANGELOG.md +7 -0
- package/plugins/warden/README.md +3 -12
- package/plugins/warden/config.json +0 -1
- package/plugins/warden/scripts/hooks/warden-post-tool-use.sh +0 -4
- package/plugins/warden/scripts/hooks/warden-pre-tool-use.sh +0 -4
- package/plugins/warden/scripts/hooks/warden-session-start.sh +1 -6
- package/plugins/warden/scripts/lib/warden-config.sh +1 -8
- package/renovate.json +34 -0
- package/test/bats/archivist-config-files.bats +2 -2
- package/test/bats/archivist-config.bats +0 -25
- package/test/bats/archivist-inject.bats +1 -13
- package/test/bats/assayer-config.bats +0 -13
- package/test/bats/assayer-stop-hook.bats +3 -17
- package/test/bats/bursar-config.bats +0 -25
- package/test/bats/bursar-session-end.bats +0 -20
- package/test/bats/bursar-session-start.bats +1 -18
- package/test/bats/cartographer-config.bats +0 -25
- package/test/bats/compass-config.bats +1 -26
- package/test/bats/compass-gate.bats +1 -3
- package/test/bats/curator-session-start.bats +2 -12
- package/test/bats/echo-config.bats +0 -24
- package/test/bats/echo-stop-hook.bats +3 -15
- package/test/bats/governor-config.bats +0 -36
- package/test/bats/historian-prompt-submit.bats +2 -8
- package/test/bats/historian-session-end.bats +4 -14
- package/test/bats/inspector-config.bats +0 -13
- package/test/bats/inspector-post-write-hook.bats +10 -17
- package/test/bats/librarian-session-end.bats +0 -11
- package/test/bats/librarian-session-start.bats +1 -11
- package/test/bats/lineage-config.bats +0 -25
- package/test/bats/lineage-post-tool-use.bats +1 -7
- package/test/bats/scribe-extract.bats +6 -6
- package/test/bats/tribunal-config.bats +0 -25
- package/test/bats/warden-config.bats +0 -25
- package/test/bats/warden-scanner.bats +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ecosystem",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Observability substrate for Claude Code. Provides the shared $ONLOOKER_DIR storage root (default $HOME/.onlooker), canonical schema-validated event emission, session and tool tracking hooks, and prompt rules. Required by all other Onlooker plugins.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
package/.gitattributes
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Ensure shell scripts always have LF line endings
|
|
2
|
+
*.sh text eol=lf
|
|
3
|
+
hooks/session-start text eol=lf
|
|
4
|
+
|
|
5
|
+
# Ensure the polyglot wrapper keeps LF (it's parsed by both cmd and bash)
|
|
6
|
+
*.cmd text eol=lf
|
|
7
|
+
|
|
8
|
+
# Common text files
|
|
9
|
+
*.md text eol=lf
|
|
10
|
+
*.json text eol=lf
|
|
11
|
+
*.js text eol=lf
|
|
12
|
+
*.mjs text eol=lf
|
|
13
|
+
*.ts text eol=lf
|
|
14
|
+
|
|
15
|
+
# Explicitly mark binary files
|
|
16
|
+
*.png binary
|
|
17
|
+
*.jpg binary
|
|
18
|
+
*.gif binary
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
".": "0.
|
|
3
|
-
"plugins/archivist": "0.
|
|
4
|
-
"plugins/tribunal": "1.0
|
|
5
|
-
"plugins/echo": "0.
|
|
6
|
-
"plugins/cartographer": "0.
|
|
7
|
-
"plugins/governor": "0.
|
|
8
|
-
"plugins/compass": "0.
|
|
9
|
-
"plugins/scribe": "0.
|
|
10
|
-
"plugins/counsel": "0.
|
|
11
|
-
"plugins/warden": "0.
|
|
12
|
-
"plugins/librarian": "0.
|
|
13
|
-
"plugins/curator": "0.
|
|
14
|
-
"plugins/historian": "0.
|
|
15
|
-
"plugins/assayer": "1.
|
|
16
|
-
"plugins/bursar": "0.
|
|
17
|
-
"plugins/lineage": "0.
|
|
18
|
-
"plugins/inspector": "0.
|
|
2
|
+
".": "0.31.0",
|
|
3
|
+
"plugins/archivist": "0.3.0",
|
|
4
|
+
"plugins/tribunal": "1.1.0",
|
|
5
|
+
"plugins/echo": "0.3.0",
|
|
6
|
+
"plugins/cartographer": "0.3.0",
|
|
7
|
+
"plugins/governor": "0.3.0",
|
|
8
|
+
"plugins/compass": "0.4.0",
|
|
9
|
+
"plugins/scribe": "0.4.0",
|
|
10
|
+
"plugins/counsel": "0.5.0",
|
|
11
|
+
"plugins/warden": "0.3.0",
|
|
12
|
+
"plugins/librarian": "0.4.0",
|
|
13
|
+
"plugins/curator": "0.2.0",
|
|
14
|
+
"plugins/historian": "0.3.0",
|
|
15
|
+
"plugins/assayer": "1.1.0",
|
|
16
|
+
"plugins/bursar": "0.2.0",
|
|
17
|
+
"plugins/lineage": "0.2.0",
|
|
18
|
+
"plugins/inspector": "0.3.0"
|
|
19
19
|
}
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.31.0](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.30.1...ecosystem-v0.31.0) (2026-07-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
|
|
9
|
+
|
|
10
|
+
## [0.30.1](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.30.0...ecosystem-v0.30.1) (2026-06-28)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **historian:** repair CI broken by embedder check + document PR workflow :nail_care: ([#106](https://github.com/onlooker-community/ecosystem/issues/106)) ([02062a2](https://github.com/onlooker-community/ecosystem/commit/02062a21163e084705dae9cf421719b6e5a7b306))
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Performance Improvements
|
|
19
|
+
|
|
20
|
+
* **historian:** fix O(n²) chunk loop and embedder false-positive :relieved: ([4ef130a](https://github.com/onlooker-community/ecosystem/commit/4ef130a4c01ec378da5b4d8baeeb7b4fb6059272))
|
|
21
|
+
|
|
3
22
|
## [0.30.0](https://github.com/onlooker-community/ecosystem/compare/ecosystem-v0.29.3...ecosystem-v0.30.0) (2026-06-24)
|
|
4
23
|
|
|
5
24
|
|
package/CLAUDE.md
CHANGED
|
@@ -87,6 +87,16 @@ npm run test:ci # shellcheck + bats + schema + lint
|
|
|
87
87
|
|
|
88
88
|
Tests use an isolated temp home; nothing writes to your real `~/.onlooker/`.
|
|
89
89
|
|
|
90
|
+
## Git workflow
|
|
91
|
+
|
|
92
|
+
**Always open a PR — never push directly to `main`.** Even though bypass rights allow direct pushes, this repo uses release-please for automated changelogs and versioning, so every change must travel through a PR to be picked up correctly. CI also runs on PRs before merge, catching failures before they land.
|
|
93
|
+
|
|
94
|
+
Workflow:
|
|
95
|
+
1. Create a feature branch: `git switch -c <type>/<short-description>`
|
|
96
|
+
2. Commit using `/commit`
|
|
97
|
+
3. Push the branch and open a PR using `/git:gh-pr-create`
|
|
98
|
+
4. Wait for CI to pass before merging
|
|
99
|
+
|
|
90
100
|
## Conventions
|
|
91
101
|
|
|
92
102
|
- All hooks are bash scripts. No Python, no Node entry points in hook scripts (they may shell out to `node` for event emission or heavy lifting).
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onlooker-community/ecosystem",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "Agents, skills, hooks, commands, rules, and MCP configurations that power [Onlooker](https://onlooker.dev)",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
|
@@ -19,7 +19,6 @@
|
|
|
19
19
|
"onlooker-install": "install.sh"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"postinstall": "echo '\\n onlooker-ecosystem installed!\\n Run: npx onlooker-install typescript\\n Docs: https://github.com/onlooker-community/ecosystem\\n'",
|
|
23
22
|
"test": "npm run test:bats && npm run test:schema",
|
|
24
23
|
"test:bats": "bats test/bats",
|
|
25
24
|
"test:schema": "node --test test/node/*.test.mjs",
|
|
@@ -42,7 +41,7 @@
|
|
|
42
41
|
},
|
|
43
42
|
"devDependencies": {
|
|
44
43
|
"@biomejs/biome": "2.4.15",
|
|
45
|
-
"@onlooker-community/schema": "^2.
|
|
44
|
+
"@onlooker-community/schema": "^2.11.0",
|
|
46
45
|
"globals": "^17.6.0",
|
|
47
46
|
"markdownlint-cli": "^0.48.0"
|
|
48
47
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archivist",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Structured session memory across context truncation: extracts decisions, dead ends, and open questions on PreCompact and reinjects the most important items at SessionStart. Builds on the Onlooker ecosystem plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/archivist-v0.2.0...archivist-v0.3.0) (2026-07-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
|
|
9
|
+
|
|
3
10
|
## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/archivist-v0.1.0...archivist-v0.2.0) (2026-06-24)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -15,17 +15,13 @@ Archivist is a sibling plugin to [`ecosystem`](../../) and assumes the Onlooker
|
|
|
15
15
|
|
|
16
16
|
## Activation
|
|
17
17
|
|
|
18
|
-
Archivist
|
|
18
|
+
Install Archivist from the marketplace:
|
|
19
19
|
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
"archivist": {
|
|
23
|
-
"enabled": true
|
|
24
|
-
}
|
|
25
|
-
}
|
|
20
|
+
```
|
|
21
|
+
/plugin install archivist@onlooker-community
|
|
26
22
|
```
|
|
27
23
|
|
|
28
|
-
|
|
24
|
+
Once installed, the plugin is active automatically — no extra configuration required.
|
|
29
25
|
|
|
30
26
|
## Configuration
|
|
31
27
|
|
|
@@ -34,7 +30,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
34
30
|
```json
|
|
35
31
|
{
|
|
36
32
|
"archivist": {
|
|
37
|
-
"enabled": false,
|
|
38
33
|
"extraction": {
|
|
39
34
|
"model": "claude-haiku-4-5-20251001",
|
|
40
35
|
"max_output_tokens": 1500,
|
|
@@ -52,7 +47,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
52
47
|
|
|
53
48
|
| Key | Default | Description |
|
|
54
49
|
|-----|---------|-------------|
|
|
55
|
-
| `enabled` | `false` | Must be `true` for any extraction or injection to run. |
|
|
56
50
|
| `extraction.model` | `claude-haiku-4-5-20251001` | Model used for transcript extraction. Haiku is fast and cheap; the extraction prompt is structured and does not require deep reasoning. |
|
|
57
51
|
| `extraction.max_output_tokens` | `1500` | Token ceiling for the extraction response. |
|
|
58
52
|
| `extraction.transcript_tail_chars` | `60000` | How many characters of the transcript tail to feed into extraction. Larger values capture more context at higher cost. |
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
#
|
|
9
9
|
# Hook contract:
|
|
10
10
|
# - Always exits 0 and approves compaction. Never blocks.
|
|
11
|
-
# - Skips work if archivist.enabled is not true.
|
|
12
11
|
# - Skips work if there is no git context (no project key).
|
|
13
12
|
# - Errors from `claude -p` are swallowed; the worst case is "no new memory
|
|
14
13
|
# for this compact", never "compaction failed".
|
|
@@ -69,11 +68,6 @@ PROJECT_KEY=$(archivist_project_key "$CWD")
|
|
|
69
68
|
# best-effort empty fallback.
|
|
70
69
|
archivist_config_load "$REPO_ROOT"
|
|
71
70
|
|
|
72
|
-
if ! archivist_config_enabled; then
|
|
73
|
-
_approve "Archivist disabled (skip extraction)"
|
|
74
|
-
exit 0
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
71
|
if [[ -z "$PROJECT_KEY" || -z "$REPO_ROOT" ]]; then
|
|
78
72
|
_approve "Archivist: no git context, nothing to extract"
|
|
79
73
|
exit 0
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
# Hook contract:
|
|
13
13
|
# - Always exits 0. Never blocks session start.
|
|
14
14
|
# - Emits valid hookSpecificOutput JSON, even if there's nothing to inject.
|
|
15
|
-
# - Skips work if
|
|
15
|
+
# - Skips work if there are no stored artifacts for the current project.
|
|
16
16
|
|
|
17
17
|
set -uo pipefail
|
|
18
18
|
|
|
@@ -62,11 +62,6 @@ PROJECT_KEY=$(archivist_project_key "$CWD")
|
|
|
62
62
|
|
|
63
63
|
archivist_config_load "$REPO_ROOT"
|
|
64
64
|
|
|
65
|
-
if ! archivist_config_enabled; then
|
|
66
|
-
_emit ""
|
|
67
|
-
exit 0
|
|
68
|
-
fi
|
|
69
|
-
|
|
70
65
|
if [[ -z "$PROJECT_KEY" ]]; then
|
|
71
66
|
_emit ""
|
|
72
67
|
exit 0
|
|
@@ -153,7 +148,7 @@ if [[ "$EMITTED" -eq 0 ]]; then
|
|
|
153
148
|
fi
|
|
154
149
|
|
|
155
150
|
# Trailer with provenance + how to disable (helps future-you debug).
|
|
156
|
-
RENDERED="${RENDERED}"$'\n\n'"(Archivist injected ${EMITTED}/${TOTAL_ITEMS} items for project key ${PROJECT_KEY}.
|
|
151
|
+
RENDERED="${RENDERED}"$'\n\n'"(Archivist injected ${EMITTED}/${TOTAL_ITEMS} items for project key ${PROJECT_KEY}. Source: ${SOURCE}.)"
|
|
157
152
|
|
|
158
153
|
_emit "$RENDERED"
|
|
159
154
|
exit 0
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
# Exposes:
|
|
10
10
|
# archivist_config_load <repo_root> # populates _ARCHIVIST_CONFIG (JSON)
|
|
11
11
|
# archivist_config_get <jq-path> # echoes string value (empty if unset)
|
|
12
|
-
# archivist_config_enabled # 0 if archivist.enabled is true
|
|
13
12
|
#
|
|
14
13
|
# Settings overlay only touches the `archivist.*` subtree of settings.json so it
|
|
15
14
|
# coexists with other plugins' configuration.
|
|
@@ -57,10 +56,3 @@ archivist_config_get() {
|
|
|
57
56
|
local path="$1"
|
|
58
57
|
printf '%s' "$_ARCHIVIST_CONFIG" | jq -r "${path} // empty" 2>/dev/null
|
|
59
58
|
}
|
|
60
|
-
|
|
61
|
-
# Returns 0 if archivist.enabled is true, 1 otherwise.
|
|
62
|
-
archivist_config_enabled() {
|
|
63
|
-
local v
|
|
64
|
-
v=$(archivist_config_get '.archivist.enabled')
|
|
65
|
-
[[ "$v" == "true" ]]
|
|
66
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "assayer",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Claim verification. At session end, parses the agent's final message for testable claims (\"I ran the tests, they pass\", \"the build is green\") and checks each against the actual command results in the session transcript, classifying it corroborated, contradicted, or unverifiable. Catches lying-without-malice. Advisory by default. Builds on the Onlooker ecosystem plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.1.0](https://github.com/onlooker-community/ecosystem/compare/assayer-v1.0.0...assayer-v1.1.0) (2026-07-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
|
|
9
|
+
|
|
3
10
|
## 1.0.0 (2026-06-04)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -34,17 +34,13 @@ The most **recent** matching command wins: an agent may fail, fix, and re-run, a
|
|
|
34
34
|
|
|
35
35
|
## Activation
|
|
36
36
|
|
|
37
|
-
Assayer
|
|
37
|
+
Install Assayer from the marketplace:
|
|
38
38
|
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
"assayer": {
|
|
42
|
-
"enabled": true
|
|
43
|
-
}
|
|
44
|
-
}
|
|
39
|
+
```
|
|
40
|
+
/plugin install assayer@onlooker-community
|
|
45
41
|
```
|
|
46
42
|
|
|
47
|
-
|
|
43
|
+
Once installed, the plugin is active — no additional toggle required.
|
|
48
44
|
|
|
49
45
|
## Configuration
|
|
50
46
|
|
|
@@ -53,7 +49,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
53
49
|
```json
|
|
54
50
|
{
|
|
55
51
|
"assayer": {
|
|
56
|
-
"enabled": false,
|
|
57
52
|
"evaluation": {
|
|
58
53
|
"model": "claude-haiku-4-5-20251001",
|
|
59
54
|
"timeout_seconds": 60
|
|
@@ -67,7 +62,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
67
62
|
|
|
68
63
|
| Key | Default | Description |
|
|
69
64
|
|-----|---------|-------------|
|
|
70
|
-
| `enabled` | `false` | Must be `true` for any audit to run. |
|
|
71
65
|
| `evaluation.model` | `claude-haiku-4-5-20251001` | Model used for claim extraction. Haiku is fast and cheap; the task is structured and shallow. |
|
|
72
66
|
| `evaluation.timeout_seconds` | `60` | Per-pass wall-clock timeout passed to the `timeout` command. |
|
|
73
67
|
| `max_claims` | `12` | Maximum number of claims to extract from a final message. |
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Assayer Stop hook.
|
|
3
3
|
#
|
|
4
|
-
# Triggered by Stop.
|
|
5
|
-
# When enabled, it reads the just-finished session's transcript, extracts the
|
|
4
|
+
# Triggered by Stop. Reads the just-finished session's transcript, extracts the
|
|
6
5
|
# agent's testable success claims from its final message, and cross-checks each
|
|
7
6
|
# against the actual Bash command results in the same transcript. Each claim is
|
|
8
7
|
# classified corroborated / contradicted / unverified and emitted as an event.
|
|
@@ -72,7 +71,6 @@ REPO_ROOT=$(assayer_project_repo_root "$CWD")
|
|
|
72
71
|
[[ -z "$REPO_ROOT" ]] && _done
|
|
73
72
|
|
|
74
73
|
CLAUDE_PLUGIN_ROOT="$PLUGIN_ROOT" assayer_config_load "$REPO_ROOT"
|
|
75
|
-
assayer_config_enabled || _done
|
|
76
74
|
|
|
77
75
|
PROJECT_KEY=$(assayer_project_key "$CWD")
|
|
78
76
|
[[ -z "$PROJECT_KEY" ]] && _done
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bursar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Multi-session, per-project budget accounting for the Onlooker ecosystem. Rolls each session's spend into a per-project ledger on SessionEnd and surfaces \"this project burned $X this week\" at SessionStart. Where governor regulates a single session, bursar is the cross-session rollup: it reads governor.session.complete off the shared event bus and emits bursar.* events for audit. Named for the officer who keeps the accounts. Builds on the Onlooker ecosystem plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/bursar-v0.1.1...bursar-v0.2.0) (2026-07-03)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
|
|
9
|
+
|
|
3
10
|
## [0.1.1](https://github.com/onlooker-community/ecosystem/compare/bursar-v0.1.0...bursar-v0.1.1) (2026-06-24)
|
|
4
11
|
|
|
5
12
|
|
package/plugins/bursar/README.md
CHANGED
|
@@ -27,17 +27,11 @@ On `SessionEnd`, bursar scans `~/.onlooker/logs/onlooker-events.jsonl` for the *
|
|
|
27
27
|
|
|
28
28
|
## Activation
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
Install the plugin in Claude from the marketplace with:
|
|
31
31
|
|
|
32
|
-
```json
|
|
33
|
-
{
|
|
34
|
-
"bursar": {
|
|
35
|
-
"enabled": true
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
32
|
```
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
/plugin install bursar@onlooker-community
|
|
34
|
+
```
|
|
41
35
|
|
|
42
36
|
## Configuration
|
|
43
37
|
|
|
@@ -46,7 +40,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
46
40
|
```json
|
|
47
41
|
{
|
|
48
42
|
"bursar": {
|
|
49
|
-
"enabled": false,
|
|
50
43
|
"window": "rolling_7d",
|
|
51
44
|
"week_start": "monday",
|
|
52
45
|
"surface_at_session_start": true,
|
|
@@ -57,7 +50,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
57
50
|
|
|
58
51
|
| Key | Default | Description |
|
|
59
52
|
|-----|---------|-------------|
|
|
60
|
-
| `enabled` | `false` | Must be `true` for any recording, surfacing, or event emission to run. |
|
|
61
53
|
| `window` | `"rolling_7d"` | Rollup window. `"rolling_7d"` sums the trailing 7×24h; `"calendar_week"` sums from the most recent week start. |
|
|
62
54
|
| `week_start` | `"monday"` | First day of the calendar week — `"monday"` or `"sunday"`. Only consulted when `window` is `"calendar_week"`. |
|
|
63
55
|
| `surface_at_session_start` | `true` | When `false`, bursar still records sessions and writes breadcrumbs but prints nothing at `SessionStart`. |
|
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
# Bursar SessionEnd hook.
|
|
3
3
|
#
|
|
4
4
|
# Fires when a session ends. Responsibilities:
|
|
5
|
-
# 1.
|
|
6
|
-
# 2. Resolve the project key for the ending session (breadcrumb first, then
|
|
5
|
+
# 1. Resolve the project key for the ending session (breadcrumb first, then
|
|
7
6
|
# the substrate session-tracker cwd, then the current cwd).
|
|
8
|
-
#
|
|
7
|
+
# 2. Read this session's spend from the shared event bus — the latest
|
|
9
8
|
# governor.session.complete for this session_id. When governor is absent
|
|
10
9
|
# the session is still recorded, with cost unknown (governor_present:false).
|
|
11
|
-
#
|
|
12
|
-
#
|
|
10
|
+
# 3. Upsert the session's spend into the per-project rollup ledger.
|
|
11
|
+
# 4. Emit bursar.session.recorded and drop the breadcrumb.
|
|
13
12
|
#
|
|
14
13
|
# Hook contract:
|
|
15
14
|
# - Always exits 0. Never blocks session termination.
|
|
@@ -62,7 +61,6 @@ fi
|
|
|
62
61
|
[[ -z "$CWD" ]] && CWD="$(pwd)"
|
|
63
62
|
|
|
64
63
|
bursar_config_load "$CWD"
|
|
65
|
-
bursar_config_enabled || _done
|
|
66
64
|
|
|
67
65
|
[[ -z "$PROJECT_KEY" ]] && PROJECT_KEY=$(bursar_project_key "$CWD")
|
|
68
66
|
[[ -z "$PROJECT_KEY" ]] && _done
|
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
# Bursar SessionStart hook.
|
|
3
3
|
#
|
|
4
4
|
# Fires at every session start. Responsibilities:
|
|
5
|
-
# 1.
|
|
6
|
-
# 2. Derive the project key from the session cwd and stash a breadcrumb
|
|
5
|
+
# 1. Derive the project key from the session cwd and stash a breadcrumb
|
|
7
6
|
# (project_key + cwd) so SessionEnd can attribute spend even though the
|
|
8
7
|
# SessionEnd payload only reliably carries session_id.
|
|
9
|
-
#
|
|
8
|
+
# 2. Surface "this project burned $X this week" by summing the per-project
|
|
10
9
|
# ledger over the configured window and emitting it as SessionStart
|
|
11
10
|
# additionalContext.
|
|
12
|
-
#
|
|
11
|
+
# 3. Emit bursar.rollup.surfaced (or bursar.rollup.skipped) for audit.
|
|
13
12
|
#
|
|
14
13
|
# Hook contract:
|
|
15
14
|
# - Always exits 0. Never blocks SessionStart.
|
|
@@ -39,7 +38,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
|
|
|
39
38
|
_done() { exit 0; }
|
|
40
39
|
|
|
41
40
|
bursar_config_load "$CWD"
|
|
42
|
-
bursar_config_enabled || _done
|
|
43
41
|
|
|
44
42
|
[[ -z "$CWD" ]] && CWD="$(pwd)"
|
|
45
43
|
PROJECT_KEY=$(bursar_project_key "$CWD")
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
# bursar_config_load <repo_root> # populates _BURSAR_CONFIG (JSON)
|
|
11
11
|
# bursar_config_get <jq-path> # echoes string value (empty if unset)
|
|
12
12
|
# bursar_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
13
|
-
# bursar_config_enabled # 0 if bursar.enabled is true
|
|
14
13
|
# bursar_config_window # echoes "rolling_7d" or "calendar_week"
|
|
14
|
+
# bursar_config_surface_enabled # 0 if bursar.surface_at_session_start is true
|
|
15
15
|
# bursar_config_week_start # echoes "monday" or "sunday"
|
|
16
16
|
|
|
17
17
|
_BURSAR_CONFIG="{}"
|
|
@@ -70,12 +70,6 @@ bursar_config_get_json() {
|
|
|
70
70
|
printf '%s' "$_BURSAR_CONFIG" | jq -c "${path}" 2>/dev/null
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
bursar_config_enabled() {
|
|
74
|
-
local v
|
|
75
|
-
v=$(bursar_config_get '.bursar.enabled')
|
|
76
|
-
[[ "$v" == "true" ]]
|
|
77
|
-
}
|
|
78
|
-
|
|
79
73
|
bursar_config_surface_enabled() {
|
|
80
74
|
# Use the JSON getter, not bursar_config_get: jq's `//` treats a literal
|
|
81
75
|
# `false` as empty, which would mask an explicit opt-out. The JSON getter
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cartographer",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Proactive periodic auditor of the persistent instruction layer (CLAUDE.md, AGENTS.md, .claude/rules/). Discovers all instruction files in the repo, extracts semantic maps, and surfaces contradictions, shadowing, gaps, and drift before they cause expensive agent misbehavior. Builds on the Onlooker ecosystem plugin.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the Cartographer plugin are documented here.
|
|
4
4
|
|
|
5
|
+
## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/cartographer-v0.2.1...cartographer-v0.3.0) (2026-07-03)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* **plugins:** installation enables plugins — remove per-plugin 'enabled' config key ([#108](https://github.com/onlooker-community/ecosystem/issues/108)) ([45e4e6b](https://github.com/onlooker-community/ecosystem/commit/45e4e6bd29a0a7545dbd5007bf3f09600e1be391))
|
|
11
|
+
|
|
5
12
|
## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/cartographer-v0.2.0...cartographer-v0.2.1) (2026-06-10)
|
|
6
13
|
|
|
7
14
|
|
|
@@ -21,17 +21,11 @@ Cartographer is part of the Onlooker ecosystem monorepo. It requires the ecosyst
|
|
|
21
21
|
|
|
22
22
|
## Activation
|
|
23
23
|
|
|
24
|
-
Cartographer
|
|
24
|
+
Install Cartographer from the marketplace and it runs automatically:
|
|
25
25
|
|
|
26
|
-
```json
|
|
27
|
-
{
|
|
28
|
-
"cartographer": {
|
|
29
|
-
"enabled": true
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
26
|
```
|
|
33
|
-
|
|
34
|
-
|
|
27
|
+
/plugin install cartographer@onlooker-community
|
|
28
|
+
```
|
|
35
29
|
|
|
36
30
|
## Usage
|
|
37
31
|
|
|
@@ -59,7 +53,6 @@ All options are optional. Defaults shown:
|
|
|
59
53
|
```json
|
|
60
54
|
{
|
|
61
55
|
"cartographer": {
|
|
62
|
-
"enabled": false,
|
|
63
56
|
"audit_interval_hours": 24,
|
|
64
57
|
"phase_timeout_seconds": 60,
|
|
65
58
|
"total_timeout_seconds": 600,
|
|
@@ -47,8 +47,6 @@ TARGET_BASENAME=$(basename "$CANONICAL")
|
|
|
47
47
|
REPO_ROOT=$(cartographer_project_repo_root "$CWD")
|
|
48
48
|
cartographer_config_load "$REPO_ROOT"
|
|
49
49
|
|
|
50
|
-
cartographer_config_enabled || exit 0
|
|
51
|
-
|
|
52
50
|
PROJECT_KEY=$(cartographer_project_key "$CWD")
|
|
53
51
|
[[ -z "$PROJECT_KEY" ]] && exit 0
|
|
54
52
|
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
#
|
|
9
9
|
# Usage:
|
|
10
10
|
# cartographer_config_load <repo_root>
|
|
11
|
-
# cartographer_config_get ".cartographer.enabled"
|
|
12
11
|
# cartographer_config_get_json ".cartographer.exclude_paths"
|
|
13
12
|
|
|
14
13
|
_CARTOGRAPHER_CONFIG=""
|
|
@@ -52,12 +51,6 @@ cartographer_config_get_json() {
|
|
|
52
51
|
printf '%s' "$_CARTOGRAPHER_CONFIG" | jq -c "$path // empty" 2>/dev/null
|
|
53
52
|
}
|
|
54
53
|
|
|
55
|
-
cartographer_config_enabled() {
|
|
56
|
-
local v
|
|
57
|
-
v=$(cartographer_config_get '.cartographer.enabled')
|
|
58
|
-
[[ "$v" == "true" ]]
|
|
59
|
-
}
|
|
60
|
-
|
|
61
54
|
cartographer_config_model_extraction() {
|
|
62
55
|
local v
|
|
63
56
|
v=$(cartographer_config_get '.cartographer.extraction.model')
|
|
@@ -26,11 +26,6 @@ Load config and resolve project context:
|
|
|
26
26
|
REPO_ROOT=$(cartographer_project_repo_root "$(pwd)")
|
|
27
27
|
cartographer_config_load "$REPO_ROOT"
|
|
28
28
|
|
|
29
|
-
if ! cartographer_config_enabled; then
|
|
30
|
-
echo "Cartographer is disabled. Set cartographer.enabled=true in .claude/settings.json to enable."
|
|
31
|
-
exit 0
|
|
32
|
-
fi
|
|
33
|
-
|
|
34
29
|
PROJECT_KEY=$(cartographer_project_key "$(pwd)")
|
|
35
30
|
CARTOGRAPHER_DIR="${ONLOOKER_DIR:-$HOME/.onlooker}/cartographer/$PROJECT_KEY"
|
|
36
31
|
mkdir -p "$CARTOGRAPHER_DIR"
|