A portfolio set up by hand drifts, one project at a time.

An operator running many projects at once needs each one wired the same way: the same checks, the same hook entry point, the same place to keep project-wide config. Set that up by hand and it drifts. One project gets a rule the others miss, a config key falls out of date, a hook points at a binary that has moved. The drift stays invisible until a session leans on it.

ae-sys is the front door that removes the hand work. One command writes a project's config, its hook router, and its Claude Code settings, then installs and reports on the two sibling binaries it drives: hux, the checker that holds every edit to shape, and ae-handover, the continuity tool that carries state across sessions. One config per project root governs all three. The harness becomes something a project inherits, not something rebuilt each time.

Three binaries on one shared substrate, driven from one front door.

ae-sys is one binary in a Rust workspace of three. Each installs and upgrades on its own; a single config file at the project root drives all three, and a single hook router is the one entry point for every lifecycle event. ae-sys is the front door of the set: it installs the others, migrates legacy config, and reports health across the family.

Anatomy ae-sys
01 Front door
the binary that installs the family and sets up a project
02 Config
one file at the project root drives all three binaries
03 Substrate
one shared crate layer: config, audit trail, machine-checked event schema
04 Router
one entry point for every lifecycle event the harness sees
05 hux ›
holds every edit to shape
carries project state across sessions

One event in, one verdict out, the same shape on either ground.

The harness has to run in two places: a desktop with the full toolchain, and Anthropic's remote runtime, where the binaries do not exist. The router ae-sys installs reads the environment and decides. On the desktop it hands the event to the native executor; in the remote runtime it falls back to a small per-event bash subset covering the core lifecycle. Either way the verdict comes back in one shape, so the model sees a single contract on both grounds.

event to verdict ae-sys
Lifecycle event the model edits, runs, or finishes a tool call
Native / desktop
01 Router
the full toolchain is present
02 Dispatch
hand the event to the native executor, routed by type
03 Verdict
the executor returns its decision
Remote / runtime
Router
no native binary in the runtime
Subset
a small per-event bash script covers the core lifecycle
Passthrough
an unrecognised event passes through clean
Verdict one shape both paths: continue · block · approve

The commands that set a project up and keep it true.

ae-sys is the management surface for the harness: an ordered set of commands that take a project from bare to governed and hold it there. The sequence runs from first setup through health checks, and auto-setup folds it into the one hook Claude Code fires on a fresh project.

Setup to governed ae-sys
01 / init
Config, router, and settings, seeded from the project type.
02 / update
Router and config to the current schema.
03 / migrate
Legacy config to the unified format.
04 / doctor
Audit against the live project, fix in place.
05 / info
Versions, config, and hooks across all three.
06 / auto-setup
Wired the first time the model visits.
One config
One file at the project root governs all three.

A harness is only as disciplined as its least-governed project.

Before / after ae-sys
Without it
Each project is wired by hand: three loose tools and a config that drifts apart from one project to the next.
With ae-sys
One command installs the family and writes one rule set, so every project answers to the same harness.
work