agent-loop-ext
Crash-resilient external agent loop with state persistence and CI/CD integration
Cross-framework project status aggregator — discovers contributors from installed frameworks, runs declarative detection, produces a unified status report.
$ npx -y skills add jmagly/aiwg --skill project-status --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/project-statusContext preview
The summary Claude sees to decide when to auto-load this skill.
Cross-framework project status aggregator — discovers contributors from installed frameworks, runs declarative detection, produces a unified status report.
namespace: aiwg name: project-status platforms: [all] description: Cross-framework project status aggregator — discovers contributors from installed frameworks, runs declarative detection, produces a unified status report. triggers: - "help me know what is next" - "tell me where this project stands and what to do next" - "generate or refresh project status" - "project status" commandHint: argumentHint: "[project-directory=.] [--json] [--guidance \"text\"]" allowedTools: Read, Glob, Grep, Bash model: haiku category: aiwg-utility modelRole: efficiency modelTier: economy
<!-- AIWG-SKILL-CALLOUT --> > **Skill access pattern (post-kernel-pivot, 2026.5+)** > > Skill names referenced in this document are AIWG skills, **not slash commands**. Most are not kernel-listed and cannot be invoked as `/skill-name` by the platform. Reach them via: > > ```bash > aiwg discover "<capability>" > aiwg show skill <name> > ``` > > Only kernel-listed skills (`aiwg-doctor`, `aiwg-refresh`, `aiwg-status`, `aiwg-help`, `use`, `steward`) are directly invokable as slash commands. See [skill-discovery rule](../../../addons/aiwg-utils/rules/skill-discovery.md).
Produce a unified status report covering every installed framework, addon, or extension that ships a `kind: status` contributor and is in active use on this project.
This is the cross-framework aggregator described in ADR-023 §Reference contributor frontmatter. It replaces the prior SDLC-only project-status behavior. SDLC-specific reporting now lives in the SDLC framework's status contributor at `agentic/code/frameworks/sdlc-complete/status/contributor.md` — when SDLC is the only contributor in use, the resulting report is functionally equivalent to the prior behavior.
Read `.aiwg/frameworks/registry.json` from the project root. The registry lists installed frameworks/addons/extensions by `id`. If the file is missing, treat it as zero installed frameworks — discovery still finds project-local contributors.
cat ./.aiwg/frameworks/registry.json 2>/dev/null
Two sources, processed in order:
1. **Framework-shipped contributors** — for each `id` in the registry, look up its source path under the AIWG installation. Try in order:
Use `Glob` to discover, then `Read` to load the contributor file.
2. **Project-local contributors** — every `*.md` file in `<project-root>/.aiwg/contributors/status/`. These are user-authored contributors that do not require forking a framework.
For each candidate file:
1. Parse YAML frontmatter. Skip with a warning if frontmatter is malformed or missing required fields (`kind`, `domain`, `description`, `detect.glob`). The schema is published at `<AIWG_ROOT>/agentic/code/addons/aiwg-utils/skills/project-status/contributor.schema.json` — `aiwg validate-metadata` enforces it at deploy time, so most files reaching this step are valid. 2. Run the contributor's `detect.glob` patterns against the project root using `Glob`. Deduplicate matches. If unique match count is less than `detect.minCount` (default 1), the contributor is **installed but not in use** — silently filter out. 3. For surviving contributors, the agent reads the contributor file's body to learn what to report and how to format it.
For each in-use contributor, follow its body's guidance to read source files and compute reported state. Contributors are descriptive — they tell the agent what to look at; they do not run code.
Keep blocks compact. Per ADR-023 §Output voice, contributors emit observed state (counts, dates, phase names). Do **not** synthesize prescriptive "recommended commands" inside a contributor's block.
Default (markdown) output shape:
Project: <project-name> (<detected-domain-summary>) ├─ <Domain 1>: <one-line summary> (origin: <framework-id>) │ ├─ <fact 1> │ ├─ <fact 2> │ └─ <fact N> ├─ <Domain 2>: <one-line summary> (origin: <framework-id>) │ └─ ... └─ <Domain K>: <one-line summary> (origin: project-local) └─ ...
Every block carries an **`origin:`** stamp — the framework id (e.g. `sdlc-complete`, `media-curator`) or the literal `project-local`. This lets the user see at a glance whether a finding came from a framework's contributor or a project-specific override.
If discovery returns zero in-use contributors:
surface "No active framework contributors detected. Run `intake-wizard` if this is a new project, or check `.aiwg/frameworks/registry.json` to confirm what's installed."
described in `<AIWG_ROOT>/agentic/code/addons/aiwg-utils/skills/project-status/heuristic-fallback.md` (added by issue #941). When that file is not yet present, surface a short "No project state detected" message.
Returns a structured array of contributor blocks. Stable shape:
{
"project_root": "/abs/path",
"contributors": [
{
"origin": "sdlc-complete",
"domain": "SDLC",
"summary": "Construction phase, iteration 12, 3 open risks",
"detail": [
{ "Reusable project context and specialist workflows for the AI tools you already use. Plan software, coordinate specialist reviews, prepare campaigns, investigate incidents, organize research, curate media, and maintain operational knowledge.
Repo: jmagly/aiwg
Crash-resilient external agent loop with state persistence and CI/CD integration
Detect requests for iterative autonomous agent loops and route to the appropriate loop executor
Automatically execute tests when code-generating agents modify source files, enforcing the execute-before-return pattern
Enable agent loops to learn from similar past tasks and share patterns across loops
Query and manage the executable feedback debug memory
Execute tests on generated code and iterate until passing