mirror of
https://github.com/boshu2/agentops.git
synced 2026-09-14 15:08:13 +08:00
chore: sync generated artifacts after Wave 1 (COMMANDS.md, embedded hooks, skill counts, cobra registration)
Orchestrator post-wave step. Mechanical updates triggered by Wave 1
landings (soc-irg1.1 through .3):
- cli/cmd/ao/cobra_commands_test.go: add 'scope' and 'skills' to both
expectedCmds lists (TestCobraCommandTreeRegistration +
TestCobraExpectedCmdsMatchRegistration), so the cobra registration
conformance test passes with the new ao subcommands.
- cli/docs/COMMANDS.md: regenerated by scripts/generate-cli-reference.sh
to include ao scope and ao skills subcommands.
- cli/embedded/hooks/{hooks.json,edit-scope-guard.sh}: re-synced via
cd cli && make sync-hooks (per CLAUDE.md sync-hooks rule). Wave 2 (I5)
pre-mortem amendment will re-verify embedded copies after the mass
refactor.
- skills/SKILL-TIERS.md: add /scope row under Primitives table.
- docs/SKILLS.md, docs/ARCHITECTURE.md, PRODUCT.md: skill counts synced
by scripts/sync-skill-counts.sh from 69 → 70 (and user-facing 60 → 61).
All Wave 1 issues now closeable. Codex parity audit passes. Full
go test ./... green.
This commit is contained in:
+4
-4
@@ -27,7 +27,7 @@ The April 2026 Claude Code source analysis confirmed that Anthropic's internal t
|
||||
| Anthropic Concept | AgentOps Equivalent | Status |
|
||||
|---|---|---|
|
||||
| **Learning Loop** — memory extraction, dream cycle consolidation, future session injection | Knowledge Flywheel — `/retro` → `/forge` → `/harvest` → `ao inject`, tiered promotion (learning → pattern → rule), plus private local Dream via `/dream` and `ao overnight` | Shipped. On-demand capture/promotion is live, and Dream now provides the bounded private overnight compounding lane. GitHub nightly is the public proof harness for the contracts, not the user's private runtime. |
|
||||
| **Skillify** — AI watches patterns, packages them as reusable skills, compound growth | Skills system — 69 skills, `/heal-skill` audit, `/converter` cross-runtime export, SKILL-TIERS classification | Prototype built. `ao flywheel close-loop` now drafts review-only skills from repeated patterns; promotion polish is the remaining gap. |
|
||||
| **Skillify** — AI watches patterns, packages them as reusable skills, compound growth | Skills system — 70 skills, `/heal-skill` audit, `/converter` cross-runtime export, SKILL-TIERS classification | Prototype built. `ao flywheel close-loop` now drafts review-only skills from repeated patterns; promotion polish is the remaining gap. |
|
||||
| **Verification Agent** — adversarial AI auditing AI, VERDICT system for human review | Council architecture — `/council`, `/pre-mortem`, `/vibe`, `/post-mortem` with multi-model consensus, prediction tracking. Stage 4 behavioral validation adds holdout scenarios + satisfaction scoring in STEP 1.8. | Shipped. On-demand + always-on (STEP 1.8 fires automatically during `/validation`). |
|
||||
|
||||
Read the convergence table the right way: AgentOps and every harness like it gets absorbed into the model layer over time. Memory primitives, learning loops, even validation gates — frontier vendors will ship them natively. What stays yours is the corpus. AgentOps is the bridge tool that helps you build the moat *now*, with current models, before the harness layer commoditizes.
|
||||
@@ -53,7 +53,7 @@ Read the convergence table the right way: AgentOps and every harness like it get
|
||||
|
||||
The bridge tool has three layers. Each smooths a sharp edge of current models so you can build the moat (the corpus) underneath.
|
||||
|
||||
### 1. Skills (69 skills across 4 runtimes)
|
||||
### 1. Skills (70 skills across 4 runtimes)
|
||||
|
||||
**The discipline layer.**
|
||||
|
||||
@@ -94,7 +94,7 @@ The three load-bearing claims, expanded:
|
||||
- **Compounding context** — the knowledge flywheel. Each session captures learnings scored on specificity, actionability, novelty, context, and confidence. Learnings promote to patterns; patterns become planning rules. Next session starts loaded, not cold. Escape velocity is a measurable condition: retrieval × usage > decay.
|
||||
- **Hands-free reconciliation** — `/evolve` reads `GOALS.md`, picks the worst fitness gap, fixes it, validates, records the cycle. SRE error budgets meet Kubernetes control loops. `/dream` runs overnight bookkeeping; source code stays untouched.
|
||||
- **Multi-runtime, multi-model** — same skills target Claude Code, Codex CLI, Cursor, and OpenCode with documented Tier S/I/E proof levels. `/converter` exports to native formats. Mixed-vendor council judges provide independent perspectives — the discipline lives in the system, not the model.
|
||||
- **Zero setup, zero telemetry** — all state lives in local `.agents/` directories with no cloud dependency. 69 skills, 12 runtime hook event sections, and the flywheel can operate with no external daemon.
|
||||
- **Zero setup, zero telemetry** — all state lives in local `.agents/` directories with no cloud dependency. 70 skills, 12 runtime hook event sections, and the flywheel can operate with no external daemon.
|
||||
|
||||
## Strategic Bet
|
||||
|
||||
@@ -108,7 +108,7 @@ As of 2026-04-30:
|
||||
|
||||
- GitHub repo: 320 stars, 34 forks, 10 open issues, last pushed 2026-04-30
|
||||
- Public surface: GitHub Pages mkdocs site live at boshu2.github.io/agentops/; doctrine site live at 12factoragentops.com
|
||||
- Distribution/runtime reach: 69 shared skills, 69 checked-in Codex artifacts, and 35 Codex overrides
|
||||
- Distribution/runtime reach: 70 shared skills, 70 checked-in Codex artifacts, and 35 Codex overrides
|
||||
|
||||
**Measured operational proof:**
|
||||
|
||||
|
||||
@@ -427,7 +427,7 @@ func TestCobraCommandTreeRegistration(t *testing.T) {
|
||||
"index", "init", "inject", "knowledge", "lookup", "maturity",
|
||||
"memory", "metrics", "migrate", "mind", "mine", "notebook", "overnight", "plans",
|
||||
"pool", "quick-start", "ratchet", "retrieval-bench", "rpi",
|
||||
"scenario", "schedule", "search", "seed", "session", "session-outcome", "sessions", "status",
|
||||
"scenario", "schedule", "scope", "search", "seed", "session", "session-outcome", "sessions", "skills", "status",
|
||||
"store", "task-feedback", "task-status", "task-sync", "temper",
|
||||
"trace", "version", "vibe-check", "watch", "worktree",
|
||||
}
|
||||
@@ -487,7 +487,7 @@ func TestCobraExpectedCmdsMatchRegistration(t *testing.T) {
|
||||
"index", "init", "inject", "knowledge", "lookup", "maturity",
|
||||
"memory", "metrics", "migrate", "mind", "mine", "notebook", "overnight", "plans",
|
||||
"pool", "quick-start", "ratchet", "retrieval-bench", "rpi",
|
||||
"scenario", "schedule", "search", "seed", "session", "session-outcome", "sessions", "status",
|
||||
"scenario", "schedule", "scope", "search", "seed", "session", "session-outcome", "sessions", "skills", "status",
|
||||
"store", "task-feedback", "task-status", "task-sync", "temper",
|
||||
"trace", "version", "vibe-check", "watch", "worktree",
|
||||
}
|
||||
|
||||
+82
-1
@@ -50,6 +50,7 @@ ao init [flags]
|
||||
--hooks Also register hooks (full 12-event coverage by default; equivalent to ao hooks install --full)
|
||||
--minimal-hooks With --hooks, install SessionStart + SessionEnd + Stop hooks (lightweight)
|
||||
--stealth Use .git/info/exclude instead of .gitignore
|
||||
--with-schedule Copy .agents/schedule.yaml.example to .agents/schedule.yaml (opt-in continuous-worker scheduling). In a TTY, ao init prompts [Y/n] when this flag is unset. In non-TTY runs, scheduling is silently skipped unless AGENTOPS_INIT_WITH_SCHEDULE=1 is set to opt-in.
|
||||
```
|
||||
|
||||
---
|
||||
@@ -1066,7 +1067,7 @@ ao daemon soak [flags]
|
||||
-h, --help help for soak
|
||||
--interval duration Polling interval for scenario checks (default 15s)
|
||||
--require-terminal Fail unless scenario jobs reach terminal daemon state
|
||||
--scenario string Soak scenario (queue-only, fake-executor, dream) (default "queue-only")
|
||||
--scenario string Soak scenario (queue-only, fake-executor, dream, plans-projection) (default "queue-only")
|
||||
```
|
||||
|
||||
#### `ao daemon status`
|
||||
@@ -2404,6 +2405,13 @@ Sync pulls plan metadata from beads to prevent drift.
|
||||
ao plans sync [flags]
|
||||
```
|
||||
|
||||
**Flags:**
|
||||
|
||||
```
|
||||
-h, --help help for sync
|
||||
--via-daemon Route plans sync through the agentopsd plans.projection job-type. Default false in this release; flipped to true in a later release after the soak window. With --via-daemon=false the command takes the legacy direct path (file-locked).
|
||||
```
|
||||
|
||||
#### `ao plans update`
|
||||
|
||||
Update a plan's status or metadata
|
||||
@@ -3328,3 +3336,76 @@ ao schedule run <name> [flags]
|
||||
|
||||
---
|
||||
|
||||
### `ao scope`
|
||||
|
||||
Declare which directories are in scope for the current work session.
|
||||
|
||||
```
|
||||
ao scope [command]
|
||||
```
|
||||
|
||||
**Flags:**
|
||||
|
||||
```
|
||||
-h, --help help for scope
|
||||
--json Emit JSON output
|
||||
--lock string Override scope-lock path (defaults to $AO_SCOPE_LOCK or .agents/scope.lock)
|
||||
```
|
||||
|
||||
**Subcommands:**
|
||||
|
||||
#### `ao scope freeze`
|
||||
|
||||
Freeze one or more directories (additive)
|
||||
|
||||
```
|
||||
ao scope freeze <dir> [<dir>...] [flags]
|
||||
```
|
||||
|
||||
#### `ao scope status`
|
||||
|
||||
Show current scope-lock state
|
||||
|
||||
```
|
||||
ao scope status [flags]
|
||||
```
|
||||
|
||||
#### `ao scope unfreeze`
|
||||
|
||||
Unfreeze one (or all if no arg) directories
|
||||
|
||||
```
|
||||
ao scope unfreeze [<dir>...] [flags]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### `ao skills`
|
||||
|
||||
Tooling for the skills/ source-of-truth and its skills-codex/
|
||||
|
||||
```
|
||||
ao skills [command]
|
||||
```
|
||||
|
||||
**Subcommands:**
|
||||
|
||||
#### `ao skills check`
|
||||
|
||||
Walk skills/ and skills-codex/, validating each skill's YAML
|
||||
|
||||
```
|
||||
ao skills check [flags]
|
||||
```
|
||||
|
||||
**Flags:**
|
||||
|
||||
```
|
||||
-h, --help help for check
|
||||
--json Emit machine-readable JSON
|
||||
--skill string Restrict the audit to a single skill name
|
||||
--strict Exit non-zero on any finding (CI mode)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
|
||||
Executable
+91
@@ -0,0 +1,91 @@
|
||||
#!/bin/bash
|
||||
# Edit Scope Guard — PreToolUse hook for /scope skill (issue soc-irg1.3).
|
||||
#
|
||||
# Reads Claude Code tool-input JSON from stdin. If `.agents/scope.lock` declares
|
||||
# one or more `frozen_dirs`, blocks edits whose target path is outside every
|
||||
# frozen directory.
|
||||
#
|
||||
# Defensive defaults (per pre-mortem Finding 3):
|
||||
# - malformed JSON → exit 0 (fail-open, log warning to stderr)
|
||||
# - missing target path → exit 0 (nothing to check)
|
||||
# - missing or empty lock file → exit 0 (no enforcement)
|
||||
#
|
||||
# Activation tested by tests/hooks/test-edit-scope-guard-fires.sh.
|
||||
|
||||
[ "${AGENTOPS_HOOKS_DISABLED:-}" = "1" ] && exit 0
|
||||
|
||||
# --- Finding 3 amendment (verbatim defensive parse) ---
|
||||
HOOK_INPUT=$(cat)
|
||||
if ! echo "$HOOK_INPUT" | jq -e . >/dev/null 2>&1; then
|
||||
echo "edit-scope-guard: malformed JSON input, allowing edit (fail-open)" >&2
|
||||
exit 0
|
||||
fi
|
||||
TARGET_PATH=$(echo "$HOOK_INPUT" | jq -r '.tool.params.file_path // .tool.params.command // empty')
|
||||
if [ -z "$TARGET_PATH" ]; then
|
||||
exit 0 # nothing to check; allow
|
||||
fi
|
||||
# --- end Finding 3 amendment ---
|
||||
|
||||
# Best-effort: if input came from a Bash tool, TARGET_PATH currently holds the
|
||||
# full command line. Try to extract the first token that looks like a path
|
||||
# (something with a `/` and no shell metacharacters).
|
||||
case "$TARGET_PATH" in
|
||||
*' '*)
|
||||
BASH_PATH=$(echo "$TARGET_PATH" | tr ' ' '\n' | grep -E '^[A-Za-z0-9_./-]+/' | head -1 || true)
|
||||
if [ -n "$BASH_PATH" ]; then
|
||||
TARGET_PATH="$BASH_PATH"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# Resolve repo root and lock-file path. Wave 1 hardcodes `.agents/scope.lock`;
|
||||
# Wave 2 (issue I5) migrates to `lib/ao-paths.sh`.
|
||||
ROOT="${AO_SCOPE_LOCK_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}"
|
||||
LOCK="${AO_SCOPE_LOCK:-$ROOT/.agents/scope.lock}"
|
||||
|
||||
# Lock missing or empty → no enforcement.
|
||||
if [ ! -s "$LOCK" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Lock present but unreadable / malformed → fail-open (do not block edits).
|
||||
if ! LOCK_CONTENTS=$(cat "$LOCK" 2>/dev/null) || ! echo "$LOCK_CONTENTS" | jq -e . >/dev/null 2>&1; then
|
||||
echo "edit-scope-guard: malformed lock file at $LOCK, allowing edit (fail-open)" >&2
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Empty frozen_dirs → no enforcement.
|
||||
FROZEN_COUNT=$(echo "$LOCK_CONTENTS" | jq -r '.frozen_dirs // [] | length')
|
||||
if [ "$FROZEN_COUNT" = "0" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Normalize target path to repo-relative for prefix comparison.
|
||||
case "$TARGET_PATH" in
|
||||
/*)
|
||||
REL_PATH="${TARGET_PATH#"$ROOT/"}"
|
||||
;;
|
||||
*)
|
||||
REL_PATH="$TARGET_PATH"
|
||||
;;
|
||||
esac
|
||||
|
||||
FROZEN_DIRS_TXT=$(echo "$LOCK_CONTENTS" | jq -r '.frozen_dirs[]')
|
||||
|
||||
while IFS= read -r dir; do
|
||||
[ -z "$dir" ] && continue
|
||||
# Strip trailing slash so we can match both "foo" and "foo/bar".
|
||||
norm="${dir%/}"
|
||||
case "$REL_PATH" in
|
||||
"$norm"|"$norm"/*)
|
||||
exit 0
|
||||
;;
|
||||
esac
|
||||
done <<EOF
|
||||
$FROZEN_DIRS_TXT
|
||||
EOF
|
||||
|
||||
# No frozen dir matched — block.
|
||||
JOINED=$(echo "$FROZEN_DIRS_TXT" | tr '\n' ',' | sed 's/,$//')
|
||||
echo "edit-scope-guard: $REL_PATH outside frozen scope [$JOINED]" >&2
|
||||
exit 2
|
||||
@@ -225,6 +225,16 @@
|
||||
"timeout": 5
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"matcher": "Edit|Write|Bash",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "${CLAUDE_PLUGIN_ROOT}/hooks/edit-scope-guard.sh",
|
||||
"timeout": 5
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"PostToolUse": [
|
||||
|
||||
@@ -337,7 +337,7 @@ All hooks can be disabled: `AGENTOPS_HOOKS_DISABLED=1` (kill switch) or per-hook
|
||||
.
|
||||
├── .claude-plugin/
|
||||
│ └── plugin.json # Plugin manifest
|
||||
├── skills/ # 69 skills (60 user-facing, 9 internal)
|
||||
├── skills/ # 70 skills (61 user-facing, 9 internal)
|
||||
│ ├── rpi/ # orchestration — Full RPI lifecycle orchestrator
|
||||
│ ├── council/ # orchestration — Multi-model validation (core primitive)
|
||||
│ ├── crank/ # orchestration — Autonomous epic execution
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
# Skills Reference
|
||||
|
||||
Complete reference for all 69 AgentOps skills (60 user-facing + 9 internal).
|
||||
Complete reference for all 70 AgentOps skills (61 user-facing + 9 internal).
|
||||
|
||||
Skills are the primitive layer of AgentOps. Higher-level entry points like
|
||||
`/implement`, `/validation`, `/rpi`, and `/evolve` compose those primitives
|
||||
@@ -471,7 +471,7 @@ Capture lessons from accepted/rejected PR outcomes.
|
||||
Reinstall all AgentOps skills globally from the latest source.
|
||||
|
||||
```bash
|
||||
/update # Reinstall all 69 skills
|
||||
/update # Reinstall all 70 skills
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
@@ -221,7 +221,7 @@ These are how skills chain in practice:
|
||||
|
||||
## Current Skill Tiers
|
||||
|
||||
### User-Facing Skills (60)
|
||||
### User-Facing Skills (61)
|
||||
|
||||
**Judgment:**
|
||||
|
||||
@@ -260,6 +260,7 @@ These are how skills chain in practice:
|
||||
| **perf** | execution | Performance profiling, benchmarking, regression detection, and optimization |
|
||||
| **scaffold** | execution | Project scaffolding, component generation, and boilerplate setup |
|
||||
| **scenario** | execution | Author and manage holdout scenarios for behavioral validation |
|
||||
| **scope** | execution | Edit-scope guard — freeze/unfreeze directories with hard-block PreToolUse hook |
|
||||
|
||||
**Knowledge:**
|
||||
|
||||
|
||||
Reference in New Issue
Block a user