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
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ the `/<verb>` slash commands.
<!-- pyauto:commands:end -->

Like the other PyAuto repos, PyAutoBrain runs from its checkout (no pip install);
it resolves the sibling `pyauto-heart` and `autobuild` binaries from PATH or the
it resolves the sibling `pyauto-heart` and `autohands` binaries from PATH or the
`~/Code/PyAutoLabs/` checkouts.

## The command surface (Brain implicit)
Expand Down
2 changes: 1 addition & 1 deletion ORGANISM.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ organs plan, build, test and release it, and you make every judgment call.
*Hands* and *Build* name the **same organ** (PyAutoHands) throughout this
document: the organ is the **Hands**, and *Build* is the call-chain step it
performs. (The Hands repo was renamed PyAutoBuild → PyAutoHands; the *Build*
call-chain shorthand and the `autobuild` package/CLI keep their names.
call-chain shorthand and the `autohands` package/CLI keep their names.
`PyAutoConf` likewise remains the Nerves repo's name, aligned with its
`autoconf` package.)

Expand Down
8 changes: 4 additions & 4 deletions agents/_common.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#!/usr/bin/env bash
# agents/_common.sh — shared helpers for PyAutoBrain's specialist agents.
#
# Resolves the sibling PyAuto organ CLIs (pyauto-heart, autobuild) the same way
# the autobuild shim resolves them: prefer PATH, fall back to the sibling
# Resolves the sibling PyAuto organ CLIs (pyauto-heart, autohands) the same way
# the autohands shim resolves them: prefer PATH, fall back to the sibling
# checkout under ~/Code/PyAutoLabs/. Nothing here is pip-installed.

PYAUTO_ROOT="${PYAUTO_ROOT:-$HOME/Code/PyAutoLabs}"
Expand Down Expand Up @@ -31,8 +31,8 @@ resolve_heart() {
_resolve_bin pyauto-heart "$PYAUTO_ROOT/PyAutoHeart/bin/pyauto-heart"
}

resolve_autobuild() {
_resolve_bin autobuild "$PYAUTO_ROOT/PyAutoHands/bin/autobuild"
resolve_autohands() {
_resolve_bin autohands "$PYAUTO_ROOT/PyAutoHands/bin/autohands"
}

# _resolve_dir <env-var-name> <repo-name> — echo the path to a sibling PyAuto
Expand Down
3 changes: 2 additions & 1 deletion agents/conductors/bug/_bug.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
# (the organs themselves), not library-source or workspace work.
INFRA_TARGETS = {
"pyautobrain": "PyAutoBrain", "pyautoheart": "PyAutoHeart",
"pyautobuild": "PyAutoHands", "autobuild": "PyAutoHands",
"pyautobuild": "PyAutoHands", "autohands": "PyAutoHands",
"autobuild": "PyAutoHands", # back-compat: the package was renamed autobuild -> autohands
"pyautomind": "PyAutoMind", "pyautomemory": "PyAutoMemory",
}

Expand Down
2 changes: 1 addition & 1 deletion agents/conductors/build/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ mode/action.
"requested_action": "<PyAutoHands capability>",
"health_status": "green|yellow|red|unknown",
"decision": "proceed|proceed-with-caution|abort",
"execution_plan": ["autobuild <action> <args>"],
"execution_plan": ["autohands <action> <args>"],
"execution_summary": "<one line>",
"warnings": ["..."],
"blockers": ["..."],
Expand Down
14 changes: 7 additions & 7 deletions agents/conductors/build/BUILD_CAPABILITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@

This audit records the execution surface the PyAutoBrain Build Agent reasons over
and **calls**. The agent must treat every item here as a PyAutoHands capability,
not as logic to reimplement inside Brain. Source of truth: the `autobuild`
dispatcher (`PyAutoHands/bin/autobuild`) and `PyAutoHands/CLAUDE.md`.
not as logic to reimplement inside Brain. Source of truth: the `autohands`
dispatcher (`PyAutoHands/bin/autohands`) and `PyAutoHands/CLAUDE.md`.

## Execution capabilities (the Build Agent calls these)

From `autobuild help`. **Mode** is the Build Agent allowlist that *may* route
From `autohands help`. **Mode** is the Build Agent allowlist that *may* route
the capability (`build.sh`); **Consumer today** is who actually drives it now.
The two diverge for the workspace-run surface — see the note below.

Expand All @@ -24,26 +24,26 @@ The two diverge for the workspace-run surface — see the note below.
| `script_matrix` | Output a JSON `{name, directory}` matrix for GitHub Actions. | build | **Heart** `workspace-validation.yml` (CI) |
| `aggregate_results` | Aggregate per-job JSON into a release-readiness report. | build, release | **Heart** `workspace-validation.yml` (CI) |
| `slow_skip_check` | Surface SLOW / NEEDS_FIX entries in workspace `no_run.yaml`. | build | `run_all.py` + Heart `test_run` check |
| `repro_command` | Emit the shell command autobuild uses to run one script. | build | triage (manual handoff) |
| `repro_command` | Emit the shell command autohands uses to run one script. | build | triage (manual handoff) |
| `bump_colab_urls` | Rewrite Colab URLs in cwd from an old to a new date-tag. | build, deploy | `release.yml` (CI) + deploy |

**Reading the Consumer column — the run\* seam is latent, not active.** The
capabilities still *exist* and match the `autobuild` dispatcher and the
capabilities still *exist* and match the `autohands` dispatcher and the
`build.sh` allowlists exactly; the *Mode* column remains accurate as the
allowlist of record. What changed is the driver. The workspace full-run →
report → issue flow moved **out of `release.yml` into PyAutoHeart's
`workspace-validation.yml`** (see `PyAutoHands/docs/internals.md` and the
`release.yml` comment recording the removed `run_scripts` / `run_notebooks` /
`analyze_results` jobs). Heart checks these primitives out from Build and reuses
them directly — calling `run.py` / `run_python.py` / `script_matrix.py` /
`aggregate_results.py`, **not** `autobuild run_*` and **not** `pyauto-brain build
`aggregate_results.py`, **not** `autohands run_*` and **not** `pyauto-brain build
run_*`. Nothing invokes `run` / `run_python` / `run_all` through the Build Agent
today, so their build-mode allowlist entries are a **latent seam** — kept so the
Build Agent could re-own execution without churn, but **Heart is the live
consumer**. This is the execution/health boundary the audit below argues for,
now made visible in the table itself.

Underlying implementation assets the agent never re-owns: `autobuild/run_python.py`,
Underlying implementation assets the agent never re-owns: `autohands/run_python.py`,
`run.py`, `generate.py`, `script_matrix.py`, `aggregate_results.py`,
`tag_and_merge.sh`, `build_util.py`, the `release.yml` GitHub workflow, and the
per-workspace `config/build/{no_run,env_vars,visualise_notebooks}.yaml`.
Expand Down
8 changes: 4 additions & 4 deletions agents/conductors/build/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#
# Usage:
# build.sh [--mode build|deploy|release] [--force] [--accept-red=<reason>]...
# [--dry-run] [--json] [<action>] [-- <args forwarded to autobuild>]
# [--dry-run] [--json] [<action>] [-- <args forwarded to autohands>]
#
# --force proceed on a YELLOW verdict (deploy/release).
# --accept-red=<r> authorize proceeding despite the RED reason <r>. Repeatable.
Expand Down Expand Up @@ -193,7 +193,7 @@ case "$eff" in
esac

# ----- execution plan -----
plan_cmd="autobuild $action"
plan_cmd="autohands $action"
[[ ${#forward[@]} -gt 0 ]] && plan_cmd+=" ${forward[*]}"
plan=("$plan_cmd")

Expand Down Expand Up @@ -250,6 +250,6 @@ if [[ "$dry_run" -eq 1 ]]; then
exit 0
fi

autobuild="$(resolve_autobuild)" || exit $?
autohands="$(resolve_autohands)" || exit $?
[[ "$json_only" -eq 1 ]] || echo "== exec: $plan_cmd =="
exec "$autobuild" "$action" "${forward[@]}"
exec "$autohands" "$action" "${forward[@]}"
2 changes: 1 addition & 1 deletion agents/conductors/clone/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ bad usage).
partition, generation plan, CloneDecision. No writer at all. Proves the
reasoning on `PyAutoFit → autofit_assistant` as the dry-run case study.
2. **v1 — seed births. SHIPPED.** `--apply` for **lightweight-seed** via a
PyAutoHands primitive (`autobuild/clone_seed.py`: repo creation + generic-set
PyAutoHands primitive (`autohands/clone_seed.py`: repo creation + generic-set
copy + scaffolds + the `PENDING.md` growth queue). Heart gained the
newborn-validation checklist (`PyAutoHeart/docs/newborn_validation.md`).
3. **v2 — differentiated siblings.** Skill/wiki regeneration from the domain
Expand Down
2 changes: 1 addition & 1 deletion agents/conductors/clone/_clone.py
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ def apply_seed(args, decision):
plan_path = Path(tempfile.mkstemp(prefix="clone_plan_", suffix=".json")[1])
plan_path.write_text(json.dumps(plan, indent=2))

seed_script = PYAUTO_ROOT / "PyAutoHands" / "autobuild" / "clone_seed.py"
seed_script = PYAUTO_ROOT / "PyAutoHands" / "autohands" / "clone_seed.py"
if not seed_script.exists():
fail(4, f"Build primitive not found: {seed_script}")
cmd = [sys.executable, str(seed_script), str(plan_path)]
Expand Down
3 changes: 2 additions & 1 deletion agents/conductors/intake/_intake.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@
"autogalaxy": "PyAutoGalaxy", "autolens": "PyAutoLens",
"pyautomind": "PyAutoMind", "pyautobrain": "PyAutoBrain",
"pyautoheart": "PyAutoHeart", "pyautobuild": "PyAutoHands",
"pyautomemory": "PyAutoMemory", "autobuild": "PyAutoHands",
"pyautomemory": "PyAutoMemory", "autohands": "PyAutoHands",
"autobuild": "PyAutoHands", # back-compat: the package was renamed autobuild -> autohands
"workspaces": "workspaces",
}
PRIORITY_HIGH = ["urgent", "asap", "blocker", "blocking", "critical", "important",
Expand Down
2 changes: 1 addition & 1 deletion agents/conductors/release/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ Brain → Heart (gate) → Build (execute)
2. **The release door**: plain `release [--force]` delegates the readiness gate
*and* execution to the Build Agent's release mode
(`build.sh --mode release`), the **single** gate implementation — GREEN
proceeds, YELLOW needs `--force`, RED blocks; on a pass `autobuild
proceeds, YELLOW needs `--force`, RED blocks; on a pass `autohands
pre_build` dispatches `release.yml`. This conductor holds no second copy of
that gate.

Expand Down
2 changes: 1 addition & 1 deletion agents/conductors/release/release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ echo "== release conductor: delegating gate + execution to the Build Agent (rele

# One gate implementation, not two: the Build Agent's release mode refreshes
# health via the vitals faculty, applies GREEN / YELLOW(--force) / RED, and on
# a pass runs `autobuild pre_build` (which dispatches release.yml).
# a pass runs `autohands pre_build` (which dispatches release.yml).
args=(--mode release)
[[ "$force" -eq 1 ]] && args+=(--force)
for _a in ${accept_red[@]+"${accept_red[@]}"}; do args+=("--accept-red=$_a"); done
Expand Down
2 changes: 1 addition & 1 deletion agents/faculties/vitals/HEART_CAPABILITIES.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ reimplement inside Brain.

PyAutoHands has been fully renamed onto the Heart/Brain names (no PyAutoPulse or
PyAutoAgent references remain) and exposes health-shim commands such as
`autobuild verify_install`, `autobuild url_check`, and `autobuild watch|status|tick|fix`.
`autohands verify_install`, `autohands url_check`, and `autohands watch|status|tick|fix`.
These delegate to the health authority rather than owning readiness logic.

Decision: GREEN — the docs are renamed and the shims delegate only. Do not
Expand Down
2 changes: 1 addition & 1 deletion bin/pyauto-brain
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# PyAutoBrain is the reasoning layer of the PyAuto organism: it figures out HOW
# work should be done and coordinates the organs that do it. The subcommand
# pattern mirrors PyAutoHands/bin/autobuild and PyAutoHeart/bin/pyauto-heart so
# pattern mirrors PyAutoHands/bin/autohands and PyAutoHeart/bin/pyauto-heart so
# the CLIs feel the same. Agents live in two tiers under agents/:
#
# agents/conductors/<name>/ — front-door agents a human DRIVES (they decide
Expand Down
4 changes: 2 additions & 2 deletions config/policy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ sizing_categories:
workspace: [workspace, workspace_test, workspace_developer, howto, assistant, pipeline, project]
organism: [organ]
extra_workspace_targets: [workspaces]
extra_organism_targets: [autobuild]
extra_organism_targets: [autohands]

# Keyword -> PyAutoMemory sub-wiki (also the science vocabulary difficulty
# scoring keys off). Source of truth for the wiki list: PyAutoMemory/index.md.
Expand Down Expand Up @@ -58,7 +58,7 @@ target_signals:
pyautomind: [pyautomind, the mind, prompt registry, active.md, planned.md,
ideas.md, dashboard]
pyautoheart: [heart, readiness, health check, vitals, green verdict]
pyautobuild: [autobuild, release.yml, notebook generation, the hands]
pyautobuild: [autohands, autobuild, release.yml, notebook generation, the hands]

# Feature conductor: target -> the sub-wiki consulted by default.
target_default_wiki:
Expand Down
2 changes: 1 addition & 1 deletion docs/adoption/config_surfaces.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ framework organs is domain-free logic you pull from upstream.
| `agents/conductors/release/` — the library tuple + `nightly.sh` | Brain | Which libraries the release path drives. |
| `agents/faculties/memory/` — the wiki keyword map | Brain | Topic keywords → your Memory's sub-wikis. |
| `heart/readiness.py` — `DEFAULT_LIBRARIES`; `heart/checks/version_skew.py` — the workspace→(library, package) map | Heart | The release-gate repo sets. |
| `autobuild/run_all.py`, `autobuild/slow_skip_check.py`, navigator maps | Hands | Which workspaces the validation pipeline runs and skips. |
| `autohands/run_all.py`, `autohands/slow_skip_check.py`, navigator maps | Hands | Which workspaces the validation pipeline runs and skips. |

The honest state: some of these are clean policy files (Heart's
`config/repos.yaml`), others are constant tables inside code files. A
Expand Down
4 changes: 2 additions & 2 deletions docs/organs/build.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ work.

## The pieces

- **`bin/autobuild`** — the single dispatcher; every operation is a
- **`bin/autohands`** — the single dispatcher; every operation is a
subcommand with `--help` (`pre_build`, `generate`, `run_all`,
`tag_and_merge`, …).
- **`pre_build.sh`** — the declarative heart of the pipeline: one
Expand All @@ -30,6 +30,6 @@ work.
## For an adopter

Fork it. The pipeline mechanics are the framework; the `run_workspace`
table in `pre_build.sh` and the small maps in `autobuild/*.py` (which
table in `pre_build.sh` and the small maps in `autohands/*.py` (which
workspaces to run, what to skip) are the declared config surfaces you
rewrite for your own repos — see {doc}`../adoption/config_surfaces`.
2 changes: 1 addition & 1 deletion skills/ship_library/reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ grep -rn "<old_function_or_class>" \
euclid_strong_lens_modeling_pipeline/scripts/ HowToLens/scripts/
```

Also check `PyAutoHands/autobuild/config/no_run.yaml` — a changed symbol used by
Also check `PyAutoHands/autohands/config/no_run.yaml` — a changed symbol used by
a script listed there is a **hidden risk** (its release-pipeline integration
test is disabled). Present a data-driven recommendation:

Expand Down
2 changes: 1 addition & 1 deletion tests/test_policy_seams.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ def test_workspace_and_organism_sets():
assert "howtolens" in _sizing.WORKSPACE_REPOS
assert "workspaces" in _sizing.WORKSPACE_REPOS # policy extra
assert "pyautobrain" in _sizing.ORGANISM_REPOS
assert "autobuild" in _sizing.ORGANISM_REPOS # policy extra
assert "autohands" in _sizing.ORGANISM_REPOS # policy extra
# the three sets stay disjoint — a repo must classify one way
assert not (_sizing.LIBRARY_REPOS & _sizing.WORKSPACE_REPOS)
assert not (_sizing.LIBRARY_REPOS & _sizing.ORGANISM_REPOS)
Expand Down
Loading