- AGENTS.md: build instructions for AI coding agents - docs/: AICC core spec copy, JSON schema, testbed design notes - scripts/: setup.sh, BUILDLOG.md - README.md: overview and reading order
3.2 KiB
Testbed design notes
How the aicc-capsule testbed maps onto the AICC Protocol. Read aicc-core.md for the protocol itself; this file is testbed-specific.
World
- One room: a floor, four walls, 2–3 obstacles (boxes), one interactable (a glowing beacon).
- Coordinate system: right-handed, Y-up. Room ~16×16 units.
- The capsule starts at a fixed corner; the beacon sits in the opposite area.
The capsule
- A cylinder/capsule body with a heading (yaw) and a camera (pitch).
- Physics: simple — position, velocity, collision against walls/obstacles. AABB or capsule-vs-box is enough. No gravity needed (or trivial gravity).
move(forward)pushes along heading;turn(yaw)rotates; collisions stop movement.
Tools (all must exist in the bridge)
| id | class | purpose | returns |
|---|---|---|---|
proprioception |
sensor | agent's own state | position, rotation, velocity, health |
vision |
sensor | first-person RGB frame | base64 PNG + width/height/tick |
hear |
sensor | audio events since last call | list of {kind, direction, intensity} |
move |
actuator | translate along heading | new position |
turn |
actuator | rotate yaw/pitch | new rotation |
look_at |
actuator | orient camera at a target | new rotation |
interact |
actuator | use the beacon | result message |
Optional: depth (depth map), world_query (room bounds). If you add tools beyond the list, document them in the bridge manifest via descriptions.
Vision
The most important sensor. Render the capsule's view to an image and return it as base64 PNG. Resolution small (e.g. 160×120) to keep latency and tokens down. If the engine can't render, fall back to a canvas-drawn approximation (raycast floor + box silhouettes) — but it must reflect actual world state, not a placeholder.
Events
collisionevent with payload{other, normal, impulse}when the capsule hits something.- Use
bridge.emit_event(...)(available in aicc-py) from tool handlers. - The agent can subscribe to
tickfor a periodic heartbeat if useful.
Agent loop (demo)
AICCClient(WebSocketClientTransport("ws://localhost:8765"))handshake()→ manifest- Loop: call
vision+proprioception, feed to LLM with tool schemas, execute returned tool calls, repeat untilinteractsucceeds. - Print every tool call and result to stdout (transcript).
The demo should work with any tool-calling LLM. Provide a generic loop that takes a model function; include one example wired to a local/cheap model (ollama or similar) and note in README how to swap providers.
Conformance
The bridge must pass all 9 core scenarios. Note: the conformance reference bridge registers tools echo, boom, bump in addition to the world tools — register those three on the testbed bridge too (trivial: echo returns input; boom raises; bump emits a collision event) so the scenario suite runs green against the same bridge instance used in the demo.
Non-goals
- No networking beyond WebSocket. No multi-agent. No persistence. No rendering window (headless preferred; a window is optional debug aid).
- No engine-specific protocol extensions. If the engine needs something extra, it goes in the manifest as an extra tool, not a protocol change.