Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .claude/hooks/session-start.sh
Original file line number Diff line number Diff line change
Expand Up @@ -132,12 +132,12 @@ marked_root() {
holds_an_organ() {
[ -d "$1/PyAutoBrain" ] || [ -d "$1/PyAutoMind" ] || [ -d "$1/PyAutoCortex" ] \
|| [ -d "$1/PyAutoMemory" ] || [ -d "$1/PyAutoEyes" ] || [ -d "$1/PyAutoHeart" ] \
|| [ -d "$1/PyAutoHands" ] || [ -d "$1/PyAutoPulse" ] || [ -d "$1/PyAutoNerves" ] \
|| [ -d "$1/PyAutoHands" ] || [ -d "$1/PyAutoPulse" ] || [ -d "$1/PyAutoInsight" ] || [ -d "$1/PyAutoNerves" ] \
|| [ -d "$1/PyAutoGut" ] \
|| [ -d "$1/organs/PyAutoBrain" ] || [ -d "$1/organs/PyAutoMind" ] \
|| [ -d "$1/organs/PyAutoCortex" ] || [ -d "$1/organs/PyAutoMemory" ] \
|| [ -d "$1/organs/PyAutoEyes" ] || [ -d "$1/organs/PyAutoHeart" ] \
|| [ -d "$1/organs/PyAutoHands" ] || [ -d "$1/organs/PyAutoPulse" ] \
|| [ -d "$1/organs/PyAutoHands" ] || [ -d "$1/organs/PyAutoPulse" ] || [ -d "$1/organs/PyAutoInsight" ] \
|| [ -d "$1/organs/PyAutoNerves" ] || [ -d "$1/organs/PyAutoGut" ]
}

Expand Down
3 changes: 2 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,8 @@ Canonical boundaries live in `PyAutoBrain/ORGANISM.md`; the full body map
| **Ears** | PyAutoEars | The Ears — the community listening organ: owns read-only public conversation collection, the versioned community snapshot contract, coverage receipts and the dashboard. GitHub conversations remain authoritative; Brain’s Community conductor owns judgement, reply drafts and development routing, and Mind owns task state. Never posts replies, labels or issues, exports raw transcripts or private sources, or treats unknown coverage as no work. |
| **Heart** | PyAutoHeart | Health/readiness — the authoritative "is it safe to release?" verdict. |
| **Hands** | PyAutoHands | Packaging, tagging, notebook generation, PyPI release execution. |
| **Pulse** | PyAutoPulse | The Pulse — where the organism feels how fast it runs: the cross-project profiling dashboard over the `<lib>_profiling` project repos (today autolens_profiling) — the instance registry, the versioned `profiling-summary` read contract (v1 live at `autolens_profiling/dashboard/summary.json`), the ingest receipts (resolved commit per project per render) and the Pages board. Validates the exchange contract only; never moves pins, combines unmatched timings, applies the compile threshold to runtime, computes an ecosystem-wide speed score or issues a Heart verdict, and never judges (the Brain's profiling conductor does); the project repos keep their producers, results, drift policy and their own Pages page. |
| **Pulse** | PyAutoPulse | The Pulse — where the organism feels how fast it runs: the cross-project profiling dashboard over the `<lib>_profiling` project repos (today autolens_profiling) — campaign intent and pending domain tasks, the instance registry, the versioned `profiling-summary` read contract (v1 live at `autolens_profiling/dashboard/summary.json`), the ingest receipts (resolved commit per project per render) and the Pages board. Validates the exchange contract only; never moves pins, combines unmatched timings, applies the compile threshold to runtime, computes an ecosystem-wide speed score or issues a Heart verdict, and never judges (the Brain's profiling conductor does); the project repos keep their producers, results, drift policy and their own Pages page. |
| **Insight** | PyAutoInsight | Owns inference campaign intent and pending domain tasks, the cross-project inference instance registry, versioned `inference-summary` read contract, ingest receipts and evidence dashboard. Projects own execution, producers and raw samples; Cortex owns scientific run records, observations and human conclusions; Mind owns bounded implementation lifecycle and repository claims. Never infers scientific acceptance from execution, ranks incompatible runs or submits compute on refresh. |
| **Nerves** | PyAutoNerves | The Nerves — the configuration/serialization layer connecting workspace conventions to libraries (layered config, version handshake, test_mode), delivered as the `autonerves` package. |
| **Gut** | PyAutoGut | Owns the lifecycle of condemned self-material (stale branches, stashes, dead code/tests): holds it as durable, recoverable git refs through a transit window and voids it on a sweep. The storage mirror of Memory (retention vs release). |

Expand Down
12 changes: 9 additions & 3 deletions ORGANISM.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ organs plan, build, test and release it, and you make every judgment call.
| **Ears** | PyAutoEars | The Ears — the community listening organ: owns read-only public conversation collection, the versioned community snapshot contract, coverage receipts and the dashboard. GitHub conversations remain authoritative; Brain’s Community conductor owns judgement, reply drafts and development routing, and Mind owns task state. Never posts replies, labels or issues, exports raw transcripts or private sources, or treats unknown coverage as no work. |
| **Heart** | PyAutoHeart | Determines whether the organism is healthy. `pyauto-heart readiness` is the **authoritative** GREEN/YELLOW/RED "is it safe to release?" gate. An observer: never writes into other repos, never triggers Build. |
| **Hands** | PyAutoHands | Builds and releases — packaging, tagging, notebook generation, PyPI via `release.yml`. A pure executor: runs no readiness checks and never re-derives a gate decision. |
| **Pulse** | PyAutoPulse | Feels *how fast the organism runs* across the `<lib>_profiling` project repos. Owns the profiling instance registry, the versioned `profiling-summary` read contract, the ingest receipts (resolved commit per project per render) and the cross-project board. Validates the exchange contract only; project repos own producers, results, pins, drift policy and their own Pages page. Never moves pins, combines unmatched timings, applies the compile threshold to runtime, computes an ecosystem-wide speed score or issues a readiness verdict; the Brain's profiling conductor (`triage`) is the only judge. |
| **Pulse** | PyAutoPulse | Feels *how fast the organism runs* across the `<lib>_profiling` project repos. Owns profiling campaign intent and pending domain tasks, the profiling instance registry, the versioned `profiling-summary` read contract, the ingest receipts (resolved commit per project per render) and the cross-project board. Validates the exchange contract only; project repos own producers, results, pins, drift policy and their own Pages page. Never moves pins, combines unmatched timings, applies the compile threshold to runtime, computes an ecosystem-wide speed score or issues a readiness verdict; the Brain's profiling conductor (`triage`) is the only judge. |
| **Insight** | PyAutoInsight | Owns inference campaign intent and pending domain tasks, the cross-project inference instance registry, versioned `inference-summary` read contract, ingest receipts and evidence dashboard. Projects own execution, producers and raw samples; Cortex owns scientific run records, observations and human conclusions; Mind owns bounded implementation lifecycle and repository claims. Never infers scientific acceptance from execution, ranks incompatible runs or submits compute on refresh. |
| **Nerves** | PyAutoNerves | The configuration/serialization layer (`autonerves`) — layered config with overrides, the workspace↔library version handshake, `test_mode`, FITS/JSON I/O. Connects the organism's conventions to every library; the base layer the scientific libraries all import. |
| **Gut** | PyAutoGut | Owns the lifecycle of *condemned self-material* — stale branches, stashes, dead code/tests. Holds each as a durable, recoverable git ref through a transit window and **voids** it on a sweep. The storage mirror of Memory (retention ↔ release); the hygiene conductor drives it, as vitals reads Heart. |

Expand Down Expand Up @@ -119,8 +120,13 @@ cross-project board, while each profiling project keeps its producers, results
and drift policy and the Brain's profiling conductor stays the only judge. Community listening is the **Ears** (PyAutoEars), the fifth: it owns the
versioned public conversation snapshot, collection coverage receipts and board.
GitHub owns conversations; Brain owns judgement and approved response routing;
Mind owns tasks. Unknown or stale coverage never becomes a no-work claim. A
dashboard alone does not
Mind owns tasks. Unknown or stale coverage never becomes a no-work claim.

**Insight** (PyAutoInsight) owns inference campaign coordination and pending
domain tasks, plus its inference exchange contract, instance registry, receipts
and evidence board. It uses project drivers and existing Brain routes, with no
new conductor. Cortex remains authoritative for scientific records and
conclusions; Mind retains implementation lifecycle and claims. A dashboard alone does not
waive the state-or-effects requirement for a new organ. The human interaction
layer is the command surface (`/route` + the verb commands), which is part of
Brain.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ repository inventory and refuses conflicting user-owned destinations.

The eleven organs the Brain coordinates — Brain (reasoning), Mind (intent),
Cortex (learning what is true), Memory (knowledge), Eyes (seeing the
figures), Ears (community listening), Heart (health), Hands (release), Pulse (feeling how fast it runs),
figures), Ears (community listening), Heart (health), Hands (release), Pulse (feeling how fast it runs), Insight (inference campaigns and evidence),
Nerves (configuration), Gut (shedding) —
are defined once in
[ORGANISM.md](ORGANISM.md), which this
Expand Down
1 change: 1 addition & 0 deletions agents/_pyauto_root.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"PyAutoHeart",
"PyAutoHands",
"PyAutoPulse",
"PyAutoInsight",
"PyAutoNerves",
"PyAutoGut",
)
Expand Down
2 changes: 1 addition & 1 deletion bin/_pyauto_root.sh
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ _pyauto_marked_root() {
_pyauto_is_root() {
[ -d "$1/PyAutoMind" ] || [ -d "$1/PyAutoCortex" ] || [ -d "$1/PyAutoMemory" ] \
|| [ -d "$1/PyAutoEars" ] || [ -d "$1/PyAutoEyes" ] || [ -d "$1/PyAutoHeart" ] || [ -d "$1/PyAutoHands" ] \
|| [ -d "$1/PyAutoPulse" ] || [ -d "$1/PyAutoNerves" ] || [ -d "$1/PyAutoGut" ]
|| [ -d "$1/PyAutoPulse" ] || [ -d "$1/PyAutoInsight" ] || [ -d "$1/PyAutoNerves" ] || [ -d "$1/PyAutoGut" ]
}

# Assigns PYAUTO_ROOT and PYAUTO_ROOT_REASON rather than printing: one
Expand Down
2 changes: 1 addition & 1 deletion board/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ copy-for-Claude payload:
| ⏱ Test performance | the Heart board's published `performance` block — rendered verbatim, never re-derived | each row's own prompt |
| 🏷️ Version consistency | the coupled-set stamps (`board: version_stamps`) | `/bug version drift: …` |
| 💬 Community | the Ears (`community scan`, reused wholesale) — every open conversation gets a row | `/community`, `/community triage <ref>` |
| 🔄 Resume | the Mind's registry + generated counts; the Cortex, Eyes and Pulse strips (each organ's own `dashboard.md` head counts, display-only, never in `state.json`); pending-release PRs | `/start_dev …`, `/prm <url>` |
| 🔄 Resume | the Mind's registry + generated counts; the Cortex, Eyes, Pulse and Insight strips (each organ's own `dashboard.md` head counts, display-only, never in `state.json`); pending-release PRs | `/start_dev …`, `/prm <url>` |
| 🧹 Upkeep | open-issue count; the cleanup doors | `/issue_cleanup`, `/hygiene`, `/repo_cleanup` |
| 🧼 Hygiene | the hygiene conductor's own `--json` pre-scan, run IN this render (BOARD_HYGIENE_SCAN=1; brain_board.yml checks out the body-map scan set blobless+sparse first) — no machine involved | each row's own delegate door |
| 🖥️ Dev box | `state/devbox_board.json` — worktree state (unpushed/dirty/stashes — the one thing only the dev box can see; its hygiene rows render only when no cloud scan ran), pushed by `board publish` (morning.sh's last step); age-stamped, stale at 48h, dropped after 7d | — |
Expand Down
19 changes: 19 additions & 0 deletions board/_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -742,6 +742,11 @@ def collect_pulse(repo="PyAutoPulse"):
return _dashboard_counts(repo, head_only=True)


def collect_insight(repo="PyAutoInsight"):
"""Display owner-generated head counts; no scientific judgment or feed duplication."""
return _dashboard_counts(repo, head_only=True)


def collect_open_issues(org, degraded):
"""Total open issues across the org — the /issue_cleanup pointer count
(the audit itself stays that skill's confirmation-gated job)."""
Expand Down Expand Up @@ -950,6 +955,7 @@ def collect():
cortex = collect_cortex()
eyes = collect_eyes(board_family.get("eyes", "PyAutoEyes"))
pulse = collect_pulse(board_family.get("pulse", "PyAutoPulse"))
insight = collect_insight(board_family.get("insight", "PyAutoInsight"))
open_issues = collect_open_issues(org, degraded)
boards = {name: f"{pages_base}/{repo}/"
for name, repo in board_family.items()}
Expand All @@ -971,6 +977,7 @@ def collect():
"cortex": cortex,
"eyes": eyes,
"pulse": pulse,
"insight": insight,
"open_issues": open_issues,
"hygiene": collect_hygiene(degraded),
"devbox": collect_devbox(),
Expand Down Expand Up @@ -1372,6 +1379,11 @@ def render_md(data):
+ " · ".join(f"{k.lower()} {n}"
for k, n in data["pulse"].items())
+ f" — [Pulse board]({data['boards'].get('pulse', '')})")
if data.get("insight"):
L.append("- Insight: "
+ " · ".join(f"{k.lower()} {n}"
for k, n in data["insight"].items())
+ f" — [Insight board]({data['boards'].get('insight', '')})")
for t in data["resume"]["tasks"]:
L.append(f" - `Use the start-dev skill. {t['path']}` — {t['title'][:70]}")
pending = data["resume"]["pending_prs"]
Expand Down Expand Up @@ -1769,6 +1781,13 @@ def community_row(e, note, tone):
"board \u2197</a>"
+ pills(*[(f"{k.lower()} {n}", "" if i == 0 else "n")
for i, (k, n) in enumerate(data["pulse"].items())])))
if data.get("insight"):
insight_url = data["boards"].get("insight", "")
H.append(_plain(
f'Inference evidence on the <a href="{_attr(insight_url)}">Insight '
"board \u2197</a>"
+ pills(*[(f"{k.lower()} {n}", "" if i == 0 else "n")
for i, (k, n) in enumerate(data["insight"].items())])))
for t in data["resume"]["tasks"]:
# An in-flight task wears the header facets the Mind gave it, so it
# looks like itself on both pages — same pills, same order.
Expand Down
10 changes: 10 additions & 0 deletions board/_theme.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,12 @@
# only 3.1:1 on #0d1117, so each scheme gets its own ink off the same hue:
# #6420e0 (7.4:1 on #fff) and #a27aff (6.1:1 on #0d1117). Bluer than the
# Memory violet, as the two logos are.
"insight": {
"organ": "Insight",
"tagline": "Infer. Inspect. Understand.",
"ink_light": "#995500", "ink_dark": "#ffc163", "glow": "#ffb347",
"hero": ("#392600", "#000000"),
},
"nerves": {
"organ": "Nerves",
"tagline": "Signal. Connect. Understand.",
Expand Down Expand Up @@ -366,6 +372,10 @@
# Nerves — a neuron: branching dendrites round a nucleated soma, a
# myelinated axon running right into node-tipped terminals, and the
# signal arcs either side of it, inside a closed ring, as on the logo.
"insight": (
'<circle cx="24" cy="20" r="13"/>'
'<path d="M18,32 L18,38 L30,38 L30,32 M20,43 L28,43 M24,7 L24,20 L31,24"/>'
),
"nerves": (
'<circle cx="24" cy="24" r="20.4"/>'
'<circle cx="16" cy="23" r="3.4"/>'
Expand Down
2 changes: 2 additions & 0 deletions config/policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ test_witness:
pyautoeyes: PyAutoEyes/tests
pyautoears: PyAutoEars/tests
pyautopulse: PyAutoPulse/tests
pyautoinsight: PyAutoInsight/tests
# PyAutoGut has no test suite — deliberately absent, so the conductor's
# "strengthen tests first" advice is correct there rather than noise.

Expand Down Expand Up @@ -177,6 +178,7 @@ board:
heart: PyAutoHeart
hands: PyAutoHands
pulse: PyAutoPulse
insight: PyAutoInsight
nerves: PyAutoNerves
gut: PyAutoGut
organism: PyAutoScientist
7 changes: 4 additions & 3 deletions docs/concepts/organism.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ it and adds the framework/instance distinction an adopter needs.
| **Heart** | PyAutoHeart | Decides whether the organism is *healthy*. `pyauto-heart readiness` is the authoritative GREEN/YELLOW/RED release gate. An observer: never writes into other repos, never triggers a build. |
| **Hands** | PyAutoHands | *Does* — packaging, tagging, notebook generation, PyPI releases. A pure executor: never re-derives a gate decision. |
| **Pulse** | PyAutoPulse | *Feels* — the cross-project profiling registry, the versioned `profiling-summary` read contract, ingest receipts and dashboard. Project repos produce and hold timings; Pulse validates the exchange and links to them. The Brain's profiling conductor handles judgment. |
| **Insight** | PyAutoInsight | Coordinates inference campaign intent and domain tasks; owns the inference summary contract, registry, receipts and evidence board. Projects execute and retain samples; Cortex records scientific conclusions; Mind holds implementation lifecycle and claims. |
| **Nerves** | PyAutoNerves | *Connects* — the configuration/serialization layer (`autonerves`): layered config, the workspace↔library version handshake, `test_mode`, FITS/JSON I/O. The base layer every library imports. |
| **Gut** | PyAutoGut | *Sheds* — the lifecycle of condemned self-material (stale branches, stashes, dead code/tests): holds each as a durable, recoverable git ref through a transit window, then **voids** it on a sweep. The storage mirror of Memory (retention ↔ release); the hygiene conductor drives it, as vitals reads Heart. |

Expand All @@ -36,7 +37,7 @@ is the container, and a workspace is one familiar kind of project.

These roles do not replace the {doc}`repository categories <../satellites>` or
change their workflow and release gates. Profiling, inference and visualization
repos illustrate the project role; Eyes and Pulse provide cross-project organ
repos illustrate the project role; Eyes, Pulse and Insight provide cross-project organ
views over the visualization and profiling projects. The project-to-organ
boundary is described in {doc}`../organs/eyes` and {doc}`../organs/pulse`.

Expand All @@ -60,10 +61,10 @@ The organs split on one line that matters for adoption:
pipelines. Domain facts appear only in declared config surfaces (tables
and policy files, not logic), and a drift check — the
{ref}`tenant firewall <tenant-firewall>` — keeps it that way.
- **Instance organs — Mind, Cortex, Memory, Eyes, Ears, Pulse, Gut.** Committed
- **Instance organs — Mind, Cortex, Memory, Eyes, Ears, Pulse, Insight, Gut.** Committed
state, ledgers, knowledge, visualization and profiling registries and shed
material. These are *inherently yours*: an adopter never forks the upstream
Mind, Cortex, Memory, Eyes, Ears, Pulse or Gut content, they create their own repos with the same documented
Mind, Cortex, Memory, Eyes, Ears, Pulse, Insight or Gut content, they create their own repos with the same documented
shape.

One more principle worth knowing before you read anything else:
Expand Down
3 changes: 2 additions & 1 deletion docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
PyAutoScientist is a working, opinionated reference implementation of an
**AI-agent development organism** for human-led, natural-language software
development: a set of ten git repositories — Brain, Mind, Cortex, Memory,
Eyes, Ears, Heart, Hands, Pulse, Nerves, Gut — through which you lead a multi-repo project in
Eyes, Ears, Heart, Hands, Pulse, Insight, Nerves, Gut — through which you lead a multi-repo project in
plain English. You
describe what you want; AI agents plan, implement, test, gate and release
it; you make every judgment call.
Expand Down Expand Up @@ -62,6 +62,7 @@ organs/ears
organs/heart
organs/build
organs/pulse
organs/insight
organs/gut
```

Expand Down
Loading
Loading