agent-augury
Model-agnostic passive awareness multi-agent runtime.
Concept inherited from AgentRadio (arXiv:2607.28430) and re-implemented as a standalone open-source project — not bound to any model, channel, or cloud runtime.
Design doc: see
DESIGN.md(Korean).
Core idea
Agents listen while they work. Incoming teammate messages are pushed to an
inbox by the in-process message server; each agent's next step() drains the
inbox automatically. Communication never blocks the work — that is passive
awareness.
Three primitives (implemented by the internal message server)
| Primitive | Behavior |
|---|---|
create_thread(name, participants) |
Create a named thread, return its id |
send_message(thread, content, mentions) |
Append + push to targets' inboxes; returns immediately (fire-and-forget) |
read_resource() |
Explicit full state dump for recovery or aggregation |
Status
v0.3 — OAuth provider-level authentication, unlimited steps by default.
- 3+ agents (A/B/C) + internal message server (in-process asyncio, memory state)
- Receive model: send → inbox push →
step()auto-drain (single consumer) - Consensus gate: propose → unanimous APPROVE → gate OPEN → work shares
(
examples/consensus_demo.py) — order-based assertions on server sequence numbers. - P1~P5 full protocol: explore → split → execute → review → submit
(
examples/p1_to_p5_demo.py) — all five phases advance in order with unanimous gates. - Real-backend E2E:
examples/consensus_openai.yaml— a real OpenAI-compatible LLM generates PROPOSE/APPROVE messages autonomously (secrets via.envonly). - Discord observation mirror: read-only webhook flush; core never reads back.
- Phase transition hooks: explicit
PhaseManagerfor v0.2 P1~P5 expansion. - OAuth provider-level auth: multiple agents sharing
nous_oauthauthenticate only once — the token is reused across all backends for the same provider. - Unlimited steps by default:
max_steps=0means no cap; set a positive integer to limit total steps across all agents.
Fake demo vs. real collaboration
| Dimension | consensus_demo.py (Fake) |
consensus_openai.yaml (Real) |
|---|---|---|
| Model | FakeModelBackend — pre-scripted messages |
OpenAI-compatible LLM (e.g. gpt-4o-mini) |
| PROPOSE/APPROVE content | Fixed in code | Generated autonomously by the model |
| Secrets | None | OPENAI_API_KEY from environment |
| Purpose | Gate logic verification (deterministic) | E2E collaboration with real reasoning |
Both run the identical gate protocol: propose → unanimous approve → gate OPEN → work shares. The fake demo verifies the protocol is correct; the real config shows it works with an actual LLM.
Install & run
pip install -e ".[dev]"
pytest tests/ -q # unit tests (offline; skips OpenAI integration)
python examples/consensus_demo.py # v0.1b consensus gate verification
python examples/p1_to_p5_demo.py # v0.2 P1~P5 full protocol verification
agent-augury --demo --config examples/p1_to_p5_protocol.yaml # same P1~P5 flow via YAML (offline)
agent-augury --demo --config examples/demo.yaml # E2E demo with a fake backend
agent-augury --config examples/consensus_openai.yaml # E2E with a real LLM (needs OPENAI_API_KEY)
# Opt-in OpenAI API smoke (incurs cost):
# export AUGURY_RUN_OPENAI_TESTS=1 OPENAI_API_KEY=sk-...
# pytest tests/test_integration_openai.py -m openai -v
Running locally (Windows + .venv)
The quickest way to run agent-augury on Windows is from a project-local
.venv. The agent-augury console script is installed into
.venv\Scripts\ — use that instead of a global Python install, which
lacks the project's dependencies (aiosqlite, PyYAML, etc.).
# PowerShell — from the project root
.venv\Scripts\agent-augury
# cmd
.venv\Scripts\agent-augury.exe
Why
.venv? A globally installedagent-augury(e.g. viapip installinto a system Python) has no access to the project's dependencies and will fail withModuleNotFoundError. Always run through the project's.venv.
To run agent-augury from any directory, add .venv\Scripts to your
user environment PATH:
# PowerShell (persistent)
[Environment]::SetEnvironmentVariable(
"Path",
"$env:USERPROFILE\IdeaProjects\agent-augury\.venv\Scripts;" +
[Environment]::GetEnvironmentVariable("Path", "User"),
"User"
)
After reopening your terminal, agent-augury works from anywhere.
Interactive wizard
Running agent-augury without --config launches an interactive
wizard that builds a YAML config through a conversation:
agent-augury
The wizard walks through:
- Max steps — total step cap across all agents.
0means unlimited (the default). A positive integer caps the entire session. - Backend / provider — choose per agent:
openai— OpenAI-compatible APInous— Nous Portal (API key)nous_oauth— Nous Portal (OAuth device code — no API key)
- Add another agent? — repeat step 2 for multi-agent setups.
The wizard then asks for an initial task and starts the session.
No API keys on disk. Only environment variable names are stored (e.g.
OPENAI_API_KEY). Actual values are read from your environment or a.envfile at runtime.
Saved model settings
Model settings (max_steps, agent IDs, backend types, model names,
base URLs, env-var names) are persisted to
~/.agent-augury/model_config.json. On the next run, the wizard
detects this file and skips straight to the task prompt — no need to
re-enter backends or agent structure.
Use --reconfigure to discard the saved settings and re-run the full
wizard from scratch:
agent-augury --reconfigure
OAuth (nous_oauth) — one-time authentication
When you pick nous_oauth, the wizard opens a browser for the OAuth
device-code flow. The resulting token is stored at
~/.agent-augury/tokens.json (mode 0o600) and shared across all
agents using the same provider — so even with 3+ agents on
nous_oauth, the browser opens only once.
- Token expiry → automatic refresh.
- Refresh fails → one re-authentication, then the new token is saved.
Running from a YAML config
Skip the wizard entirely by pointing at a pre-built YAML:
agent-augury --demo --config examples\p1_to_p5_protocol.yaml
agent-augury --config examples\consensus_openai.yaml
Use --output to control where the wizard writes the generated YAML
(only valid without --config):
agent-augury --output my_session.yaml
Command-line options
| Flag | Description |
|---|---|
--config <yaml> |
Run directly from a YAML file (skips wizard) |
--demo |
Allow type:fake backends in config (offline demo/benchmark) |
--reconfigure |
Discard saved model settings and re-run the wizard |
--output <path> |
Wizard output path (only valid without --config) |
--quiet |
Suppress broadcast events (currently unimplemented) |
License
Apache-2.0. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_augury-0.3.0.tar.gz.
File metadata
- Download URL: agent_augury-0.3.0.tar.gz
- Upload date:
- Size: 114.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ff7f663cb600c03bb5f263f418e05e5e793511cec5f5893a489fe6bde9cc838
|
|
| MD5 |
337e8e9d0421a27fc2943b200ac7a9cd
|
|
| BLAKE2b-256 |
78c3cc71aa062a9ff8f68029e694f3cda5e276946df75c800e96db42f94fdcb6
|
File details
Details for the file agent_augury-0.3.0-py3-none-any.whl.
File metadata
- Download URL: agent_augury-0.3.0-py3-none-any.whl
- Upload date:
- Size: 66.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
912ebb1b45eb95682966f0dbfd644ed4733304e024e62139d116c4715a46ebd0
|
|
| MD5 |
7d4846c1d2adac5740af15aff92bfbfb
|
|
| BLAKE2b-256 |
7a42ab6e6f3d3349b0493b9a0910a3ec7a0113973cda6eb4ef8dc0763ff96ff0
|