@onlooker-community/ecosystem 0.30.1 → 0.31.1
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 +14 -0
- package/package.json +2 -3
- package/plugins/archivist/.claude-plugin/plugin.json +1 -1
- package/plugins/archivist/CHANGELOG.md +14 -0
- package/plugins/archivist/README.md +4 -10
- package/plugins/archivist/config.json +0 -1
- package/plugins/archivist/scripts/hooks/archivist-extract.sh +10 -6
- package/plugins/archivist/scripts/hooks/archivist-inject.sh +12 -7
- package/plugins/archivist/scripts/lib/archivist-config.sh +0 -8
- package/plugins/archivist/scripts/lib/archivist-events.sh +6 -0
- package/plugins/assayer/.claude-plugin/plugin.json +1 -1
- package/plugins/assayer/CHANGELOG.md +14 -0
- package/plugins/assayer/README.md +4 -10
- package/plugins/assayer/config.json +0 -1
- package/plugins/assayer/scripts/hooks/assayer-stop.sh +11 -3
- package/plugins/assayer/scripts/lib/assayer-config.sh +0 -6
- package/plugins/assayer/scripts/lib/assayer-events.sh +6 -0
- package/plugins/bursar/.claude-plugin/plugin.json +1 -1
- package/plugins/bursar/CHANGELOG.md +14 -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/bursar/scripts/lib/bursar-events.sh +6 -0
- package/plugins/cartographer/.claude-plugin/plugin.json +1 -1
- package/plugins/cartographer/CHANGELOG.md +14 -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/scripts/lib/cartographer-events.sh +6 -0
- package/plugins/cartographer/skills/cartographer/SKILL.md +0 -5
- package/plugins/compass/.claude-plugin/plugin.json +1 -1
- package/plugins/compass/CHANGELOG.md +14 -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/compass/scripts/lib/compass-events.sh +6 -0
- package/plugins/counsel/.claude-plugin/plugin.json +1 -1
- package/plugins/counsel/CHANGELOG.md +14 -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/scripts/lib/counsel-events.sh +6 -0
- package/plugins/counsel/skills/counsel/SKILL.md +0 -5
- package/plugins/curator/.claude-plugin/plugin.json +1 -1
- package/plugins/curator/CHANGELOG.md +14 -0
- package/plugins/curator/README.md +1 -11
- package/plugins/curator/config.json +0 -1
- package/plugins/curator/scripts/hooks/curator-session-start.sh +10 -6
- package/plugins/curator/scripts/lib/curator-config.sh +0 -7
- package/plugins/curator/scripts/lib/curator-emit.sh +10 -0
- package/plugins/echo/.claude-plugin/plugin.json +1 -1
- package/plugins/echo/CHANGELOG.md +14 -0
- package/plugins/echo/README.md +3 -9
- package/plugins/echo/config.json +0 -1
- package/plugins/echo/scripts/hooks/echo-stop-gate.sh +11 -3
- package/plugins/echo/scripts/lib/echo-config.sh +0 -6
- package/plugins/echo/scripts/lib/echo-events.sh +6 -0
- package/plugins/governor/.claude-plugin/plugin.json +1 -1
- package/plugins/governor/CHANGELOG.md +14 -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 +10 -5
- package/plugins/governor/scripts/hooks/governor-pre-tool-use.sh +10 -5
- package/plugins/governor/scripts/hooks/governor-session-start.sh +14 -9
- package/plugins/governor/scripts/hooks/governor-stop.sh +10 -5
- package/plugins/governor/scripts/lib/governor-config.sh +0 -7
- package/plugins/governor/scripts/lib/governor-events.sh +6 -0
- 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 +11 -6
- package/plugins/historian/scripts/hooks/historian-session-end.sh +10 -2
- package/plugins/historian/scripts/lib/historian-config.sh +0 -6
- package/plugins/historian/scripts/lib/historian-emit.sh +10 -0
- package/plugins/inspector/.claude-plugin/plugin.json +1 -1
- package/plugins/inspector/CHANGELOG.md +14 -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/inspector/scripts/lib/inspector-events.sh +6 -0
- package/plugins/librarian/.claude-plugin/plugin.json +1 -1
- package/plugins/librarian/CHANGELOG.md +14 -0
- package/plugins/librarian/README.md +5 -9
- package/plugins/librarian/config.json +0 -1
- package/plugins/librarian/scripts/hooks/librarian-session-end.sh +10 -2
- package/plugins/librarian/scripts/hooks/librarian-session-start.sh +10 -6
- package/plugins/librarian/scripts/lib/librarian-config.sh +0 -8
- package/plugins/librarian/scripts/lib/librarian-emit.sh +10 -0
- package/plugins/lineage/.claude-plugin/plugin.json +1 -1
- package/plugins/lineage/CHANGELOG.md +14 -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/scripts/lib/lineage-events.sh +6 -0
- package/plugins/lineage/skills/lineage/SKILL.md +1 -4
- package/plugins/scribe/.claude-plugin/plugin.json +1 -1
- package/plugins/scribe/CHANGELOG.md +14 -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-events.sh +6 -0
- package/plugins/scribe/scripts/lib/scribe-extract.sh +16 -12
- package/plugins/tribunal/.claude-plugin/plugin.json +1 -1
- package/plugins/tribunal/CHANGELOG.md +14 -0
- package/plugins/tribunal/README.md +7 -1
- package/plugins/tribunal/config.json +0 -1
- package/plugins/tribunal/scripts/hooks/tribunal-stop-gate.sh +13 -14
- package/plugins/tribunal/scripts/lib/tribunal-config.sh +0 -8
- package/plugins/tribunal/scripts/lib/tribunal-events.sh +6 -0
- package/plugins/warden/.claude-plugin/plugin.json +1 -1
- package/plugins/warden/CHANGELOG.md +14 -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/plugins/warden/scripts/lib/warden-events.sh +6 -0
- 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 +1 -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
|
@@ -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')
|
|
@@ -23,6 +23,12 @@ _cartographer_event_js_path() {
|
|
|
23
23
|
for c in "${candidates[@]}"; do
|
|
24
24
|
[[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
|
|
25
25
|
done
|
|
26
|
+
# Glob-discover the ecosystem plugin under the shared plugin cache parent;
|
|
27
|
+
# works regardless of which ecosystem version is installed.
|
|
28
|
+
local mjs
|
|
29
|
+
for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
|
|
30
|
+
[[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
|
|
31
|
+
done
|
|
26
32
|
return 1
|
|
27
33
|
}
|
|
28
34
|
|
|
@@ -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"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "compass",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
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,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.4.1](https://github.com/onlooker-community/ecosystem/compare/compass-v0.4.0...compass-v0.4.1) (2026-08-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
|
|
9
|
+
|
|
10
|
+
## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.3.0...compass-v0.4.0) (2026-07-03)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
3
17
|
## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/compass-v0.2.1...compass-v0.3.0) (2026-06-15)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -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
|
-
}
|
|
@@ -24,6 +24,12 @@ _compass_event_js_path() {
|
|
|
24
24
|
for c in "${candidates[@]}"; do
|
|
25
25
|
[[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
|
|
26
26
|
done
|
|
27
|
+
# Glob-discover the ecosystem plugin under the shared plugin cache parent;
|
|
28
|
+
# works regardless of which ecosystem version is installed.
|
|
29
|
+
local mjs
|
|
30
|
+
for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
|
|
31
|
+
[[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
|
|
32
|
+
done
|
|
27
33
|
return 1
|
|
28
34
|
}
|
|
29
35
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "counsel",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
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,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.5.1](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.5.0...counsel-v0.5.1) (2026-08-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
|
|
9
|
+
|
|
10
|
+
## [0.5.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.4.0...counsel-v0.5.0) (2026-07-03)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
3
17
|
## [0.4.0](https://github.com/onlooker-community/ecosystem/compare/counsel-v0.3.1...counsel-v0.4.0) (2026-06-24)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -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
|
-
}
|
|
@@ -24,6 +24,12 @@ _counsel_event_js_path() {
|
|
|
24
24
|
for c in "${candidates[@]}"; do
|
|
25
25
|
[[ -f "$c" ]] && { printf '%s' "$c"; return 0; }
|
|
26
26
|
done
|
|
27
|
+
# Glob-discover the ecosystem plugin under the shared plugin cache parent;
|
|
28
|
+
# works regardless of which ecosystem version is installed.
|
|
29
|
+
local mjs
|
|
30
|
+
for mjs in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
|
|
31
|
+
[[ -f "$mjs" ]] && { printf '%s' "$mjs"; return 0; }
|
|
32
|
+
done
|
|
27
33
|
return 1
|
|
28
34
|
}
|
|
29
35
|
|
|
@@ -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.1
|
|
3
|
+
"version": "0.2.1",
|
|
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,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.2.1](https://github.com/onlooker-community/ecosystem/compare/curator-v0.2.0...curator-v0.2.1) (2026-08-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
|
|
9
|
+
|
|
10
|
+
## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.1.0...curator-v0.2.0) (2026-07-03)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
3
17
|
## [0.1.0](https://github.com/onlooker-community/ecosystem/compare/curator-v0.0.1...curator-v0.1.0) (2026-06-04)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -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
|
#
|
|
@@ -26,6 +25,16 @@ if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
|
|
|
26
25
|
_ECOSYSTEM_ROOT="$_candidate"
|
|
27
26
|
fi
|
|
28
27
|
fi
|
|
28
|
+
# Glob-discover the ecosystem plugin under the shared plugin cache parent;
|
|
29
|
+
# works regardless of which ecosystem version is installed.
|
|
30
|
+
if [[ -z "$_ECOSYSTEM_ROOT" ]]; then
|
|
31
|
+
for _candidate in "${PLUGIN_ROOT}/../../ecosystem/"*/scripts/lib/validate-path.sh; do
|
|
32
|
+
if [[ -f "$_candidate" ]]; then
|
|
33
|
+
_ECOSYSTEM_ROOT="$(cd "$(dirname "$(dirname "$_candidate")")" && pwd)"
|
|
34
|
+
break
|
|
35
|
+
fi
|
|
36
|
+
done
|
|
37
|
+
fi
|
|
29
38
|
if [[ -n "$_ECOSYSTEM_ROOT" && -f "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh" ]]; then
|
|
30
39
|
# shellcheck disable=SC1091
|
|
31
40
|
CLAUDE_PLUGIN_ROOT="$_ECOSYSTEM_ROOT" source "${_ECOSYSTEM_ROOT}/scripts/lib/validate-path.sh"
|
|
@@ -65,11 +74,6 @@ SESSION_ID=$(printf '%s' "$INPUT" | jq -r '.session_id // ""' 2>/dev/null) || SE
|
|
|
65
74
|
REPO_ROOT=$(curator_project_repo_root "$CWD")
|
|
66
75
|
curator_config_load "$REPO_ROOT"
|
|
67
76
|
|
|
68
|
-
if ! curator_config_enabled; then
|
|
69
|
-
_emit ""
|
|
70
|
-
exit 0
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
77
|
PROJECT_KEY=$(curator_project_key "$CWD")
|
|
74
78
|
if [[ -z "$PROJECT_KEY" ]]; then
|
|
75
79
|
_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
|
-
}
|
|
@@ -16,6 +16,16 @@ _curator_resolve_event_js() {
|
|
|
16
16
|
ecosystem_root="$candidate"
|
|
17
17
|
fi
|
|
18
18
|
fi
|
|
19
|
+
# Glob-discover the ecosystem plugin under the shared plugin cache parent;
|
|
20
|
+
# works regardless of which ecosystem version is installed.
|
|
21
|
+
if [[ -z "$ecosystem_root" ]]; then
|
|
22
|
+
for candidate in "${plugin_root}/../../ecosystem/"*/scripts/lib/onlooker-event.mjs; do
|
|
23
|
+
if [[ -f "$candidate" ]]; then
|
|
24
|
+
ecosystem_root="$(cd "$(dirname "$(dirname "$candidate")")" && pwd)"
|
|
25
|
+
break
|
|
26
|
+
fi
|
|
27
|
+
done
|
|
28
|
+
fi
|
|
19
29
|
|
|
20
30
|
if [[ -n "$ecosystem_root" ]]; then
|
|
21
31
|
printf '%s/scripts/lib/onlooker-event.mjs' "$ecosystem_root"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "echo",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
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,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.3.1](https://github.com/onlooker-community/ecosystem/compare/echo-v0.3.0...echo-v0.3.1) (2026-08-01)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **plugins:** glob-discover ecosystem root so sub-plugins work from cache :relieved: ([#110](https://github.com/onlooker-community/ecosystem/issues/110)) ([3639240](https://github.com/onlooker-community/ecosystem/commit/3639240383e1b820e5d8ea42639e0b863ef0d90e))
|
|
9
|
+
|
|
10
|
+
## [0.3.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.2.0...echo-v0.3.0) (2026-07-03)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Features
|
|
14
|
+
|
|
15
|
+
* **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))
|
|
16
|
+
|
|
3
17
|
## [0.2.0](https://github.com/onlooker-community/ecosystem/compare/echo-v0.1.0...echo-v0.2.0) (2026-05-25)
|
|
4
18
|
|
|
5
19
|
|
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. |
|