Five tiny agents on local ports + a 13-case test matrix. Used as the reproducible setup that exercises the Bindu Gateway end-to-end. If you're new to bindu start at docs/GATEWAY.md — this folder is what its walkthrough uses under the hood.
export OPENROUTER_API_KEY=<get one at https://openrouter.ai/keys>
uv sync --extra agentsEach agent is ~60 lines of Python that wires openai/gpt-4o-mini to a few lines of instructions.
| Agent | Port |
|---|---|
| joke_agent | 3773 |
| math_agent | 3775 |
| poet_agent | 3776 |
| research_agent | 3777 |
| faq_agent | 3778 |
Gateway sits at 3774 (when running).
./examples/gateway_test_fleet/start_fleet.sh # boots all five in the background
./examples/gateway_test_fleet/stop_fleet.sh # stops them cleanlyLogs land in logs/<agent>.log. PIDs in pids/<agent>.pid (so stop_fleet.sh can find them).
./examples/gateway_test_fleet/run_matrix.sh # all 13 cases
./examples/gateway_test_fleet/run_matrix.sh Q_MULTIHOP # one case by idCase definitions live in matrix.json. SSE logs per case land in logs/cases/.
With AUTH__ENABLED=false, hit joke_agent on its port:
curl -sS http://localhost:3773/ \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"message/send","id":"00000000-0000-0000-0000-000000000004","params":{"message":{"role":"user","parts":[{"kind":"text","text":"tell me a joke about cats"}],"kind":"message","messageId":"00000000-0000-0000-0000-000000000001","contextId":"00000000-0000-0000-0000-000000000002","taskId":"00000000-0000-0000-0000-000000000003"},"configuration":{"acceptedOutputModes":["application/json"]}}}'With auth on, sign each body with the agent's DID key — see docs/AUTH.md. The Hydra smoke test in hydra_smoke_test.sh is a good place to start if auth is misbehaving.