Practical patterns, starters & CLI tools for loop engineering with AI coding agents. Design systems that prompt and orchestrate agents (inspired by Addy Osmani and Boris Cherny). Includes loop-audit, loop-init, loop-cost.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 11 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
loop_audit_score
-
loop_check_breaker
-
loop_estimate_cost
-
loop_gate_check
-
loop_get_pattern
-
loop_get_skill
-
loop_get_state
-
loop_list_patterns
-
loop_list_skills
-
loop_list_state_files
-
loop_recommend_pattern
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 44dc6c2 · analyzer v33 · 2d ago
skills & prompt files 40
- agent-rules cobusgreyling-loop-engineering-44dc6c2/AGENTS.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/budget-negotiator/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/install-loop/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/loop-budget/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/loop-constraints/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/loop-triage/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/loop-verifier/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/skills/minimal-fix/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter-opencode/AGENTS.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter-opencode/skills/changelog-scan/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.claude/agents/verifier.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.claude/skills/changelog-scan/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.claude/skills/draft-release-notes/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.codex/agents/verifier.toml
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.codex/skills/changelog-scan/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.codex/skills/draft-release-notes/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.grok/skills/changelog-scan/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.grok/skills/draft-release-notes/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/changelog-drafter/.grok/skills/loop-verifier/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper-opencode/AGENTS.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper-opencode/skills/ci-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper/.claude/agents/loop-verifier.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper/.claude/skills/ci-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper/.codex/agents/verifier.toml
- skill cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper/.codex/skills/ci-triage/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/ci-sweeper/.grok/skills/ci-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper-opencode/AGENTS.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper-opencode/skills/dependency-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper/.claude/agents/loop-verifier.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper/.claude/skills/dependency-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper/.codex/agents/verifier.toml
- skill cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper/.codex/skills/dependency-triage/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/dependency-sweeper/.grok/skills/dependency-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage-opencode/AGENTS.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage-opencode/skills/issue-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage/.claude/agents/loop-verifier.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage/.claude/skills/issue-triage/SKILL.md
- agent-rules cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage/.codex/agents/verifier.toml
- skill cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage/.codex/skills/issue-triage/SKILL.md
- skill cobusgreyling-loop-engineering-44dc6c2/starters/issue-triage/.grok/skills/issue-triage/SKILL.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 185
filesystem 76
- fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/append-run-log.mjs :6
import { readFile, writeFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/append-run-log.test.mjs :10
import { mkdtemp, writeFile, rm, readFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/check-loop-init-sync.mjs :2
import { readFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/generate-contributors.mjs :10
import { readFileSync, readdirSync, writeFileSync } from 'node:fs'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/github-triage.mjs :12
import { readFile, writeFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/github-triage.test.mjs :4
import { mkdtemp, writeFile, rm, readFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/update-last-run-badge.mjs :6
import { readFile, writeFile, mkdir } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/validate-registry.mjs :6
import { readFile, readdir, stat } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/goal-audit/dist/auditor.js :1
import { readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/goal-audit/src/auditor.ts :1
import { readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/dist/cli.js :3
import { cp, mkdir, readFile, writeFile, access } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/scripts/bundle-assets.mjs :2
import { cp, rm, access, rename, mkdir } from 'node:fs/promises';
show 28 more
- fs cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/src/cli.ts :3
import { cp, mkdir, readFile, writeFile, access } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/test/cli.test.mjs :4
import { mkdir, rm, access, readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/dist/auditor.js :1
import { readdir, readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/dist/autofixer.js :1
import { writeFile, mkdir } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/src/auditor.ts :1
import { readdir, readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/src/autofixer.ts :1
import { writeFile, mkdir } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/test/auditor.test.mjs :3
import { mkdtemp, mkdir, writeFile, rm } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/test/autofixer.test.mjs :3
import { mkdtemp, readFile, rm } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/dist/budget-resolver.js :3
import { access } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/dist/cli.js :2
import { readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/dist/daily-spend.js :2
import { mkdir, readFile, writeFile, open, unlink, stat } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/src/budget-resolver.ts :3
import { access } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/src/cli.ts :2
import { readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/src/daily-spend.ts :2
import { mkdir, readFile, writeFile, open, unlink, stat } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/test/cli.test.mjs :6
import { mkdtemp, readFile, writeFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/test/daily-spend.test.mjs :3
import { mkdtemp, readFile, writeFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/test/fixtures/on-exceed-capture.mjs :1
import { writeFileSync } from 'node:fs'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/test/fixtures/on-exceed-ignore-stdin.mjs :1
import { writeFileSync } from 'node:fs'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-cost/dist/cli.js :2
import { readFile, access } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-cost/scripts/bundle-registry.mjs :2
import { readFile, writeFile, access } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-cost/src/cli.ts :2
import { readFile, access } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/dist/canary.js :21
import { readFile, writeFile, rm } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/src/canary.ts :22
import { readFile, writeFile, rm } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/test/canary.test.mjs :5
import { mkdtemp, mkdir, writeFile, rm, readdir } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-gate/dist/gate.js :8
import { readFile } from 'node:fs/promises'; - fs cobusgreyling-loop-engineering-44dc6c2/tools/loop-gate/src/gate.ts :9
import { readFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-gate/test/cli.test.mjs :5
import { mkdtemp, writeFile } from 'node:fs/promises'; - fs (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-gate/test/gate.test.mjs :3
import { mkdtemp, writeFile } from 'node:fs/promises';
36 more not shown — this panel samples each group; the count above is the real total.
shell / exec 40
- shell (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/append-run-log.test.mjs :8
import { execFile } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/generate-contributors.mjs :9
import { execFileSync } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/github-triage.mjs :10
import { execFile } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/scripts/github-triage.test.mjs :7
import { execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/dist/cli.js :2
import { spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/src/cli.ts :2
import { spawn } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/test/cli.test.mjs :5
import { execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/dist/auditor.js :3
import { execSync } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/dist/autofixer.js :3
import { execSync } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/src/auditor.ts :3
import { execSync } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/src/autofixer.ts :3
import { execSync } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/test/auditor.test.mjs :6
import { execFileSync, execSync } from 'node:child_process';
show 28 more
- shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/dist/budget-resolver.js :4
import { spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/dist/cli.js :3
import { spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/src/budget-resolver.ts :4
import { spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/src/cli.ts :3
import { spawn } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/test/cli.test.mjs :3
import { spawnSync } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/dist/canary.js :20
import { exec as execShellCb, execFile as execFileCb } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/src/canary.ts :21
import { exec as execShellCb, execFile as execFileCb } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/test/canary.test.mjs :6
import { execFile } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-gate/test/cli.test.mjs :3
import { spawnSync } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-init/dist/cli.js :2
import { spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-init/src/cli.ts :2
import { spawn } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-init/test/cli.test.mjs :6
import { execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-sandbox/dist/sandbox.js :1
import { spawn, execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-sandbox/src/sandbox.ts :1
import { spawn, execFile } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-sandbox/test/sandbox.test.mjs :8
import { execSync, spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-swarm/dist/cli.js :21
--count, -n Number of parallel agents to spawn (default: 3) - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-swarm/src/cli.ts :24
--count, -n Number of sequential agents to spawn (default: 3) - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-swarm/test/swarm.test.mjs :3
import { spawnSync } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-sync/test/sync.test.mjs :5
import { execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-worktree/dist/worktree.js :1
import { execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop-worktree/src/worktree.ts :1
import { execFile } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-worktree/test/cli.test.mjs :3
import { spawnSync } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-worktree/test/package-exports.test.mjs :3
import { execFile } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop-worktree/test/worktree.test.mjs :6
import { execFile } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop/dist/pass-through.js :8
import { spawn } from 'node:child_process'; - shell cobusgreyling-loop-engineering-44dc6c2/tools/loop/src/pass-through.ts :8
import { spawn } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/loop/test/cli.test.mjs :5
import { execFile, execFileSync } from 'node:child_process'; - shell (weak) cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/test/server.test.mjs :7
import { spawn } from 'node:child_process';
tool registrations 22
- loop_list_patterns cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :121
- loop_list_skills cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :139
- loop_list_state_files cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :148
- loop_get_pattern cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :160
- loop_get_skill cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :183
- loop_get_state cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :197
- loop_recommend_pattern cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :211
- loop_estimate_cost cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :264
- loop_gate_check cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :317
- loop_audit_score cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :344
- loop_check_breaker cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/dist/index.js :368
- loop_list_patterns cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :195
show 10 more
- loop_list_skills cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :219
- loop_list_state_files cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :234
- loop_get_pattern cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :252
- loop_get_skill cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :285
- loop_get_state cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :305
- loop_recommend_pattern cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :325
- loop_estimate_cost cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :377
- loop_gate_check cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :441
- loop_audit_score cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :478
- loop_check_breaker cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/src/index.ts :506
install hooks 15
- prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/goal-audit/package.json :16
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/goal-init/package.json :18
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-audit/package.json :16
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-context/package.json :20
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-cost/package.json :18
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-drill/package.json :20
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-gate/package.json :20
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-init/package.json :19
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-metrics/package.json :16
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-sandbox/package.json :18
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-swarm/package.json :18
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-sync/package.json :17
npm test
show 3 more
- prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop-worktree/package.json :39
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/loop/package.json :16
npm test - prepublishOnly cobusgreyling-loop-engineering-44dc6c2/tools/mcp-server/package.json :16
npm test
declared dependencies 2
- ajv@^8.17.1
- yaml@^2.8.0
obfuscation 1
- dynamic require()/import() cobusgreyling-loop-engineering-44dc6c2/tools/loop-sandbox/test/sandbox.test.mjs :262
const mod = await import(${JSON.stringify(sandboxDistUrl)});