@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.
Files changed (150) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.gitattributes +18 -0
  3. package/.release-please-manifest.json +17 -17
  4. package/CHANGELOG.md +19 -0
  5. package/CLAUDE.md +10 -0
  6. package/package.json +2 -3
  7. package/plugins/archivist/.claude-plugin/plugin.json +1 -1
  8. package/plugins/archivist/CHANGELOG.md +7 -0
  9. package/plugins/archivist/README.md +4 -10
  10. package/plugins/archivist/config.json +0 -1
  11. package/plugins/archivist/scripts/hooks/archivist-extract.sh +0 -6
  12. package/plugins/archivist/scripts/hooks/archivist-inject.sh +2 -7
  13. package/plugins/archivist/scripts/lib/archivist-config.sh +0 -8
  14. package/plugins/assayer/.claude-plugin/plugin.json +1 -1
  15. package/plugins/assayer/CHANGELOG.md +7 -0
  16. package/plugins/assayer/README.md +4 -10
  17. package/plugins/assayer/config.json +0 -1
  18. package/plugins/assayer/scripts/hooks/assayer-stop.sh +1 -3
  19. package/plugins/assayer/scripts/lib/assayer-config.sh +0 -6
  20. package/plugins/bursar/.claude-plugin/plugin.json +1 -1
  21. package/plugins/bursar/CHANGELOG.md +7 -0
  22. package/plugins/bursar/README.md +3 -11
  23. package/plugins/bursar/config.json +0 -1
  24. package/plugins/bursar/scripts/hooks/bursar-session-end.sh +4 -6
  25. package/plugins/bursar/scripts/hooks/bursar-session-start.sh +3 -5
  26. package/plugins/bursar/scripts/lib/bursar-config.sh +1 -7
  27. package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
  28. package/plugins/cartographer/CHANGELOG.md +7 -0
  29. package/plugins/cartographer/README.md +3 -10
  30. package/plugins/cartographer/config.json +0 -1
  31. package/plugins/cartographer/scripts/hooks/cartographer-post-write.sh +0 -2
  32. package/plugins/cartographer/scripts/hooks/cartographer-session-start.sh +0 -2
  33. package/plugins/cartographer/scripts/lib/cartographer-config.sh +0 -7
  34. package/plugins/cartographer/skills/cartographer/SKILL.md +0 -5
  35. package/plugins/compass/.claude-plugin/plugin.json +1 -1
  36. package/plugins/compass/CHANGELOG.md +7 -0
  37. package/plugins/compass/README.md +4 -10
  38. package/plugins/compass/config.json +0 -1
  39. package/plugins/compass/scripts/hooks/compass-bash-gate.sh +0 -4
  40. package/plugins/compass/scripts/hooks/compass-pre-tool-use.sh +0 -4
  41. package/plugins/compass/scripts/hooks/compass-record-write.sh +0 -4
  42. package/plugins/compass/scripts/hooks/compass-session-start.sh +1 -6
  43. package/plugins/compass/scripts/lib/compass-config.sh +0 -7
  44. package/plugins/counsel/.claude-plugin/plugin.json +1 -1
  45. package/plugins/counsel/CHANGELOG.md +7 -0
  46. package/plugins/counsel/README.md +6 -10
  47. package/plugins/counsel/config.json +0 -1
  48. package/plugins/counsel/scripts/hooks/counsel-session-start.sh +1 -7
  49. package/plugins/counsel/scripts/lib/counsel-config.sh +0 -6
  50. package/plugins/counsel/skills/counsel/SKILL.md +0 -5
  51. package/plugins/curator/.claude-plugin/plugin.json +1 -1
  52. package/plugins/curator/CHANGELOG.md +7 -0
  53. package/plugins/curator/README.md +1 -11
  54. package/plugins/curator/config.json +0 -1
  55. package/plugins/curator/scripts/hooks/curator-session-start.sh +0 -6
  56. package/plugins/curator/scripts/lib/curator-config.sh +0 -7
  57. package/plugins/echo/.claude-plugin/plugin.json +1 -1
  58. package/plugins/echo/CHANGELOG.md +7 -0
  59. package/plugins/echo/README.md +3 -9
  60. package/plugins/echo/config.json +0 -1
  61. package/plugins/echo/scripts/hooks/echo-stop-gate.sh +1 -3
  62. package/plugins/echo/scripts/lib/echo-config.sh +0 -6
  63. package/plugins/governor/.claude-plugin/plugin.json +1 -1
  64. package/plugins/governor/CHANGELOG.md +7 -0
  65. package/plugins/governor/README.md +4 -10
  66. package/plugins/governor/config.json +0 -1
  67. package/plugins/governor/scripts/hooks/governor-post-tool-use.sh +0 -5
  68. package/plugins/governor/scripts/hooks/governor-pre-tool-use.sh +0 -5
  69. package/plugins/governor/scripts/hooks/governor-session-start.sh +4 -9
  70. package/plugins/governor/scripts/hooks/governor-stop.sh +0 -5
  71. package/plugins/governor/scripts/lib/governor-config.sh +0 -7
  72. package/plugins/historian/.claude-plugin/plugin.json +1 -1
  73. package/plugins/historian/CHANGELOG.md +14 -0
  74. package/plugins/historian/README.md +3 -7
  75. package/plugins/historian/config.json +0 -1
  76. package/plugins/historian/scripts/hooks/historian-prompt-submit.sh +1 -6
  77. package/plugins/historian/scripts/hooks/historian-session-end.sh +2 -6
  78. package/plugins/historian/scripts/lib/historian-config.sh +0 -6
  79. package/plugins/historian/scripts/lib/historian-embedder.sh +10 -6
  80. package/plugins/inspector/.claude-plugin/plugin.json +1 -1
  81. package/plugins/inspector/CHANGELOG.md +7 -0
  82. package/plugins/inspector/README.md +9 -5
  83. package/plugins/inspector/config.json +0 -1
  84. package/plugins/inspector/scripts/hooks/inspector-post-write.sh +0 -7
  85. package/plugins/inspector/scripts/lib/inspector-config.sh +0 -7
  86. package/plugins/librarian/.claude-plugin/plugin.json +1 -1
  87. package/plugins/librarian/CHANGELOG.md +7 -0
  88. package/plugins/librarian/README.md +5 -9
  89. package/plugins/librarian/config.json +0 -1
  90. package/plugins/librarian/scripts/hooks/librarian-session-end.sh +0 -2
  91. package/plugins/librarian/scripts/hooks/librarian-session-start.sh +0 -6
  92. package/plugins/librarian/scripts/lib/librarian-config.sh +0 -8
  93. package/plugins/lineage/.claude-plugin/plugin.json +1 -1
  94. package/plugins/lineage/CHANGELOG.md +7 -1
  95. package/plugins/lineage/README.md +3 -12
  96. package/plugins/lineage/config.json +0 -1
  97. package/plugins/lineage/scripts/hooks/lineage-post-tool-use.sh +0 -1
  98. package/plugins/lineage/scripts/lib/lineage-config.sh +0 -7
  99. package/plugins/lineage/skills/lineage/SKILL.md +1 -4
  100. package/plugins/scribe/.claude-plugin/plugin.json +1 -1
  101. package/plugins/scribe/CHANGELOG.md +7 -0
  102. package/plugins/scribe/README.md +4 -12
  103. package/plugins/scribe/config.json +0 -1
  104. package/plugins/scribe/scripts/hooks/scribe-capture.sh +0 -4
  105. package/plugins/scribe/scripts/hooks/scribe-session-start.sh +2 -7
  106. package/plugins/scribe/scripts/hooks/scribe-stop.sh +0 -5
  107. package/plugins/scribe/scripts/lib/scribe-config.sh +1 -8
  108. package/plugins/scribe/scripts/lib/scribe-extract.sh +16 -12
  109. package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
  110. package/plugins/tribunal/CHANGELOG.md +7 -0
  111. package/plugins/tribunal/README.md +7 -1
  112. package/plugins/tribunal/config.json +0 -1
  113. package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +3 -14
  114. package/plugins/tribunal/scripts/lib/tribunal-config.sh +0 -8
  115. package/plugins/warden/.claude-plugin/plugin.json +1 -1
  116. package/plugins/warden/CHANGELOG.md +7 -0
  117. package/plugins/warden/README.md +3 -12
  118. package/plugins/warden/config.json +0 -1
  119. package/plugins/warden/scripts/hooks/warden-post-tool-use.sh +0 -4
  120. package/plugins/warden/scripts/hooks/warden-pre-tool-use.sh +0 -4
  121. package/plugins/warden/scripts/hooks/warden-session-start.sh +1 -6
  122. package/plugins/warden/scripts/lib/warden-config.sh +1 -8
  123. package/renovate.json +34 -0
  124. package/test/bats/archivist-config-files.bats +2 -2
  125. package/test/bats/archivist-config.bats +0 -25
  126. package/test/bats/archivist-inject.bats +1 -13
  127. package/test/bats/assayer-config.bats +0 -13
  128. package/test/bats/assayer-stop-hook.bats +3 -17
  129. package/test/bats/bursar-config.bats +0 -25
  130. package/test/bats/bursar-session-end.bats +0 -20
  131. package/test/bats/bursar-session-start.bats +1 -18
  132. package/test/bats/cartographer-config.bats +0 -25
  133. package/test/bats/compass-config.bats +1 -26
  134. package/test/bats/compass-gate.bats +1 -3
  135. package/test/bats/curator-session-start.bats +2 -12
  136. package/test/bats/echo-config.bats +0 -24
  137. package/test/bats/echo-stop-hook.bats +3 -15
  138. package/test/bats/governor-config.bats +0 -36
  139. package/test/bats/historian-prompt-submit.bats +2 -8
  140. package/test/bats/historian-session-end.bats +4 -14
  141. package/test/bats/inspector-config.bats +0 -13
  142. package/test/bats/inspector-post-write-hook.bats +10 -17
  143. package/test/bats/librarian-session-end.bats +0 -11
  144. package/test/bats/librarian-session-start.bats +1 -11
  145. package/test/bats/lineage-config.bats +0 -25
  146. package/test/bats/lineage-post-tool-use.bats +1 -7
  147. package/test/bats/scribe-extract.bats +6 -6
  148. package/test/bats/tribunal-config.bats +0 -25
  149. package/test/bats/warden-config.bats +0 -25
  150. package/test/bats/warden-scanner.bats +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ecosystem",
3
- "version": "0.30.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.30.0",
3
- "plugins/archivist": "0.2.0",
4
- "plugins/tribunal": "1.0.1",
5
- "plugins/echo": "0.2.0",
6
- "plugins/cartographer": "0.2.1",
7
- "plugins/governor": "0.2.1",
8
- "plugins/compass": "0.3.0",
9
- "plugins/scribe": "0.3.0",
10
- "plugins/counsel": "0.4.0",
11
- "plugins/warden": "0.2.0",
12
- "plugins/librarian": "0.3.0",
13
- "plugins/curator": "0.1.0",
14
- "plugins/historian": "0.2.0",
15
- "plugins/assayer": "1.0.0",
16
- "plugins/bursar": "0.1.1",
17
- "plugins/lineage": "0.1.0",
18
- "plugins/inspector": "0.2.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.30.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.9.0",
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.2.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 is **off by default**. Enable per-project in `.claude/settings.json`:
18
+ Install Archivist from the marketplace:
19
19
 
20
- ```json
21
- {
22
- "archivist": {
23
- "enabled": true
24
- }
25
- }
20
+ ```
21
+ /plugin install archivist@onlooker-community
26
22
  ```
27
23
 
28
- Or globally in `~/.claude/settings.json`.
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. |
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "archivist",
3
3
  "storage_path": "~/.onlooker",
4
4
  "archivist": {
5
- "enabled": false,
6
5
  "extraction": {
7
6
  "model": "claude-haiku-4-5-20251001",
8
7
  "max_output_tokens": 1500,
@@ -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 archivist.enabled is not true.
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}. Set archivist.enabled=false to disable. Source: ${SOURCE}.)"
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.0.0",
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 is **off by default** — it calls `claude -p` on every Stop, so it is opt-in. Enable per-project in `.claude/settings.json`:
37
+ Install Assayer from the marketplace:
38
38
 
39
- ```json
40
- {
41
- "assayer": {
42
- "enabled": true
43
- }
44
- }
39
+ ```
40
+ /plugin install assayer@onlooker-community
45
41
  ```
46
42
 
47
- Or globally in `~/.claude/settings.json`.
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. |
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "assayer",
3
3
  "storage_path": "~/.onlooker",
4
4
  "assayer": {
5
- "enabled": false,
6
5
  "evaluation": {
7
6
  "model": "claude-haiku-4-5-20251001",
8
7
  "timeout_seconds": 60
@@ -1,8 +1,7 @@
1
1
  #!/usr/bin/env bash
2
2
  # Assayer Stop hook.
3
3
  #
4
- # Triggered by Stop. Off by default gated on assayer.enabled in config.
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
@@ -51,12 +51,6 @@ assayer_config_get() {
51
51
  fi
52
52
  }
53
53
 
54
- assayer_config_enabled() {
55
- local val
56
- val=$(assayer_config_get '.enabled')
57
- [[ "$val" == "true" ]]
58
- }
59
-
60
54
  assayer_config_model() {
61
55
  local val
62
56
  val=$(assayer_config_get '.evaluation.model')
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bursar",
3
- "version": "0.1.1",
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
 
@@ -27,17 +27,11 @@ On `SessionEnd`, bursar scans `~/.onlooker/logs/onlooker-events.jsonl` for the *
27
27
 
28
28
  ## Activation
29
29
 
30
- Bursar is **off by default**. Enable it per-project in `.claude/settings.json`:
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
- Or globally in `~/.claude/settings.json`. While disabled, every hook skips silently and no ledger is written.
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,7 +2,6 @@
2
2
  "plugin_name": "bursar",
3
3
  "storage_path": "~/.onlooker",
4
4
  "bursar": {
5
- "enabled": false,
6
5
  "window": "rolling_7d",
7
6
  "week_start": "monday",
8
7
  "surface_at_session_start": true,
@@ -2,14 +2,13 @@
2
2
  # Bursar SessionEnd hook.
3
3
  #
4
4
  # Fires when a session ends. Responsibilities:
5
- # 1. Skip silently when bursar.enabled is false.
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
- # 3. Read this session's spend from the shared event bus — the latest
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
- # 4. Upsert the session's spend into the per-project rollup ledger.
12
- # 5. Emit bursar.session.recorded and drop the breadcrumb.
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. Skip silently when bursar.enabled is false.
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
- # 3. Surface "this project burned $X this week" by summing the per-project
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
- # 4. Emit bursar.rollup.surfaced (or bursar.rollup.skipped) for audit.
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.2.1",
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 is **disabled by default**. Enable it per-project in `.claude/settings.json`:
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
- Or globally in `~/.claude/settings.json` to audit all projects.
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,
@@ -2,7 +2,6 @@
2
2
  "plugin_name": "cartographer",
3
3
  "storage_path": "~/.onlooker",
4
4
  "cartographer": {
5
- "enabled": false,
6
5
  "audit_interval_hours": 24,
7
6
  "phase_timeout_seconds": 60,
8
7
  "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
 
@@ -27,8 +27,6 @@ export _HOOK_SESSION_ID
27
27
  REPO_ROOT=$(cartographer_project_repo_root "$CWD")
28
28
  cartographer_config_load "$REPO_ROOT"
29
29
 
30
- cartographer_config_enabled || exit 0
31
-
32
30
  PROJECT_KEY=$(cartographer_project_key "$CWD")
33
31
  [[ -z "$PROJECT_KEY" ]] && exit 0
34
32
 
@@ -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"