culture-nodes
Culture Nodes is a durable, ledger-native workflow orchestrator for agents, code, services, and people. Workflows are immutable graphs; agents are triggered on their own machines through a provider-neutral protocol; code runs through an external runner boundary; and every result lands in an append-only work ledger where an agent's "done" is a claim, not a fact.
Every node has a contract. Every result has evidence.
See it running
A run is a live graph: solid edges have been walked, dashed edges are still
possibilities — and the loops from test.failed and verify.changes_required
back to build are domain outcomes on the graph, never engine failures.
Dark mode follows your OS, with the same design tokens the agentculture.org site ships — nothing here invents a sibling aesthetic.
Click any node (or press Enter on it — the whole canvas is keyboard-operable) to see what it really is: its pinned contract digest, its owner, every attempt, and the ledger records it appended.
The work ledger is the run's truth: every record carries its authority —
proposed renders dashed, confirmed/observed/derived render solid —
so an unverified completion claim looks unverified.
Everything the UI shows comes from the same /v1alpha1 API the CLI uses, so
anything you can see here you can script there.
Quickstart
The complete local system in one command (API + scheduler + worker + PostgreSQL + MinIO, UI embedded):
cd deploy/compose
cp .env.example .env # dev-only defaults; required — no password ships in the compose file
docker compose up --build # UI + API on http://localhost:8080
Publish the reference workflow and start a run from the Python CLI front:
export NODES_API_URL=http://localhost:8080
uv run nodes workflow publish examples/delivery-loop/workflow.yaml
uv run nodes run create --workflow <digest> --input examples/delivery-loop/input.json
uv run nodes run events <id> # follow the live event stream
For Kubernetes, the Helm chart deploys the same system with a migration Job,
probes, and worker replicas: 2 by default (multi-pod safety — leases and
fencing — is built in):
helm install nodes deploy/helm/culture-nodes
Phase 1 runs authless behind a private network — deploy only on a private cluster/VPC. See the chart's NOTES and
docs/guide.mdfor the full tour, including dev mode and the external-agent story.
What's in the box
- Go control plane (
cmd/nodes, one binary): compiler +nodes validate, a durable engine (fenced claiming, bounded loops, restart survival), the work ledger (agents propose; humans confirm; runners observe; validators derive), transactional outbox, Postgres/SQS queue drivers, scheduler, worker. - Actor protocol for external agents — colleague, claude, codex, or
anything speaking HTTP/JSON — with a runnable conformance kit
(
tests/conformance) and a reference bridge (adapters/colleague). - Runner boundary for code nodes: AWS Lambda adapter (registry-pinned, IAM-scoped, honest evidence) and a headspace-cli bridge for local dev. No Docker socket ever enters a control-plane container.
- Web front (
web/): the read-only Run and Ledger views above, embedded into the Go binary. - Python CLI front (
nodeson PyPI): thin, zero-dependency client of the same API.
The full design lives in
docs/initial-design/culture-nodes-prd-spec.md;
what was built, with evidence, in
docs/acceptance.md and
docs/deliveries/.
CLI
The Python front's product verbs (workflow, run, ledger, review) are
thin API clients; the identity verbs below work offline:
| Verb | What it does |
|---|---|
nodes whoami |
Report this agent's nick, version, backend, and model from culture.yaml. |
nodes learn |
Print a structured self-teaching prompt. |
nodes explain <path> |
Markdown docs for any noun/verb path. |
nodes overview |
Read-only descriptive snapshot. |
nodes doctor |
Identity invariants + API reachability. |
nodes cli overview |
Describe the CLI surface itself. |
Every command supports --json. Results go to stdout, errors/diagnostics to
stderr (never mixed). Exit codes: 0 success, 1 user error, 2 environment
error, 3+ reserved. The Go binary carries the same contract for its
serve / scheduler / worker / all / migrate / validate modes.
Mesh identity
This repo is also a Culture mesh agent: culture.yaml
(suffix: culture-nodes, backend: colleague) with the resident prompt file
AGENTS.colleague.md, and the vendored guildmaster/devague skill kit under
.claude/skills/ (cite-don't-import — see
docs/skill-sources.md).
Contributing
See CLAUDE.md for the working conventions: the design ground
rules distilled from the PRD, the version-bump-every-PR rule, the cicd PR
lane, and the vendored-skills policy.
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 culture_nodes-0.7.0.tar.gz.
File metadata
- Download URL: culture_nodes-0.7.0.tar.gz
- Upload date:
- Size: 14.7 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1037a182750e4b441b305cbbf325ed3bae39cdd7379500848cfdb1b2f90e768c
|
|
| MD5 |
36c6117642861f484df1f7764dd9bb9e
|
|
| BLAKE2b-256 |
adc4e95cc2c69d73ff821f1135f45f6dc173403833f25ce34ae50a20c65e845d
|
File details
Details for the file culture_nodes-0.7.0-py3-none-any.whl.
File metadata
- Download URL: culture_nodes-0.7.0-py3-none-any.whl
- Upload date:
- Size: 41.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.12.3 {"installer":{"name":"uv","version":"0.12.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eb18f0748b944e4c4e3f8e072fd07e7013e8c1442e8159fde1a093fc4dbaed21
|
|
| MD5 |
8af18e94061b960577715798d5c5d61c
|
|
| BLAKE2b-256 |
62d4bc2d0a18e286ad2f7ca7dcdaafd2e3ce77773391c641a9d1e9fd79ffa528
|