---
name: attractor-build-harness
description: attractor (dark-factory AI build harness) setup + pi/codex model gotcha + viability verdict for building spt-core
metadata: 
  node_type: memory
  type: reference
  originSessionId: 7c9a949f-f8c3-4b62-b399-3e7199aa8994
---

**attractor** = BigscreenVR's local-first DOT-graph workflow engine for unattended AI software work (git-ref run state, human gates, tool/agent nodes; agent layer = `pi` harness). Cloned + `uv sync`'d at `../attractor` (sibling of spt-core), incl. the `fabro-checkpoint` Rust submodule (the real git-KV impl to mine for [[ — see ADR-0011/STORAGE.md BranchStore]]).

**Setup state (2026-06-03):** `pi` 0.78 installed globally (`C:\nvm4w\nodejs\pi`); authed to codex. `uv` installed via pip (use `python -m uv ...`; bare `uv` not on bash PATH). attractor CLI: `cd ../attractor && python -m uv run attractor <cmd>`. Tool nodes need `pwsh` 7 on Windows (have 7.6).

**Gotcha — codex model id:** the user's ChatGPT account model is **`openai-codex/gpt-5.5`** (in `~/.pi/agent/settings.json` `defaultModel`). attractor's SPEC example `openai-codex/gpt-5.3-codex` (and `-spark`, `gpt-5.1/5.2/5-codex`) are ALL rejected: "model not supported when using Codex with a ChatGPT account." Use `gpt-5.5` in the `model_stylesheet`. **v0.1 sharp edge:** a failed/empty agent call still reports node outcome=SUCCESS (0 tokens, ~2s) — sanity-check token counts on the first agent node.

**Verdict (evidenced by the SPIKE-07b gix pilot):** viable build harness for **bounded, single-machine, deterministically-verifiable** spt-core tasks. Codex wrote a correct in-process gix BranchStore autonomously (plan→gate→implement→verify→gate; self-corrected gix API errors within the implement node). Caveats: design/spec stays human (goal.md + plan review carry judgment); cross-machine/cross-OS tasks need the test rig ([[cross-machine-test-rig]]); human gates are unrouted (route-to-user = spt-core's own notif/PresenceChannel primitive → attractor-on-spt fit).
