The minor official who ushers, keeps order, makes the announcements, and tends the records. A beadle keeps the beads — the project's issues — and keeps the production aligned to what it's for without dictating the performance.
beadle is an intent-aligned issue-triage and dashboard system for software projects. It is the next generation of the multiclaude envoy role, extended with a single load-bearing idea nobody else ships:
It scores each issue / PR / contribution against the project's declared, versioned intent, weighted by what the maintainers actually act on — and renders the result as a living, bot-maintained dashboard whose state lives out-of-band.
It answers the question a label-slapping bot can't: is this contribution moving the project toward what it is for — and are we being led into the weeds?
A prolific contributor (often an AI agent) can file sound, well-written issues faster than maintainers can absorb them. Each issue is individually defensible; in aggregate they can pull a project off its roadmap, drown high-leverage work in minutiae, and quietly invert the cost of being helpful. Existing triage bots (Triage Party, Dosu, Renovate's dashboard, stale-bot, Copilot) label, summarize, dedup, or auto-close on a cheap signal. None of them measures work against intent, and none weights it by maintainer engagement rather than raw volume or reaction-popularity. That intersection is empty. beadle owns it.
See DESIGN.md for the full architecture and
docs/prior-art.md for the survey that located the gap.
- Maintains a living triage dashboard as a single pinned GitHub issue — regenerated each run from out-of-band state (the Renovate render-loop pattern, without Renovate's state-in-Markdown fragility). Statistical progress, a prioritized action plan, a human-readable classification index, and an intent-alignment / drift panel.
- Absorbs the envoy role: greet reporters, screen issues through a three-layer firewall (deterministic gates → lightweight AI → escalate), apply scoped labels with mutual-exclusivity discipline, cross-check merged PRs against open issues, and keep reporters informed — relaying, never authorizing.
- Scores intent-alignment: each issue/PR gets a graded verdict (advances / neutral / drifts) against the target project's declared intent, with cited rationale — never a bare label.
- Surfaces the meta-signal: minutiae ratio, filed-vs-acted-upon, backlog net-flow, scope-drift candidates, and "led-by-the-backlog" warnings — so a maintainer can see at a glance whether the project is on-course.
beadle is bound by three layered sources (see docs/PHILOSOPHY.md):
- aae-orc
SOUL.md— sovereignty, composability ("no component conscripts another"), observable-but-never-mandatory, gradual elaboration, parallel safety, spec-driven development. - The StrongDM Software Factory manifesto — humans own intent, held-out scenarios, and satisfaction scoring; information asymmetry keeps the evaluation criteria out of the agent's view; probabilistic satisfaction beats binary pass/fail; deliberate naivety ("why am I doing this?").
- The human-AI collaboration canon — meaningful human control, propose-not-act for anything consequential or public, confidence-as-frequency, cheap-to-verify evidence over fluent prose, reversibility, and anti-Goodhart metric hygiene.
beadle elaborates gradually. It is useful at every phase and over-built at none.
| Phase | Trigger | Agents | State | Surface | Packaging |
|---|---|---|---|---|---|
| 0 — now | a Claude Code skill | one session | JSONL + the dashboard issue | one pinned dashboard issue | skills/beadle-triage/ |
| 1 | scheduled gh-aw run as arcavenai |
orchestrator + classifier | embedded store | + checkbox controls | a sideshow-pack |
| 2 | a marvel-orchestrated team | supervisor + classifiers + investigators + fresh-context verifier | Dolt (versioned SQL) | + optional Projects v2 rollup | pack runs on marvel ("multiclaude v2") |
First targets: vsdd-factory and DrBothen's Prism. Generic for any repo — each target declares its own intent anchor; nothing is hardcoded.
beadle rewrites its own dashboard issue each run, so the issue must be
created and maintained by the managing bot identity — arcavenai, not a human
account (an issue's author can't be reassigned). To create/refresh a target's
dashboard, run prompts/create-dashboard.md from
the beadle repo root on a system whose active GitHub identity is arcavenai.
It carries a hard identity guard (gh api user must be arcavenai/arcavenai[bot],
abort otherwise) so the post can never be made under the wrong identity. Phase 1
replaces the manual launcher with a scheduled gh-aw workflow running as the
arcavenai GitHub App — same identity, same idempotent rewrite.
beadle/
├── DESIGN.md full architecture synthesis
├── charter.md bedrock / frontier / graveyard (kos process)
├── docs/
│ ├── PHILOSOPHY.md the three guiding-light sources (cited)
│ ├── prior-art.md comparative survey + the white space
│ ├── research-notes.md triage, dashboarding, human-AI findings
│ ├── dashboard-schema.md the issue-as-dashboard spec + out-of-band state
│ └── agent-team.md team shape (envoy-absorbed) + agent-definition format
├── agents/ beadle's own agent definitions
├── decisions/ ADRs (MADR format)
├── _kos/ knowledge graph (bedrock/frontier/graveyard nodes)
├── targets/ per-project intent anchors (vsdd-factory, prism, ...)
├── skills/beadle-triage/ the Phase-0 MVP skill
├── prompts/ runnable launchers (create-dashboard.md — run as arcavenai)
└── pack.yaml the sideshow-pack manifest (Phase-1+ target shape)
MIT. See LICENSE.