@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": "compass",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Pre-write intent clarity gate. Intercepts write-class tool calls and requires a confidence threshold before allowing them to proceed. Evaluates the pending write against the prior assistant turn as context to avoid false positives on question-answer turns. 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.4.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.3.0...compass-v0.4.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.3.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.2.1...compass-v0.3.0) (2026-06-15)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -38,17 +38,13 @@ The default `error_policy` is `closed`: when fewer than `evaluator.min_valid_sam
|
|
|
38
38
|
|
|
39
39
|
## Activation
|
|
40
40
|
|
|
41
|
-
Compass
|
|
41
|
+
Install Compass from the marketplace:
|
|
42
42
|
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
"compass": {
|
|
46
|
-
"enabled": true
|
|
47
|
-
}
|
|
48
|
-
}
|
|
43
|
+
```
|
|
44
|
+
/plugin install compass@onlooker-community
|
|
49
45
|
```
|
|
50
46
|
|
|
51
|
-
|
|
47
|
+
Compass activates as soon as it is installed — no additional configuration is required.
|
|
52
48
|
|
|
53
49
|
## Configuration
|
|
54
50
|
|
|
@@ -57,7 +53,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
57
53
|
```json
|
|
58
54
|
{
|
|
59
55
|
"compass": {
|
|
60
|
-
"enabled": false,
|
|
61
56
|
"evaluator": {
|
|
62
57
|
"model": "claude-haiku-4-5-20251001",
|
|
63
58
|
"n": 5,
|
|
@@ -102,7 +97,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
102
97
|
|
|
103
98
|
| Key | Default | Description |
|
|
104
99
|
|-----|---------|-------------|
|
|
105
|
-
| `enabled` | `false` | Must be `true` for any evaluation to run. |
|
|
106
100
|
| `evaluator.model` | `claude-haiku-4-5-20251001` | Model used for each evaluation sample. Haiku is fast and cheap; the convergence prompt does not require deep reasoning. |
|
|
107
101
|
| `evaluator.n` | `5` | Number of parallel evaluation samples launched per check. |
|
|
108
102
|
| `evaluator.temperature` | `0.3` | Sampling temperature. The noise floor at `n=5`, `temperature=0.3` is ~0.62–0.65 for unambiguous tasks, which informs the `confidence_threshold` default. |
|
|
@@ -46,10 +46,6 @@ export _HOOK_SESSION_ID="$SESSION_ID"
|
|
|
46
46
|
|
|
47
47
|
compass_config_load "$CWD"
|
|
48
48
|
|
|
49
|
-
if ! compass_config_enabled; then
|
|
50
|
-
exit 0
|
|
51
|
-
fi
|
|
52
|
-
|
|
53
49
|
# -----------------------------------------------------------------------
|
|
54
50
|
# Resolve file path and context from tool input.
|
|
55
51
|
# -----------------------------------------------------------------------
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
# Compass SessionStart hook.
|
|
3
3
|
#
|
|
4
4
|
# Fires at every session start. Responsibilities:
|
|
5
|
-
# 1.
|
|
6
|
-
# 2. Create storage directories.
|
|
5
|
+
# 1. Create storage directories.
|
|
7
6
|
# 3. Initialize session state file:
|
|
8
7
|
# - turn_check_count: 0
|
|
9
8
|
# - cooldown table: empty
|
|
@@ -33,10 +32,6 @@ _done() { exit 0; }
|
|
|
33
32
|
|
|
34
33
|
compass_config_load "$CWD"
|
|
35
34
|
|
|
36
|
-
if ! compass_config_enabled; then
|
|
37
|
-
_done
|
|
38
|
-
fi
|
|
39
|
-
|
|
40
35
|
export _HOOK_SESSION_ID="$SESSION_ID"
|
|
41
36
|
|
|
42
37
|
ONLOOKER_DIR="${ONLOOKER_DIR:-${HOME}/.onlooker}"
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
# compass_config_load <repo_root> # populates _COMPASS_CONFIG (JSON)
|
|
11
11
|
# compass_config_get <jq-path> # echoes string value (empty if unset)
|
|
12
12
|
# compass_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
13
|
-
# compass_config_enabled # 0 if compass.enabled is true
|
|
14
13
|
|
|
15
14
|
_COMPASS_CONFIG="{}"
|
|
16
15
|
|
|
@@ -64,9 +63,3 @@ compass_config_get_json() {
|
|
|
64
63
|
local path="$1"
|
|
65
64
|
printf '%s' "$_COMPASS_CONFIG" | jq -c "${path}" 2>/dev/null
|
|
66
65
|
}
|
|
67
|
-
|
|
68
|
-
compass_config_enabled() {
|
|
69
|
-
local v
|
|
70
|
-
v=$(compass_config_get '.compass.enabled')
|
|
71
|
-
[[ "$v" == "true" ]]
|
|
72
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "counsel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Weekly synthesis and recommendations from the full observability stack. Reads all plugin event logs, produces a structured improvement brief, and injects it at session start when the last brief is stale.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Onlooker Community",
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.4.0...counsel-v0.5.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.4.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.3.1...counsel-v0.4.0) (2026-06-24)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -16,7 +16,7 @@ The synthesis pass produces a structured JSON object — `summary`, `patterns`,
|
|
|
16
16
|
|
|
17
17
|
Counsel partitions the event stream by source plugin, recognizing `tribunal`, `echo`, `sentinel`, `warden`, `oracle`, and `meridian` events (everything else maps to a generic `onlooker_events` source). The synthesis prompt focuses on recurring failure modes and blocked gates, prompt regression trends, budget and resource pressure, quality trends over time, and what the team is consistently doing well.
|
|
18
18
|
|
|
19
|
-
The hook always exits 0 — it never blocks a session from starting. It skips silently when
|
|
19
|
+
The hook always exits 0 — it never blocks a session from starting. It skips silently when the directory has no project key (non-git), the latest brief is still fresh, or fewer than `capture.min_events` events fall inside the lookback window.
|
|
20
20
|
|
|
21
21
|
## On-demand brief — `/counsel`
|
|
22
22
|
|
|
@@ -32,15 +32,13 @@ The on-demand path bypasses only the staleness gate — output, events, storage
|
|
|
32
32
|
|
|
33
33
|
## Activation
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
Install via the marketplace:
|
|
36
36
|
|
|
37
|
-
```json
|
|
38
|
-
{
|
|
39
|
-
"counsel": {
|
|
40
|
-
"enabled": false
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
37
|
```
|
|
38
|
+
/plugin install counsel@onlooker-community
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Installing the plugin enables it. To remove it, uninstall the plugin.
|
|
44
42
|
|
|
45
43
|
## Configuration
|
|
46
44
|
|
|
@@ -49,7 +47,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
49
47
|
```json
|
|
50
48
|
{
|
|
51
49
|
"counsel": {
|
|
52
|
-
"enabled": true,
|
|
53
50
|
"synthesis_interval_days": 7,
|
|
54
51
|
"lookback_days": 30,
|
|
55
52
|
"evaluator": {
|
|
@@ -71,7 +68,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
71
68
|
|
|
72
69
|
| Key | Default | Description |
|
|
73
70
|
|-----|---------|-------------|
|
|
74
|
-
| `enabled` | `true` | Set to `false` to skip all synthesis and injection. |
|
|
75
71
|
| `synthesis_interval_days` | `7` | Minimum age (in days) of the latest brief before a new one is generated. A brief younger than this is considered fresh and the hook skips. |
|
|
76
72
|
| `lookback_days` | `30` | How far back in the event log to read when synthesizing a brief. |
|
|
77
73
|
| `evaluator.model` | `claude-haiku-4-5-20251001` | Model used for the synthesis pass. Haiku is fast and cheap; upgrade for higher-stakes repos. |
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
# full event log and injects the resulting brief as additionalContext.
|
|
7
7
|
#
|
|
8
8
|
# Skip conditions (all silent):
|
|
9
|
-
# - counsel.enabled is false
|
|
10
9
|
# - no project key (non-git directory)
|
|
11
10
|
# - brief is still fresh
|
|
12
11
|
# - fewer than min_events events in the lookback window
|
|
@@ -59,11 +58,6 @@ export _HOOK_SESSION_ID="$SESSION_ID"
|
|
|
59
58
|
REPO_ROOT=$(counsel_project_repo_root "$CWD")
|
|
60
59
|
counsel_config_load "$REPO_ROOT"
|
|
61
60
|
|
|
62
|
-
if ! counsel_config_enabled; then
|
|
63
|
-
_emit ""
|
|
64
|
-
exit 0
|
|
65
|
-
fi
|
|
66
|
-
|
|
67
61
|
PROJECT_KEY=$(counsel_project_key "$CWD")
|
|
68
62
|
if [[ -z "$PROJECT_KEY" ]]; then
|
|
69
63
|
_emit ""
|
|
@@ -100,7 +94,7 @@ CONTEXT="Counsel — weekly improvement brief (auto-generated from your onlooker
|
|
|
100
94
|
|
|
101
95
|
${BRIEF_CONTENT}
|
|
102
96
|
|
|
103
|
-
(Counsel injected this brief for project key ${PROJECT_KEY}.
|
|
97
|
+
(Counsel injected this brief for project key ${PROJECT_KEY}.)"
|
|
104
98
|
|
|
105
99
|
_emit "$CONTEXT"
|
|
106
100
|
exit 0
|
|
@@ -10,7 +10,6 @@
|
|
|
10
10
|
# counsel_config_load <repo_root> # populates _COUNSEL_CONFIG (JSON)
|
|
11
11
|
# counsel_config_get <jq-path> # echoes string value (empty if unset)
|
|
12
12
|
# counsel_config_get_json <jq-path> # echoes JSON value (null if unset)
|
|
13
|
-
# counsel_config_enabled # 0 if counsel.enabled is true
|
|
14
13
|
|
|
15
14
|
_COUNSEL_CONFIG="{}"
|
|
16
15
|
|
|
@@ -65,8 +64,3 @@ counsel_config_get_json() {
|
|
|
65
64
|
printf '%s' "$_COUNSEL_CONFIG" | jq -c "${path}" 2>/dev/null
|
|
66
65
|
}
|
|
67
66
|
|
|
68
|
-
counsel_config_enabled() {
|
|
69
|
-
local v
|
|
70
|
-
v=$(counsel_config_get '.counsel.enabled')
|
|
71
|
-
[[ "$v" == "true" ]]
|
|
72
|
-
}
|
|
@@ -31,11 +31,6 @@ source "$PLUGIN_ROOT/scripts/lib/counsel-brief.sh"
|
|
|
31
31
|
REPO_ROOT=$(counsel_project_repo_root "$(pwd)")
|
|
32
32
|
counsel_config_load "$REPO_ROOT"
|
|
33
33
|
|
|
34
|
-
if ! counsel_config_enabled; then
|
|
35
|
-
echo "Counsel is disabled. Set counsel.enabled=true in .claude/settings.json to enable."
|
|
36
|
-
exit 0
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
34
|
PROJECT_KEY=$(counsel_project_key "$(pwd)")
|
|
40
35
|
if [[ -z "$PROJECT_KEY" ]]; then
|
|
41
36
|
echo "No project key — Counsel needs a git repository (remote or root) to scope briefs. Skipping."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "curator",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Maintenance layer for the user's typed auto-memory store. At every SessionStart, runs four cheap heuristic checks (date_decayed, path_broken, broken_index, orphaned_memory) against the memories at ~/.claude/projects/<encoded>/memory/ inside a wall-clock budget. Surfaces findings as a one-line pointer to /curator review; never edits the memory store directly. 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/curator-v0.1.0...curator-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.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.0.1...curator-v0.1.0) (2026-06-04)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -16,17 +16,7 @@ Curator is a sibling plugin to [`ecosystem`](../../) and assumes the Onlooker ob
|
|
|
16
16
|
|
|
17
17
|
## Activation
|
|
18
18
|
|
|
19
|
-
Curator
|
|
20
|
-
|
|
21
|
-
```json
|
|
22
|
-
{
|
|
23
|
-
"curator": {
|
|
24
|
-
"enabled": true
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Or globally in `~/.claude/settings.json`. See [`config.json`](config.json) for the full set of tunable defaults.
|
|
19
|
+
Install Curator with `/plugin install curator@onlooker-community` — installing the plugin enables it. See [`config.json`](config.json) for the full set of tunable defaults.
|
|
30
20
|
|
|
31
21
|
## Storage layout
|
|
32
22
|
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
# Hook contract:
|
|
9
9
|
# - Always exits 0. Never blocks session start.
|
|
10
10
|
# - Emits valid hookSpecificOutput JSON even when nothing to inject.
|
|
11
|
-
# - No-ops when curator.enabled is not true.
|
|
12
11
|
# - No-ops when no git context, no memory store path, or no checks pass
|
|
13
12
|
# the rate gate.
|
|
14
13
|
#
|
|
@@ -65,11 +64,6 @@ SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.session_id // ""' 2>/dev/null) || SE
|
|
|
65
64
|
REPO_ROOT=$(curator_project_repo_root "$CWD")
|
|
66
65
|
curator_config_load "$REPO_ROOT"
|
|
67
66
|
|
|
68
|
-
if ! curator_config_enabled; then
|
|
69
|
-
_emit ""
|
|
70
|
-
exit 0
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
67
|
PROJECT_KEY=$(curator_project_key "$CWD")
|
|
74
68
|
if [[ -z "$PROJECT_KEY" ]]; then
|
|
75
69
|
_emit ""
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
# Exposes:
|
|
10
10
|
# curator_config_load <repo_root> # populates _CURATOR_CONFIG (JSON)
|
|
11
11
|
# curator_config_get <jq-path> # echoes string value (empty if unset)
|
|
12
|
-
# curator_config_enabled # 0 if curator.enabled is true
|
|
13
12
|
#
|
|
14
13
|
# Settings overlay only touches the `curator.*` subtree of settings.json.
|
|
15
14
|
|
|
@@ -59,9 +58,3 @@ curator_config_get() {
|
|
|
59
58
|
printf '%s' "$_CURATOR_CONFIG" \
|
|
60
59
|
| jq -r "${path} | if . == null then empty else . end" 2>/dev/null
|
|
61
60
|
}
|
|
62
|
-
|
|
63
|
-
curator_config_enabled() {
|
|
64
|
-
local v
|
|
65
|
-
v=$(curator_config_get '.curator.enabled')
|
|
66
|
-
[[ "$v" == "true" ]]
|
|
67
|
-
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "echo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Prompt-change regression detection. When a watched agent file is modified, Echo runs a single-judge quality pass via claude -p and compares the score against a stored baseline to report improved, degraded, or neutral. 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/echo-v0.2.0...echo-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/echo-v0.1.0...echo-v0.2.0) (2026-05-25)
|
|
4
11
|
|
|
5
12
|
|
package/plugins/echo/README.md
CHANGED
|
@@ -20,14 +20,10 @@ The hook always exits 0 — it never blocks a session from ending.
|
|
|
20
20
|
|
|
21
21
|
## Activation
|
|
22
22
|
|
|
23
|
-
Echo
|
|
23
|
+
Install Echo from the marketplace and it is active immediately:
|
|
24
24
|
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
"echo": {
|
|
28
|
-
"enabled": true
|
|
29
|
-
}
|
|
30
|
-
}
|
|
25
|
+
```
|
|
26
|
+
/plugin install echo@onlooker-community
|
|
31
27
|
```
|
|
32
28
|
|
|
33
29
|
## Configuration
|
|
@@ -37,7 +33,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
37
33
|
```json
|
|
38
34
|
{
|
|
39
35
|
"echo": {
|
|
40
|
-
"enabled": true,
|
|
41
36
|
"watch_paths": ["plugins/*/agents/*.md"],
|
|
42
37
|
"exclude_paths": [],
|
|
43
38
|
"drift_threshold": 0.05,
|
|
@@ -51,7 +46,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
51
46
|
|
|
52
47
|
| Key | Default | Description |
|
|
53
48
|
|-----|---------|-------------|
|
|
54
|
-
| `enabled` | `false` | Must be `true` for any evaluation to run. |
|
|
55
49
|
| `watch_paths` | `["plugins/*/agents/*.md"]` | Glob patterns (relative to repo root) of files to watch. Bash extended glob syntax. |
|
|
56
50
|
| `exclude_paths` | `[]` | Patterns to exclude. `plugins/echo/**` is always excluded regardless of this setting. |
|
|
57
51
|
| `drift_threshold` | `0.05` | Minimum absolute score delta to classify a change as improvement or regression. Deltas below this are reported as neutral. |
|
package/plugins/echo/config.json
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env bash
|
|
2
2
|
# Echo Stop-gate hook.
|
|
3
3
|
#
|
|
4
|
-
# Triggered by Stop.
|
|
5
|
-
# When enabled, detects which watched agent files changed in this session,
|
|
4
|
+
# Triggered by Stop. Detects which watched agent files changed in this session,
|
|
6
5
|
# runs a single-judge advisory pass on each, and compares the score against a
|
|
7
6
|
# stored baseline to report improved / degraded / neutral.
|
|
8
7
|
#
|
|
@@ -61,7 +60,6 @@ REPO_ROOT=$(echo_project_repo_root "$CWD")
|
|
|
61
60
|
[[ -z "$REPO_ROOT" ]] && _done
|
|
62
61
|
|
|
63
62
|
CLAUDE_PLUGIN_ROOT="$PLUGIN_ROOT" echo_config_load "$REPO_ROOT"
|
|
64
|
-
echo_config_enabled || _done
|
|
65
63
|
|
|
66
64
|
PROJECT_KEY=$(echo_project_key "$CWD")
|
|
67
65
|
[[ -z "$PROJECT_KEY" ]] && _done
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "governor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Resource governance and budget enforcement for the Onlooker ecosystem. Tracks per-session token and cost spend, gates Task spawns before they exceed a configurable budget ceiling, and emits governor.* events for audit. Named for the steam-engine governor — a device that regulates output. 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/governor-v0.2.1...governor-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.1](https://github.com/onlooker-community/ecosystem/compare/governor-v0.2.0...governor-v0.2.1) (2026-06-10)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -42,17 +42,13 @@ The raw estimate is multiplied by `safety_margin` before the gate check. Cost is
|
|
|
42
42
|
|
|
43
43
|
## Activation
|
|
44
44
|
|
|
45
|
-
Governor
|
|
45
|
+
Install Governor from the marketplace:
|
|
46
46
|
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
"governor": {
|
|
50
|
-
"enabled": true
|
|
51
|
-
}
|
|
52
|
-
}
|
|
47
|
+
```
|
|
48
|
+
/plugin install governor@onlooker-community
|
|
53
49
|
```
|
|
54
50
|
|
|
55
|
-
|
|
51
|
+
Once installed, the plugin is active. No additional configuration is required to enable it.
|
|
56
52
|
|
|
57
53
|
## Configuration
|
|
58
54
|
|
|
@@ -61,7 +57,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
61
57
|
```json
|
|
62
58
|
{
|
|
63
59
|
"governor": {
|
|
64
|
-
"enabled": false,
|
|
65
60
|
"enforcement": "soft",
|
|
66
61
|
"global_policy_path": "~/.onlooker/governance/global-policy.yaml",
|
|
67
62
|
"session": {
|
|
@@ -80,7 +75,6 @@ All keys are optional. Unset keys fall back to the plugin's `config.json` defaul
|
|
|
80
75
|
|
|
81
76
|
| Key | Default | Description |
|
|
82
77
|
|-----|---------|-------------|
|
|
83
|
-
| `enabled` | `false` | Must be `true` for any tracking, gating, or event emission to run. |
|
|
84
78
|
| `enforcement` | `"soft"` | `"soft"` tracks and emits events but never blocks on a budget overrun; `"hard"` blocks `Task` spawns once the budget is exceeded. A `ceiling_exceeded` overrun blocks in both modes. |
|
|
85
79
|
| `global_policy_path` | `"~/.onlooker/governance/global-policy.yaml"` | Path checked at `SessionStart`. Missing file warns to stderr only — the session runs without a global ceiling. |
|
|
86
80
|
| `session.tokens_default` | `100000` | Per-session token budget. Projecting past this triggers `budget_exceeded`. Overridable per session via the `ONLOOKER_SESSION_BUDGET_TOKENS` environment variable. |
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
#
|
|
7
7
|
# Hook contract:
|
|
8
8
|
# - Always exits 0. Recording failure must never block the session.
|
|
9
|
-
# - Skips silently when governor.enabled is false.
|
|
10
9
|
|
|
11
10
|
set -uo pipefail
|
|
12
11
|
|
|
@@ -52,10 +51,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
|
|
|
52
51
|
|
|
53
52
|
governor_config_load "$CWD"
|
|
54
53
|
|
|
55
|
-
if ! governor_config_enabled; then
|
|
56
|
-
_done
|
|
57
|
-
fi
|
|
58
|
-
|
|
59
54
|
# -----------------------------------------------------------------------
|
|
60
55
|
# Extract hook fields.
|
|
61
56
|
# -----------------------------------------------------------------------
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
# - Exit 0 always.
|
|
19
19
|
# - To block: write {"decision": "block", "reason": "..."} to stdout.
|
|
20
20
|
# - To allow: write nothing (or {"decision": "allow"}) to stdout.
|
|
21
|
-
# - Skips silently when governor.enabled is false.
|
|
22
21
|
|
|
23
22
|
set -uo pipefail
|
|
24
23
|
|
|
@@ -70,10 +69,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
|
|
|
70
69
|
|
|
71
70
|
governor_config_load "$CWD"
|
|
72
71
|
|
|
73
|
-
if ! governor_config_enabled; then
|
|
74
|
-
_allow
|
|
75
|
-
fi
|
|
76
|
-
|
|
77
72
|
# -----------------------------------------------------------------------
|
|
78
73
|
# Read config.
|
|
79
74
|
# -----------------------------------------------------------------------
|
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
# Governor SessionStart hook.
|
|
3
3
|
#
|
|
4
4
|
# Fires at every session start. Responsibilities:
|
|
5
|
-
# 1.
|
|
6
|
-
# 2.
|
|
7
|
-
# 3.
|
|
8
|
-
# 4.
|
|
9
|
-
# 5. Emit governor.lock.stale_cleared for each stale lock removed.
|
|
5
|
+
# 1. Create governance storage directories.
|
|
6
|
+
# 2. Sweep stale lock files left by crashed prior sessions.
|
|
7
|
+
# 3. Check global-policy.yaml exists (warn if missing, don't block).
|
|
8
|
+
# 4. Emit governor.lock.stale_cleared for each stale lock removed.
|
|
10
9
|
#
|
|
11
10
|
# Hook contract:
|
|
12
11
|
# - Always exits 0. Never blocks SessionStart.
|
|
@@ -51,10 +50,6 @@ _done() { exit 0; }
|
|
|
51
50
|
|
|
52
51
|
governor_config_load "$CWD"
|
|
53
52
|
|
|
54
|
-
if ! governor_config_enabled; then
|
|
55
|
-
_done
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
53
|
# -----------------------------------------------------------------------
|
|
59
54
|
# 1. Ensure storage directories exist.
|
|
60
55
|
# -----------------------------------------------------------------------
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
#
|
|
7
7
|
# Hook contract:
|
|
8
8
|
# - Always exits 0. Never blocks Stop.
|
|
9
|
-
# - Skips silently when governor.enabled is false.
|
|
10
9
|
# - Errors from ledger reads are swallowed; emits best-effort totals.
|
|
11
10
|
|
|
12
11
|
set -uo pipefail
|
|
@@ -51,10 +50,6 @@ CWD=$(printf '%s' "$INPUT" | jq -r '.cwd // ""' 2>/dev/null) || CWD=""
|
|
|
51
50
|
|
|
52
51
|
governor_config_load "$CWD"
|
|
53
52
|
|
|
54
|
-
if ! governor_config_enabled; then
|
|
55
|
-
_done
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
53
|
# -----------------------------------------------------------------------
|
|
59
54
|
# Read session totals from the ledger.
|
|
60
55
|
# -----------------------------------------------------------------------
|