A lightweight runtime that routes work from a Source, to an interchangeable AI-agent Target, back through an Output.
Source → Runtime → Target → Response → Output
It is not an agent framework, an orchestration engine, a workflow builder, or an LLM wrapper — those are things you plug into it. Waken's own job is small on purpose: receive work, route it to the correct agent, return the result through the right channel. Think "nginx for AI agents," not "another LangGraph."
Install
pip install waken
Zero external services — no Docker, no Redis, no Postgres. State (sessions, scheduled jobs, retry queue) lives in one SQLite file, created automatically.
Target and channel adapters ship as separate packages (see
ADR 0001)
so core stays dependency-free, but they can be pulled in alongside waken
with extras:
pip install waken[groq] # a single adapter
pip install waken[groq,voice] # several at once
pip install waken[all] # every adapter
Available extras: claude, gemini, copilot, openai, mistral,
cohere, groq, bedrock, ollama, voice, slack, telegram.
Quickstart
# app.py
from waken import Event, Response, Runtime, target_fn
@target_fn
async def echo(event: Event) -> Response:
return Response(text=event.payload["prompt"])
runtime = Runtime()
runtime.target("echo", echo)
runtime.run()
waken run app.py
In another terminal:
waken send echo "Build tic tac toe." --wait
# Build tic tac toe.
That's it — runtime.run() is already reachable over HTTP
(http://localhost:8080), with a CLI, a scheduler, and a retry queue on the
same object, no extra setup. A real deployment swaps echo for a Target
adapter (waken-claude, waken-gemini, ...) — same shape, same three lines.
What it does
- Sources turn something happening — an HTTP request, a webhook, a
scheduled tick, a new file — into an
Event. - Targets receive an
Eventand return aResponse. SwappingClaudeAdapter()forGeminiAdapter()is a one-line change; nothing else in the runtime has to know. - Outputs deliver a
Responseback through a channel (terminal, Slack, email, ...) — decoupled from wherever theEventcame from.
runtime.target("claude", ClaudeAdapter())
runtime.target("gemini", GeminiAdapter())
@runtime.every(hours=1)
async def hourly_summary():
await runtime.send(target="claude", prompt="Summarize today's commits.")
runtime.serve(port=8080)
More runnable examples: examples/ (scheduling, broadcasting to
multiple targets, routing an inbound webhook).
CLI
waken run <script.py> # execute a script that builds a Runtime and calls run()
waken send <target> <prompt> # POST /send/<target> on a running instance
waken emit <event> <json> # POST /emit/<event>
waken inspect # targets, sources, outputs, jobs, queue depth
Documentation
- Prior art review — what this fills that agent frameworks, MCP/A2A, and 2026's wave of "agent gateways" don't.
- Architecture Decision Record — the design and the alternatives it rejected.
- Public API specification — the full API, with examples.
- Implementation plan — milestones, and how the actual build diverged from the original plan along the way.
Status
Pre-release. The core API described above is implemented and tested.
Target adapters (waken-claude, waken-gemini, waken-copilot, ...) and
channel adapters (waken-voice, waken-slack, waken-telegram) ship as
separate packages, published independently of core — see the ADR's
alternatives for why core never depends
on them.
Development
git clone https://github.com/WakenHQ/waken
cd waken
pip install -e ".[dev]"
pytest
License
Metadata
Release files for waken 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| waken-0.1.2.tar.gz | 343.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| waken-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 368.5 kB
Release files / waken-0.1.2.tar.gz
| Download URL | waken-0.1.2.tar.gz |
|---|---|
| Size | 343.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9ea520c0d6537469c2d1ef01fcc366968e7a492369dd48d3671068ff5658fe64
|
|
BLAKE2b-256 checksum How to use checksums |
413810785e65af7b1f0e53a2e929cc5e31e8648244a1d102ce83f2f38abd6df1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency logRelease files / waken-0.1.2-py3-none-any.whl
| Download URL | waken-0.1.2-py3-none-any.whl |
|---|---|
| Size | 24.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8c4bdcb377d2f2129861692b29aa8e5e3460a74cf06990b5c754e75b537b7ac0
|
|
BLAKE2b-256 checksum How to use checksums |
1ec11927f2fb70fda7db78cf991d0ec24b882c95416e1c54a0f64cbb85b33ca6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 5, 2026.
Transparency log