Skip to content

Commit 6aa7df2

Browse files
Jammy2211Jammy2211
authored andcommitted
Merge origin/main into feature/prm-full-close-out (board supersedes /wake_up)
# Conflicts: # AGENTS.md
2 parents d025ee3 + 70e196b commit 6aa7df2

20 files changed

Lines changed: 2178 additions & 127 deletions

File tree

.github/workflows/brain_board.yml

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
name: Brain Board
2+
3+
# Publishes the Brain's operational board — the organism's morning door — to
4+
# this repo's GitHub Pages URL: the page (index.html), its badge.json (the
5+
# cross-board headline contract the umbrella router consumes), the raw
6+
# board.json, and the markdown twin board.md.
7+
#
8+
# The board replaces the interactive /wake_up skill: everything that skill
9+
# assembled by driving doors in sequence (overnight scheduled-run sweep, the
10+
# Heart's readiness headline, version-stamp consistency, the community scan,
11+
# resume context from the Mind, the upkeep doors) is collected here on a
12+
# schedule and rendered with one-tap copy-for-Claude payloads. The renderer is
13+
# board/_board.py; its vocabulary is config/policy.yaml `board:`.
14+
#
15+
# Unlike the Mind dashboard (self-healed into the repo, because its state IS
16+
# the repo), nothing here is committed: the board's data is time-varying, so
17+
# it is served from the Pages artifact only — a daily refresh makes no commit
18+
# noise and can never drift against a repo copy.
19+
#
20+
# Cadence: 05:30 UTC daily — after the 02:00 nightly release driver and the
21+
# Heart's 05:00 heart-health refresh (which rewrites the badge this board
22+
# reads), before the human's morning. GitHub cron jitters 0–3 h under load,
23+
# so the page stamps its own generation time and every consumer should trust
24+
# that stamp over the schedule. workflow_dispatch is the manual refresh
25+
# (also what a human taps when the board says it is stale).
26+
27+
on:
28+
schedule:
29+
- cron: "30 5 * * *"
30+
workflow_dispatch:
31+
32+
permissions:
33+
contents: read
34+
pages: write
35+
id-token: write
36+
37+
concurrency:
38+
group: pages
39+
cancel-in-progress: true
40+
41+
jobs:
42+
publish:
43+
runs-on: ubuntu-latest
44+
environment:
45+
name: github-pages
46+
url: ${{ steps.deployment.outputs.page_url }}
47+
env:
48+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
49+
steps:
50+
- uses: actions/checkout@v4
51+
with:
52+
path: PyAutoBrain
53+
# The board composes, it does not recompute: the community scan reads
54+
# the body map (repos.yaml) and the resume section reads the registry +
55+
# the Mind's own generated dashboard counts, so the Mind is checked out
56+
# as a sibling — the same two-repo layout tests.yml uses.
57+
- uses: actions/checkout@v4
58+
with:
59+
repository: ${{ github.repository_owner }}/PyAutoMind
60+
path: PyAutoMind
61+
- name: render the board
62+
env:
63+
PYAUTO_ROOT: ${{ github.workspace }}
64+
run: |
65+
python3 -m pip install --quiet pyyaml
66+
python3 PyAutoBrain/board/_board.py --apply --out _site
67+
# enablement: true creates the Pages site on first run where the token
68+
# may (Mind/Heart precedent); where it may not (the Hands hit "Resource
69+
# not accessible by integration"), the site must be created once
70+
# out-of-band: gh api -X POST repos/<owner>/PyAutoBrain/pages -f build_type=workflow
71+
- uses: actions/configure-pages@v5
72+
with:
73+
enablement: true
74+
- uses: actions/upload-pages-artifact@v3
75+
with:
76+
path: _site
77+
- id: deployment
78+
uses: actions/deploy-pages@v4

AGENTS.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,19 @@ via `/route`, and it routes to the right agent; normal usage never says
169169
"PyAutoBrain". A few commands are compositions rather than single agents:
170170
`/docs` and `/research` route through the dev-flow with their PyAutoMind
171171
work-type fixed (no dedicated conductor — added only on demonstrated need, never
172-
for symmetry); `/wake_up` composes sync + `/health` + `/hygiene`; `/prm` composes the
172+
for symmetry); `/prm` composes the
173173
end-of-task close-out (CI green → merge → issue closed → Mind `active/`
174174
`complete/` → worktree and branches removed); `/brain
175175
<agent>` is the raw passthrough. Every command routes **through** the Brain;
176176
none replaces it.
177177

178+
The morning routine is not a command at all: the **Brain board**
179+
(`board/_board.py`, published to the Brain's GitHub Pages URL each morning by
180+
`brain_board.yml`) carries what `/wake_up` used to assemble — overnight runs,
181+
readiness, community, resume, upkeep — as one-tap 📋 payloads, and
182+
`bin/morning.sh` is the local sync/clean leg you run in a terminal.
183+
`/wake_up` remains only as the fallback door when the board is unreachable.
184+
178185
The command bodies live in `skills/<verb>/<verb>.md`; thin `SKILL.md` wrappers
179186
make the same canonical workflows discoverable to skill-aware harnesses.
180187
`bin/install.sh` installs both surfaces without duplicating their bodies. Shared

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,21 @@ classifies each task, plans it, and routes it to specialist agents — and it
1212
delegates everything else: it holds no state (the Mind's job), runs no health
1313
checks (the Heart's), and never releases anything itself (the Hands').
1414

15+
See the **[PyAutoBrain Dashboard](https://pyautolabs.github.io/PyAutoBrain/)**
16+
for the organism's morning and general starting point: what ran overnight, the
17+
Heart's readiness headline, who in the community is waiting on a reply, what
18+
to resume, and the upkeep doors — each actionable row with a one-tap 📋
19+
copy-for-Claude command. Regenerated each morning; the local sync/clean leg is
20+
one terminal command, `bash bin/morning.sh`.
21+
22+
## How PyAutoBrain works
23+
1524
You drive it in plain English, through short slash commands in a Claude Code
1625
chat: `/intake` to file an idea, `/start_dev` to begin a task, `/health` for a
1726
check-up — or just `/route <what you want>` and the Brain picks the right
1827
door. The full command surface (13 conductors + 5 faculties) is the generated
1928
table in [AGENTS.md](AGENTS.md).
2029

21-
## How PyAutoBrain works
22-
2330
1. **A task arrives.** Usually from the Mind's backlog — pick a task on the
2431
[PyAutoMind dashboard](https://pyautolabs.github.io/PyAutoMind/) and paste
2532
its `/start_dev` command — or free-form, via `/route` or any conductor's

agents/conductors/intake/AGENTS.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,33 @@ schema — light structure over free-form prose.
8383
| **classify** | `intake "<text>"` / `intake classify --file P` | classify one raw input; `--apply` writes the prompt |
8484
| **ideas** | `intake ideas` | scan `ideas.md`, propose one prompt per bullet; `--apply` writes them |
8585
| **census** | `intake census` | inventory every filed prompt (work-type/target/difficulty/status + hygiene flags); always read-only |
86-
| **dashboard** | `intake dashboard` | render the census as the Mind **task** page — picks, in flight, parked, planned, backlog; `--apply` writes `PyAutoMind/dashboard.md`, `--check` exits 1 on drift |
86+
| **dashboard** | `intake dashboard` | render the census as the Mind **task** page — picks, in flight, parked, planned, backlog, recent, epics; `--apply` writes `PyAutoMind/dashboard.md`, `--check` exits 1 on drift |
8787
| **formalise** | `intake formalise [prefix]` | retroactively header the prompts census flags — derive the missing fields, insert in place, prose untouched; `--apply` writes |
8888
| **reconcile** | `intake reconcile [prefix]` | rank backlog prompts that look already-shipped (vs the `complete/` records / `active/`); always read-only — retiring stays human |
8989
| **reconcile --repo** | `intake reconcile --repo <target> [prefix]` | **also** read the target repo's source for identifiers the prompts name — the one signal that sees a prompt with no Mind-side trace. Opt-in; the default path is offline |
9090

91+
**Recent** is the one section laid out by *date* rather than by state: the 50
92+
newest events on the **work in hand** — issued, parked, filed — merged across
93+
every live bucket (the `draft/` backlog included, which is most of them:
94+
150 prompts against a handful of registry rows) and sitting between the Backlog
95+
and the Epics. Epic members stay out, as they do in every pick list on the
96+
page — they are worked in order through their epic, and a Recent row hands out
97+
a standalone `/start_dev`. It *holds* 50
98+
and *shows* 10 (`RECENT_MAX` / `RECENT_PAGE`): the table is a glance, not a
99+
log, so the rest is one tap away — a `` button on the Pages twin, and nested
100+
`<details>` on the markdown page, which GitHub renders where it strips the
101+
script. Every other
102+
section answers "what should I do now?"; recency is orthogonal to state, so
103+
none of them can answer "what has been happening?". Dates come from the
104+
registry key that names the event (`issued:` / `parked:` / `filed:`, PyAutoMind
105+
REFERENCE.md "Task dates") or a prompt's own `Issued:` header.
106+
107+
Shipped work is deliberately **not** in the feed and `complete/` is never
108+
opened to render it: the ledger is a thousand records deep and takes ~200 a
109+
month, so including it made the table a list of receipts — twenty things nobody
110+
can act on, on the page whose whole job is work in hand. `complete/index.md` is
111+
where shipped work is read.
112+
91113
Census/dashboard are the Mind *backlog* view — deliberately distinct from
92114
Heart's `/health status` health view (see "must never do"). The prompt-taxonomy
93115
folder is authoritative for a prompt's work-type/target; header fields are

0 commit comments

Comments
 (0)