一键导入
feedback-observing
Read agent interaction logs across packs and detect operational patterns. Emits state-transition FeedbackEvents for degradation/recovery.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Read agent interaction logs across packs and detect operational patterns. Emits state-transition FeedbackEvents for degradation/recovery.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Capture point-in-time MER (MiDi Experience Record) for a wallet — data state, visual screenshot, perception context, and decision metadata.
Compare user expectations (UTCs) with code reality to identify gaps. Use when you need to understand discrepancies between what users expect and what code actually does.
Batch scan canvases for GAP sections, deduplicate, route to correct repos, draft issue bodies, and file confirmed issues.
Parallel multi-user processing using Claude Code native teams. Leader spawns workers per user, each runs /ingest-dm, leader aggregates for cross-canvas patterns.
Validate gap hypotheses by manually simulating features for individual users and measuring commitment, not satisfaction.
Automated end-to-end feedback pipeline that pulls new Supabase entries, enriches, classifies, routes to canvases, and generates a synthesis report.
| name | feedback-observing |
| description | Read agent interaction logs across packs and detect operational patterns. Emits state-transition FeedbackEvents for degradation/recovery. |
| user-invocable | true |
| allowed-tools | Read, Write, Glob, Grep, Bash |
Read agent interaction logs across all packs, detect operational patterns (error rates, duration outliers, zero-invocation skills), and emit state-transition FeedbackEvents when patterns change.
This skill closes the agent feedback loop — agents report back what worked and what failed.
State-transition only emission. Only emit FeedbackEvents when a skill's operational state changes (healthy → concerning, concerning → healthy). This prevents recursive signal inflation from repeated analysis of the same stable state.
/feedback-observe # Analyze all packs' agent logs
/feedback-observe --pack observer # Specific pack only
/feedback-observe --since 7d # Time range (default: 30d)
Glob: grimoires/*/agent-logs/*.jsonl
For each JSONL file:
Parse each line (skip malformed lines, log warning)
Filter by --pack if specified
Filter by --since if specified (compare ts field)
Collect all log entries into a unified dataset.
If no log files found: Report "No agent logs found. Skills need to emit logs — see agent-log-format.md" and exit.
Group entries by pack and skill, then compute:
For each (pack, skill) pair:
1. ERROR RATE
error_count = entries where status="error"
total_count = all entries
error_rate = error_count / total_count
IF error_rate > 0.20 → state = "concerning"
IF error_rate <= 0.10 → state = "healthy"
IF 0.10 < error_rate <= 0.20 → state = "warning"
2. DURATION OUTLIERS
Compute median duration_ms across all entries for this skill
IF any entry has duration_ms > 2x median → flag as outlier
IF outlier_count / total_count > 0.20 → state = "slow"
3. ZERO-INVOCATION SKILLS
Compare skills found in logs against manifest.json skills arrays
Skills in manifest but NOT in logs → "dormant" (potential discoverability problem)
4. RETRY PATTERNS
Detect same skill invoked 3+ times within 5 minutes → "friction"
5. MISSING ARTIFACT PATTERNS
Entries where error contains "not found" or "missing" → "missing dependency"
Read previous report: grimoires/keeper/agent-feedback/report-latest.md
IF previous report exists:
Parse previous state per skill
Compare current state with previous state
ONLY emit FeedbackEvents for STATE TRANSITIONS:
- healthy → concerning (degradation)
- concerning → healthy (recovery)
- new skill appeared as "dormant"
- skill crossed duration outlier threshold for first time
DO NOT re-emit for unchanged states.
IF no previous report:
Treat all current states as new (emit for any non-healthy state)
For each state transition detected, emit via the Loa event bus:
source .claude/scripts/lib/event-bus.sh
emit_event "observer.state_transition" \
'{
"domain": "code",
"target": {
"type": "artifact",
"selector": "{pack}/{skill}"
},
"signal": {
"direction": "{negative for degradation, positive for recovery}",
"weight": 0.5,
"specificity": 0.7,
"content": "{state_transition}: {description}",
"kind": "behavioral"
},
"fingerprint": "{sha256 of '{pattern_type}:{pack}:{skill}:{window_start}:{window_end}'}"
}' \
"observer/feedback-observing" \
"" "" \
"{pack}/{skill}"
The bus auto-generates id, time, specversion in the CloudEvents envelope.
Fingerprint deduplication: The fingerprint field maps to the bus idempotency key. Same fingerprint = same finding for the same time window. The bus .idempotency/ store prevents duplicate processing.
Write to grimoires/keeper/agent-feedback/report-{YYYY-MM-DD}.md:
---
type: agent-feedback-report
generated: "{RFC 3339 UTC}"
period: "{start} to {end}"
packs_analyzed: {N}
skills_analyzed: {N}
transitions_detected: {N}
---
# Agent Feedback Report: {date}
## Skill Health Matrix
| Pack | Skill | Invocations | Error Rate | Median Duration | State |
|------|-------|-------------|-----------|-----------------|-------|
| observer | observing-users | 12 | 8% | 340ms | healthy |
| artisan | inscribing-taste | 5 | 40% | 120ms | concerning |
| ... | ... | ... | ... | ... | ... |
## State Transitions (since last report)
| Skill | Previous | Current | Evidence |
|-------|----------|---------|----------|
| artisan/inscribing-taste | healthy | concerning | Error rate 8% → 40% |
## Duration Analysis
| Skill | Median | P95 | Outliers |
|-------|--------|-----|----------|
| ... | ... | ... | ... |
## Dormant Skills
| Pack | Skill | In Manifest | Invocations |
|------|-------|-------------|-------------|
| ... | ... | yes | 0 |
## Suggested Actions
- {actionable recommendation per concerning skill}
Also copy to grimoires/keeper/agent-feedback/report-latest.md (overwrite).
Create grimoires/keeper/agent-feedback/ directory if it doesn't exist.
| Error | Resolution |
|---|---|
| No log files found | Report empty state, exit 0 |
| Malformed JSONL line | Skip line, log warning, continue |
| No previous report | Treat all states as new |
| Manifest not found | Skip dormant skill detection |
--pack not found in logs | Report "No logs for pack {name}" |
grimoires/*/agent-logs/*.jsonl, grimoires/keeper/agent-feedback/report-latest.mdgrimoires/keeper/agent-feedback/report-{date}.md, grimoires/shared/feedback/events/{date}.jsonl/artisan-patterns cross-domain analysis, /stale confidence systemreport-latest.md is updated--pack filter works correctly--since filter works correctly