Skip to content

feat: dashboard Bundles section for Fable-orchestrated multi-task sessions #309

Description

@Jammy2211

Overview

The PyAutoMind dashboard lists every task individually, which is right for one-at-a-time work. As more work moves to a model where a Fable session orchestrates several related tasks with Opus subagents, the dashboard needs an additional Bundles view: sets of independent prompts that make sense in one orchestrated session. Bundles are distinct from epics (ordered, phase-gated); every task still appears in its usual section, and bundles refresh on the existing nightly dashboard_refresh.yml.

Plan

  • Add PyAutoMind/bundles.md registry (human-pinned bundles only, epics.md-style schema) and document the optional Bundle: <slug> prompt header in REFERENCE.md.
  • Parse bundles.md + Bundle: headers in _intake.py; add deterministic render-time auto-bundling of the draft pool (same Target, exclusions, size cap, min 2 members).
  • Render a new "Bundles" H2 in dashboard.md and dashboard.html between Backlog and Recent — pinned first, then auto — each with a members table, total size and a one-tap Fable orchestration prompt (copy button in HTML). Existing sections untouched.
  • Add a start_bundle skill body in PyAutoBrain/skills describing the orchestration contract (one issue per member, shared worktree per repo, per-task PRs so /prm works unchanged, Fable plans / Opus executes) plus a WORKFLOW.md paragraph.
  • Regenerate the dashboard via pyauto-brain intake --apply dashboard; the nightly needs no change beyond adding bundles.md to its path triggers.
Detailed implementation plan

Affected Repositories

  • PyAutoBrain (primary)
  • PyAutoMind

Branch Survey

Repository Current Branch Dirty?
./PyAutoBrain main clean
./PyAutoMind main clean (prompt file only)

Suggested branch: feature/dashboard-bundles

Implementation Steps

  1. PyAutoBrain/agents/conductors/intake/_intake.py
    • Extend the light-header regex (~L453) with Bundle.
    • Add parse_bundles(mind) beside parse_epics (~L569): ## <slug> then - title: / - members: (prompt paths) / - rationale: / - status:.
    • Add auto_bundles(census): group draft/ prompts by Target; drop Epic: members, unresolved Blocked-by:, Autonomy: human-required, Difficulty: too-large, and members of pinned bundles; pack greedily under a size cap (≤ 1 large + 3 small, or ≤ 4 medium); minimum 2 members; deterministic ordering (priority desc, path asc). Returns {slug, title, members, total, origin: "auto"}render-only, never written back.
    • Add bundle_prompt(bundle) producing the Fable orchestration prompt: read each member prompt, run start_dev per member, one shared worktree per repo, delegate implementation to Opus subagents, per-task PRs.
    • Render in render_dashboard() (~L1111, after Backlog, before Recent) and render_dashboard_html() (~L1348) with copy buttons; pinned before auto. Warn on a Bundle: slug absent from bundles.md, mirroring the epic warning (~L1277).
  2. PyAutoMind: create bundles.md (intro + schema, no entries initially); add Bundle: to the header table in REFERENCE.md (~L287-351); add bundles.md to .github/workflows/dashboard_refresh.yml path triggers (L28-49).
  3. PyAutoBrain/skills/start_bundle/ (start_bundle.md + SKILL.md, symlinked into ~/.claude/commands like siblings) + a paragraph in skills/WORKFLOW.md under the delegation ladder.
  4. Tests (PyAutoBrain intake tests): fixture Mind with one pinned bundle, auto-bundle-able drafts and each excluded case; assert grouping, exclusions, size cap, determinism, unknown-slug warning, dashboard --check idempotence.
  5. Regenerate dashboard.md/dashboard.html and commit to Mind.

Key Files

  • PyAutoBrain/agents/conductors/intake/_intake.py — census, epics parsing, both renderers
  • PyAutoMind/epics.md — schema to mirror
  • PyAutoMind/REFERENCE.md — prompt header documentation
  • PyAutoMind/.github/workflows/dashboard_refresh.yml — nightly regen + self-heal
  • PyAutoBrain/skills/WORKFLOW.md — delegation ladder

Trade-offs

  • Render-only auto bundles keep nightly bot commits noise-free; only human pins are persisted.
  • Deterministic rules over LLM grouping for reproducibility; an optional Claude refinement pass is deferred to a phase 2.

Original Prompt

Click to expand starting prompt

Dashboard "Bundles" — grouping tasks for Fable-orchestrated multi-task sessions

Type: feature
Target: PyAutoMind
Repos:

  • PyAutoMind
  • PyAutoBrain
    Difficulty: medium
    Autonomy: supervised
    Priority: high
    Status: formalised
    Filed: 2026-08-27

Original request (verbatim)

I am slowly moving to a model where Fable orchestrates larger tasks with opus.
I therefore think we need a grouping mechanism on the pyautomind dashboard,
where similar tasks which make sense to be done in on go with fable as an
orchestrator make sense. This should not change the dashboard as it is, seeing
all tasks listed individually is still highly valueable and makes sense when I
want to do one at a time. I think we need a group section, and a sensible
mechanism which will update the grouped tasks regularly (every night?).

Approved design (2026-08-27)

A bundle is a set of independent prompts that make sense in one Fable
session, with Opus subagents executing the members. Distinct from an epic
(ordered, phase-gated, one phase at a time). Every task still appears in its
usual dashboard section — a bundle is an additional view, never a replacement.

  1. PyAutoMind/bundles.md registry — holds only human-pinned bundles,
    schema like epics.md: ## <slug> then - title: / - members: (prompt
    paths) / - rationale: / - status:. Optional Bundle: <slug> prompt
    header mirrors Epic: so a human can force membership. Nothing ever
    rewrites prompt files automatically.
  2. Render-only auto-bundling in
    PyAutoBrain/agents/conductors/intake/_intake.py — deterministic, computed
    at dashboard-render time, never written to the registry. Rules: same
    Target repo; exclude Epic: members, unresolved Blocked-by:,
    Autonomy: human-required, Difficulty: too-large; size cap (≤ 1 large +
    3 small, or ≤ 4 medium); minimum 2 members; pinned members leave the auto
    pool. Refresh rides the existing nightly dashboard_refresh.yml — no new
    schedule.
  3. New "Bundles" H2 in dashboard.md + dashboard.html, placed between
    Backlog and Recent. One card per bundle (pinned first, then auto): members
    table (size / priority / status), total size, and a one-tap Fable
    orchestration prompt
    with copy button (HTML), analogous to the epic
    resume prompt. Existing sections unchanged.
  4. Brain orchestration contractstart_bundle skill (or
    start_dev --bundle <slug>) describing: one issue per member (keeps the
    no-bulk-issue rule), shared worktree per repo, per-task PRs so /prm works
    unchanged, Fable plans / Opus executes. Plus a paragraph in
    PyAutoBrain/skills/WORKFLOW.md.

Deferred (phase 2, only if auto bundles feel dumb): an optional Claude
refinement pass over the deterministic proposals.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions