Skip to content

Commit 7a765cd

Browse files
authored
Align AgentOps around its operations-layer identity (#1051)
Executes docs/plans/2026-08-07-agentops-operations-layer-alignment.md: AgentOps is the operations layer for agentic engineering; the federated integration graph is the topology, the semantic work-and-proof protocol is the contract, and RPI is the standard one-experiment traversal. Retires the ao flywheel command family and all knowledge-flywheel product state, tombstones the seven-move operating-loop workflow, narrows ao init and the .agents state writers to declared destinations, renames the core architecture page to rpi-traversal.md with a compatibility redirect, aligns AGENTS.md, 25 skills, public and package copy, regenerates every owned projection, and strengthens the conformance gates with planted-negative proofs. Both the alignment subject and the follow-up gate-bookkeeping commit carry fresh author-distinct validation PASS verdicts with empty not_checked scope. Test-Removal-Reason: dead knowledge-flywheel and session-store surfaces were deleted with their tests (operations-layer alignment)
1 parent cb42236 commit 7a765cd

267 files changed

Lines changed: 1323 additions & 11874 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude-plugin/marketplace.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
"email": "fullerbt@users.noreply.github.com"
66
},
77
"metadata": {
8-
"description": "Fresh-context validation for coding-agent work: one behavior, one bounded experiment, one independent verdict.",
8+
"description": "The operations layer for agentic engineering: portable skills and evidence contracts connecting intent, coding agents, software factories, and independent judgment.",
99
"version": "3.5.0"
1010
},
1111
"plugins": [
1212
{
1313
"name": "agentops",
14-
"description": "Fresh-context validation for coding-agent work: one behavior, one bounded experiment, one independent verdict.",
14+
"description": "The operations layer for agentic engineering: portable skills and evidence contracts connecting intent, coding agents, software factories, and independent judgment.",
1515
"version": "3.5.0",
1616
"source": "./",
1717
"author": {

.claude-plugin/plugin.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "agentops",
33
"version": "3.5.0",
4-
"description": "Fresh-context validation for coding-agent work: shape one behavior, run one bounded experiment, and persist an independent verdict.",
4+
"description": "The operations layer for agentic engineering: portable skills and evidence contracts connecting intent, coding agents, software factories, and independent judgment.",
55
"author": {
66
"name": "Boden Fuller",
77
"email": "fullerbt@users.noreply.github.com"
@@ -10,12 +10,12 @@
1010
"repository": "https://github.com/boshu2/agentops",
1111
"license": "Apache-2.0",
1212
"keywords": [
13+
"operations-layer",
1314
"devops",
1415
"vibe-coding",
1516
"shift-left",
1617
"validation",
1718
"coding-agents",
18-
"knowledge-flywheel",
1919
"pre-mortem",
2020
"vibe-check",
2121
"workflow",

.codex-plugin/plugin.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
{
22
"name": "agentops",
33
"version": "3.5.0",
4-
"description": "Fresh-context validation for coding-agent work: shape one behavior, run one bounded experiment, and persist an independent verdict.",
4+
"description": "The operations layer for agentic engineering: portable skills and evidence contracts connecting intent, coding agents, software factories, and independent judgment.",
55
"skills": "./skills-codex",
66
"interface": {
77
"displayName": "AgentOps",
8-
"shortDescription": "Fresh-context validation for coding-agent work.",
9-
"longDescription": "AgentOps helps Codex shape one behavior, run one bounded implementation experiment, validate the exact result from fresh context, and persist a durable verdict. Git, CI, retries, queues, and delivery remain caller-owned.",
8+
"shortDescription": "The operations layer for agentic engineering.",
9+
"longDescription": "AgentOps connects intent, coding agents, software factories, context sources, and independent judgment through portable skills and evidence contracts. Codex shapes one behavior, runs one bounded implementation experiment, validates the exact result from fresh context, and can persist a durable verdict. Git, CI, retries, queues, and delivery remain caller-owned.",
1010
"developerName": "AgentOps",
1111
"category": "Productivity",
1212
"capabilities": [

.codex/agentops-bootstrap.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ When skills reference tools you don't have, substitute your equivalent tools:
2525
- Announce: "I've read the [Skill Name] skill and I'm using it to [purpose]"
2626
- Skills with checklists require `update_plan` todos for each item
2727
- NEVER skip mandatory workflows (brainstorming before coding, TDD, systematic debugging)
28-
- At the end of a Codex work session, run `~/.codex/agentops/.codex/agentops-codex session-end` to execute flywheel close-loop.
2928

3029
**Skills location:**
3130
- AgentOps skills: ~/.codex/agentops/skills/

.codex/agentops-codex

Lines changed: 5 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -295,69 +295,10 @@ function runUseSkill(skillName) {
295295
}
296296

297297
function runSessionEnd() {
298-
// Codex doesn't consume Claude plugin hooks.json, so this provides an equivalent
299-
// end-of-session close-loop entrypoint.
300-
const repoRootResult = spawnSync('git', ['rev-parse', '--show-toplevel'], {
301-
encoding: 'utf8'
302-
});
303-
304-
const repoRoot = repoRootResult.status === 0
305-
? repoRootResult.stdout.trim()
306-
: process.cwd();
307-
308-
function commandExists(cmd) {
309-
const check = spawnSync('sh', ['-lc', `command -v ${cmd} >/dev/null 2>&1`], { cwd: repoRoot });
310-
return check.status === 0;
311-
}
312-
313-
function runAo(args) {
314-
const localBin = path.join(repoRoot, 'bin', 'ao');
315-
if (fs.existsSync(localBin)) {
316-
return spawnSync(localBin, args, { cwd: repoRoot, encoding: 'utf8' });
317-
}
318-
319-
const localCliDir = path.join(repoRoot, 'cli');
320-
const localGoMod = path.join(localCliDir, 'go.mod');
321-
if (fs.existsSync(localGoMod) && commandExists('go')) {
322-
return spawnSync('go', ['run', './cmd/ao', ...args], {
323-
cwd: localCliDir,
324-
encoding: 'utf8'
325-
});
326-
}
327-
328-
if (commandExists('ao')) {
329-
return spawnSync('ao', args, { cwd: repoRoot, encoding: 'utf8' });
330-
}
331-
332-
return { status: 127, stderr: 'ao CLI not found' };
333-
}
334-
335-
let closeLoop = runAo(['flywheel', 'close-loop', '--quiet']);
336-
if (closeLoop.status !== 0 && closeLoop.stderr && closeLoop.stderr.includes('unknown flag: --quiet')) {
337-
closeLoop = runAo(['flywheel', 'close-loop']);
338-
}
339-
340-
if (closeLoop.status === 0) {
341-
console.log('Codex session-end close-loop complete.');
342-
return;
343-
}
344-
345-
// Mirror hook failure logging behavior.
346-
try {
347-
const aoDir = path.join(repoRoot, '.agents', 'ao');
348-
fs.mkdirSync(aoDir, { recursive: true });
349-
const logPath = path.join(aoDir, 'hook-errors.log');
350-
const ts = new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
351-
fs.appendFileSync(logPath, `${ts} CODEX_SESSION_END_FAIL: ao flywheel close-loop\n`, 'utf8');
352-
} catch (error) {
353-
// Best-effort logging; still print command failure details below.
354-
}
355-
356-
console.log('ao flywheel close-loop failed during Codex session-end.');
357-
if (closeLoop.stderr) {
358-
console.log(closeLoop.stderr.trim());
359-
}
360-
process.exit(1);
298+
// The knowledge-flywheel close-loop was retired with the ao flywheel
299+
// command family; session-end is now an explicit no-op kept for
300+
// compatibility with existing Codex session hooks.
301+
console.log('Codex session-end: nothing to do (the flywheel close-loop was retired).');
361302
}
362303

363304
// Main CLI
@@ -383,7 +324,7 @@ switch (command) {
383324
console.log(' agentops-codex bootstrap # Run complete bootstrap with all skills');
384325
console.log(' agentops-codex use-skill <skill-name> # Load a specific skill');
385326
console.log(' agentops-codex find-skills # List all available skills');
386-
console.log(' agentops-codex session-end # Codex equivalent of Stop hook close-loop');
327+
console.log(' agentops-codex session-end # Compatibility no-op (close-loop retired)');
387328
console.log('');
388329
console.log('Examples:');
389330
console.log(' agentops-codex bootstrap');

.goreleaser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ brews:
4444
- name: agentops
4545
directory: Formula
4646
homepage: https://github.com/boshu2/agentops
47-
description: Knowledge Flywheel CLI for AI-assisted development
47+
description: Optional AgentOps CLI for deterministic repository checks and evidence linking
4848
license: Apache-2.0
4949
install: |
5050
bin.install "ao"

.opencode/plugins/agentops.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* 2. tool.execute.before — Guard task tool crash (sst/opencode#13933)
77
* 3. tool.definition — Enrich task + skill tool descriptions for Devstral
88
* 4. command.execute.before — Redirect slashcommand skill calls to skill tool
9-
* 5. tool.execute.after — Audit log all tool calls to .agents/audit/
9+
* 5. tool.execute.after — Audit log all tool calls to .agents/scratch/opencode-audit/
1010
* 6. shell.env — Inject CLI paths (bd, ao, gt, cass) into shell environment
1111
* 7. experimental.session.compacting — Preserve AgentOps context through compaction
1212
*/
@@ -85,7 +85,7 @@ export const AgentOpsPlugin = async ({ client, directory }) => {
8585
const cliPathDirs = findCliPaths(homeDir);
8686

8787
// Audit log helper
88-
const auditDir = path.join(directory || process.cwd(), '.agents', 'audit');
88+
const auditDir = path.join(directory || process.cwd(), '.agents', 'scratch', 'opencode-audit');
8989
const getAuditPath = () => {
9090
const date = new Date().toISOString().slice(0, 10);
9191
return path.join(auditDir, `${date}-opencode.jsonl`);
@@ -163,7 +163,7 @@ ${toolMapping}
163163
'complexity', 'knowledge', 'bug-hunt', 'doc', 'handoff', 'learn',
164164
'release', 'product', 'quickstart', 'trace', 'inbox', 'recover',
165165
'evolve', 'codex-team', 'beads', 'standards', 'inject', 'extract',
166-
'forge', 'provenance', 'ratchet', 'flywheel', 'update', 'using-agentops'
166+
'forge', 'provenance', 'ratchet', 'update', 'using-agentops'
167167
];
168168

169169
return {

AGENTS.md

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22

33
Detailed workflow mechanics: [docs/agent-workflow-reference.md](docs/agent-workflow-reference.md).
44

5-
AgentOps turns one explicit intent into one independently judged experiment:
5+
AgentOps is the operations layer for agentic engineering: a portable semantic
6+
integration and judgment layer that connects intent, coding agents, software
7+
factories, context sources, and independent validation without taking
8+
ownership of their state or delivery lifecycle. The topology is a
9+
federated integration graph; the interoperability contract is the
10+
semantic work-and-proof protocol; the standard path through the graph is one
11+
RPI traversal:
612

713
```text
814
RPI -> Plan -> Implement -> fresh Validate -> report and stop
@@ -50,6 +56,22 @@ what the caller does next.
5056
- Do not run `ao session bootstrap`, lookup, or archive commands as startup
5157
ritual. The `ao` CLI is an explicit repository tool, not a session runtime.
5258

59+
## Federated source authority
60+
61+
The integration graph is federated: AgentOps cites source identities and never
62+
absorbs their authority.
63+
64+
| Information | Authority | AgentOps treatment |
65+
|---|---|---|
66+
| Work, status, dependencies, close reasons | Beads or the caller's tracker | Query directly; never build a second work index. |
67+
| Source content and delivery history | Git and repository policy | Bind exact content when useful; a commit or merge never implies semantic PASS. |
68+
| Past agent sessions | CASS | Retrieve cited episodes on demand; search output is evidence, not policy. |
69+
| Curated cross-session memory | CM or a caller-selected memory system | Retrieve by explicit need with provenance and freshness. |
70+
| Runtime execution | NTM, Gas City, Agent Mail, cloud agents, or another selected factory | Read and report native state; runtime completion is never validation. |
71+
| Checks and test output | The executable that produced them | Store factual receipts; a fresh context judges meaning. |
72+
| Requested proof | `.agents/ao/` | Persist only for a caller request or declared consumer. |
73+
| Disposable and derived local state | `.agents/scratch/`, `.agents/projections/` | Rebuild or expire; never treat as authority (ADR-0016). |
74+
5375
## Source precedence
5476

5577
1. live executable behavior and generated projections from their declared source;
@@ -71,7 +93,7 @@ Edit source owners and regenerate projections through the owning command.
7193
`scripts/check-skill-python-ratchet.sh`; tests keep their documented
7294
exemption). Grandfathered Python is migration debt, not precedent.
7395

74-
## Core loop
96+
## Standard RPI traversal
7597

7698
1. **Plan once.** Resolve the existing bead or caller intent and shape one
7799
active behavior there. Acceptance, non-goals, scope, and the first useful
@@ -117,8 +139,10 @@ rollback, and release policy.
117139

118140
Premortem, Postmortem, Council, and genie skills are caller-selected judgment
119141
strategies. NTM, Agent Mail, Gas City, swarms, and other factory tools are
120-
optional adapters. Optional strategies and adapters never become core
121-
dependencies or lifecycle authorities.
142+
optional adapters. Context miners (CASS, CM, recon tooling) are context
143+
sources. Strategies, adapters, factories, and context sources are peer nodes
144+
in the federated graph whose native state AgentOps reads but never owns; none
145+
becomes a core dependency or lifecycle authority.
122146

123147
A selected factory's internal control plane is operated only through that
124148
factory's own doors: its coordinator (for Gas City, the Mayor via mail), its
@@ -141,7 +165,7 @@ AgentOps work ownership.
141165

142166
| Trigger | Canonical owner |
143167
|---|---|
144-
| Core loop or evidence-contract change | `docs/architecture/operating-loop.md`, `schemas/*.schema.json` |
168+
| RPI traversal or evidence-contract change | `docs/architecture/rpi-traversal.md`, `schemas/*.schema.json` |
145169
| CLI command or flag | `cli/cmd/ao/`, then generated `cli/docs/COMMANDS.md` |
146170
| Skill behavior or inventory | `skills/<slug>/SKILL.md`, generated `docs/SKILL-ROUTER.md` |
147171
| Codex projection | `docs/contracts/codex-skill-api.md`, `skills-codex-overrides/catalog.json` |

CHANGELOG.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Removed
11+
12+
- The `ao flywheel` command family (`status`, `compare`) and the whole live
13+
knowledge-flywheel product surface: `cli/internal/flywheelapp`, the
14+
flywheel-only metric helpers and types, the `flywheel` build-profile bit,
15+
the `flywheel-compounding` gate scripts, and the `flywheel:` config block
16+
(existing config files still parse; the key is ignored). AgentOps no longer
17+
computes or reports knowledge-compounding state (`COMPOUNDING`, `DECAYING`,
18+
escape velocity). Invoking `ao flywheel` now fails with a migration pointer
19+
(see `docs/MIGRATION.md`). Learning remains an optional off-path consumer of
20+
durable verdicts via the `learn` skill. The compatibility baseline records
21+
the family as intentionally `retired` rather than freezing the old product
22+
claim.
23+
1024
### Added
1125

1226
- Between-releases release-path smoke: `.github/workflows/release-path-smoke.yml`

GOALS.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
## Product outcome
44

5-
AgentOps makes one coding-agent experiment independently inspectable without
6-
taking over the consumer's engineering system.
5+
AgentOps is the operations layer for agentic engineering: it makes one
6+
coding-agent experiment independently inspectable without taking over the
7+
consumer's engineering system.
78

89
The canonical outcome is:
910

0 commit comments

Comments
 (0)