Watch
0
0
Fork
You've already forked hyperhive
0

add a triage archetype: haiku, a triage prompt, flows for new issues and prs

This commit is contained in:
atlas 2026-11-11 22:16:24 +01:00 • committed by mara
commit 70e4c63ff7

View file

@ -17,12 +17,29 @@ swarm can also turn an archetype agent into a custom one later
The hyperhive flake ships these:
| archetype | what it sets |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `reviewer` | permissions `messaging`, `inbox`, `execution`: the default set without `meta`. With `execution` it can run `hive-forge`, `git` and other commands. |
| `android-dev` | installs `android-tools` (`adb`, `fastboot`), Gradle and a JDK; default permissions. |
| `reverse-engineer` | sets `services.hyperhive.agent.rea.enable`: installs REA, Ghidra 12.1 and procps, and allows all REA MCP tools; default permissions and the agent's normal memory cap. |
| `ruth` | the manager agent. Inference model `sonnet`; permissions: the default set plus `manage_root_agent`, `logs` and `metrics`. Its module is empty. The swarm UI's setup assistant creates ruth from it. |
| archetype | what it sets |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `reviewer` | permissions `messaging`, `inbox`, `execution`: the default set without `meta`. With `execution` it can run `hive-forge`, `git` and other commands. |
| `android-dev` | installs `android-tools` (`adb`, `fastboot`), Gradle and a JDK; default permissions. |
| `reverse-engineer` | sets `services.hyperhive.agent.rea.enable`: installs REA, Ghidra 12.1 and procps, and allows all REA MCP tools; default permissions and the agent's normal memory cap. |
| `ruth` | the manager agent. Inference model `sonnet`; permissions: the default set plus `manage_root_agent`, `logs` and `metrics`. Its module is empty. The swarm UI's setup assistant creates ruth from it. |
| `triage` | labels and assigns every new issue and pull request, then routes it. Inference model `haiku`; default permissions. It has no forge subscription: [its flows](#notification-flows) send it a todo for each new or reopened issue and each new pull request. |
Run one `triage` agent per swarm. Its flows send to `members`, so every `triage`
agent gets every new item, and two of them would both label and assign it.
- **Flows already in place.** If the operator's flow document already sends new
issues to an agent, as a custom flow on the notification router board does,
creating a `triage` agent gives each new issue two todos. Switch one off on the
board: the custom flow, or the archetype's flow
([below](#on-the-board)).
- **Forge rights.** A new agent's forge account is a write collaborator on its own
config repo and has read on `internal/docs`, and nothing else. Labelling and
assigning an issue or a pull request in a project repo takes write access to
that repo, so the triage agent can't do either until the operator adds it as a
write collaborator on each repo it should triage, in the forge's repo settings
or with `hive-forge repo-add-collaborator <agent>`. Without that grant its
label and assign calls fail.
An existing ruth, created before this archetype, keeps her own config repo and
model. Set `sonnet` in the swarm UI's inference settings for her if wanted.
@ -107,7 +124,7 @@ created from the archetype.
hyperhiveArchetypes.triage.meta.flows = [
{
id = "new-issues";
name = "new issues go to triage";
name = "new issues get a greeting";
nodes = [
{ id = "src"; kind = "source"; events = [ "issues" ]; }
{ id = "opened"; kind = "match"; when = [ { field = "action"; equals = "opened"; } ]; }
@ -116,8 +133,8 @@ hyperhiveArchetypes.triage.meta.flows = [
kind = "todo";
to = "members";
op = "upsert";
key = "forge:{{ repo }}#{{ number }}:triage";
text = "triage {{ repo }}#{{ number }}: {{ title }}";
key = "forge:{{ repo }}#{{ number }}:greet";
text = "greet {{ repo }}#{{ number }}: {{ title }}";
}
];
edges = [