Camau
(
camau - Welsh, 'cam-eye', meaning 'steps')
Camau is a Rust-backed asynchronous JSON workflow router for Python. the tool makes use of a generic vocabulary of tasks to manage routing for JSON messages between APIs - particularly useful for gateway services in machine learning usecases. Camau makes use of json configuration files for its routing rules, to allow for human readable and machine enforcible boundaries.
Setup
to use camau you must first install it, ideally into a python virtual environment:
pip install uv
uv venv --python 3.13
source .venv/bin/activate # or .venv\Scripts\activate on windows
uv pip install camau
from here, camau exposes 4 tools:
- python based
Routerobject (for use in APIs) - cmd schema analysis tool (for use in CI/CD)
- cmd based routing visualisation tool (for use in user documentation)
- agent skill for writing new configurations
The examples below all use the same three-layer workflow. It sends high-priority
requests to one task and all other requests to another, then reduces the task result
to a small response object. Save it as routing.json to follow the examples.
{
"entry": "route-request",
"output": "format-response",
"nodes": [
{
"id": "route-request",
"type": "deterministic-gate",
"select": "/priority",
"cases": [
{"operator": "eq", "value": "high", "target": "expedite"},
{"operator": "otherwise", "target": "standard"}
]
},
{
"id": "expedite",
"type": "task",
"task": "priority-handler",
"next": "format-response"
},
{
"id": "standard",
"type": "task",
"task": "standard-handler",
"next": "format-response"
},
{
"id": "format-response",
"type": "map-schema",
"mappings": [
{
"target": "/request-id",
"path-to-source": "/request/id",
"type": "string"
},
{
"target": "/handled-by",
"path-to-source": "/handled-by",
"type": "string"
}
]
}
]
}
Router
Router is the Python interface. Import and use a Router object into your python session to consume a configuration json and route input messages as described.
Example
import asyncio
from pathlib import Path
from camau import Router
async def priority_handler(request):
return {**request, "handled-by": "priority"}
async def standard_handler(request):
return {**request, "handled-by": "standard"}
router = Router(
Path("routing.json").read_text(encoding="utf-8"),
{
"priority-handler": priority_handler,
"standard-handler": standard_handler,
},
)
async def main():
result = await router.run({"request": {"id": "req-42"}, "priority": "high"})
print(result)
asyncio.run(main())
{'request-id': 'req-42', 'handled-by': 'priority'}
The full Python interface, including exceptions and task result requirements, is defined in the Python API specification.
Analysis
camau assess checks a routing specification json without running any tasks. It reports
JSON structure errors and workflow problems such as missing references, unreachable
nodes, cycles, invalid gate cases, and incorrect convergence. A valid assessment exits
with status 0; invalid input exits with status 1. Text, JUnit XML, and GitHub
annotation output are available for local use and CI.
camau schema prints the camau configuration JSON Schema when an editor or another tool needs
the structural schema directly.
Example
$ camau assess routing.json
Camau assessment valid
For CI, select a machine-readable report with --format junit or --format github.
Visualiser
camau diagram turns a valid routing specification into a Markdown document containing
a Mermaid workflow graph, a routing legend, and a table describing each node. It runs
the same assessment first and does not emit a partial diagram for an invalid workflow.
Example
$ camau diagram routing.json > routing.md
flowchart TD
input(["Input"]) --> n0
n0{"route-request<br/><small>deterministic gate</small>"}
n1["expedite<br/><small>task</small>"]
n2["standard<br/><small>task</small>"]
n3[/"format-response<br/><small>map schema</small>"/]
n0 -. "= "high"" .-> n1
n0 -. "otherwise" .-> n2
n1 -.-> n3
n2 -.-> n3
n3 --> output(["Output"])
classDef boundary stroke-width:3px
classDef failure stroke:#c62828,stroke-width:2px
class input,output boundary
The generated routing.md shows the route-request gate leading to either task, with
both routes continuing to format-response.
Skill
The repository includes a camau-routing skill for coding agents. It supplies the
configuration rules and a verification sequence for creating, changing, or reviewing
a routing specification.
Example
Give the agent the task contracts and intended behaviour rather than asking it to infer either from task names:
Use the Camau routing skill to create routing.json. Requests have a string at
/request/id and a string at /priority. Route "high" priority to the asynchronous
priority-handler task and every other value to the asynchronous standard-handler
task. Both tasks accept the request object and return it with a string at /handled-by.
Return only /request-id and /handled-by. Assess the specification, inspect its diagram,
bind both tasks to construct Router, and exercise the high-priority and fallback routes.
The resulting specification is the same routing.json used by the Router, analysis,
and visualisation examples above.
AI use disclosure
camau was built using an agentic ai harness, you can read about the process and my takeaways on this blog. future updates to the tool where appropriate will make less use of ai now that the initial experiment is complete.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
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 camau-1.0.0.tar.gz.
File metadata
- Download URL: camau-1.0.0.tar.gz
- Upload date:
- Size: 48.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
maturin/1.15.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4baf3036e89b3efd30eff16a6d7271c611123b99dfbcf190ea8a4958f1fed622
|
|
| MD5 |
4a1b478e61dab857c75df2629069d930
|
|
| BLAKE2b-256 |
c9c5a7b9869d7cf80aca43515ccafa5876f8f21c749b5f3a2eee8619c2cb94b7
|
File details
Details for the file camau-1.0.0-cp311-abi3-win_amd64.whl.
File metadata
- Download URL: camau-1.0.0-cp311-abi3-win_amd64.whl
- Upload date:
- Size: 549.2 kB
- Tags: CPython 3.11+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
maturin/1.15.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3fbad28056cf249bbaf618490924af45454837714190f420ea3ac294f7646d34
|
|
| MD5 |
da6c48c087f98ac771017088e99fb5e3
|
|
| BLAKE2b-256 |
6e3c15e5fc747f02468b8e646aa41b61b695e0e48747d94694191e97ed8debad
|
File details
Details for the file camau-1.0.0-cp311-abi3-manylinux_2_28_x86_64.whl.
File metadata
- Download URL: camau-1.0.0-cp311-abi3-manylinux_2_28_x86_64.whl
- Upload date:
- Size: 615.4 kB
- Tags: CPython 3.11+, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
maturin/1.15.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7c33ec28483bbf1d2a8a38b74292a7d31732a0caad2b6279a0c5660bd675af6
|
|
| MD5 |
8845a306529670049072a1d0337bf914
|
|
| BLAKE2b-256 |
b2251ecf976ecf33274609f043d1516c9d024ec1b90d59590645b53cd82a7544
|
File details
Details for the file camau-1.0.0-cp311-abi3-manylinux_2_28_aarch64.whl.
File metadata
- Download URL: camau-1.0.0-cp311-abi3-manylinux_2_28_aarch64.whl
- Upload date:
- Size: 572.7 kB
- Tags: CPython 3.11+, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
maturin/1.15.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
414bef4e65896a0f73be256820cde7fcfbbfc7b0baaf197244fa65783700ab81
|
|
| MD5 |
ec08f11a8b651424b83ee83bc9a79b64
|
|
| BLAKE2b-256 |
625e770a868fa378e1b9cc47c923d5ef2b3dfefa36aa27bc8ce84f3ae561c7e7
|