neurosymbolic-system
The runtime that lets agents control robots. Senses, rules, arbitration and
motion composed onto one 50 Hz tick — extracted from
reachy-mini-cli and imported
as a library by robot CLIs such as reachy-mini-cli and microduck-cli.
The robot CLI owns the hardware — the SDK client, the media session, the process supervision. This package owns the loop: who gets the head this tick, what the rules say about the sense snapshot, and how a behavior's contribution composes into a complete pose.
Status
Day zero. The runtime has not been extracted yet. What ships today is the
agent baseline — the CLI, the mesh identity, and CI — plus the design brief in
CLAUDE.md that describes the donor architecture and the seams the
extraction has to cut. Track progress there: each section moves out of "being
extracted" as it lands on disk.
What's here today
- An agent-first CLI cited from teken
(
afi-cli) — the runtime package has no third-party dependencies, and keeping it that way is a design rule (a library two robot CLIs import must install on a bare box). - A mesh identity —
culture.yaml(suffix+backend) and the matching resident prompt file (AGENTS.colleague.md, since this agent runsbackend: colleague). - The canonical guildmaster skill kit under
.claude/skills/, vendored cite-don't-import. Seedocs/skill-sources.md. - A build + deploy baseline — pytest, lint, the agent-first rubric gate, and PyPI Trusted Publishing wired into GitHub Actions.
Quickstart
uv sync
uv run pytest -n auto # run the test suite
uv run neurosymbolic-system whoami # identity from culture.yaml
uv run neurosymbolic-system learn # self-teaching prompt (add --json)
uv run teken cli doctor . --strict # the agent-first rubric gate CI runs
CLI
| Verb | What it does |
|---|---|
whoami |
Report this agent's nick, version, backend, and model from culture.yaml. |
learn |
Print a structured self-teaching prompt. |
explain <path> |
Markdown docs for any noun/verb path. |
overview |
Read-only descriptive snapshot of the agent. |
doctor |
Check the agent-identity invariants (prompt-file-present, backend-consistency). |
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.
Design in one page
The pieces below come from the donor and are what the extraction is cutting a
seam around. The long version, with the hardware measurements behind each
number, is in CLAUDE.md.
- One tick, one owner per channel. Each tick drops expired behaviors, arbitrates a single owner per channel, asks each owner for its contribution once, and composes a complete pose — unclaimed channels fall to neutral, so the target is never partial.
- Four contention classes —
passive,stoppable,unstoppable,stopping— resolved by(class priority, recency), in two pure functions with no I/O and no clock. Arbitration is abstention-aware: a behavior with nothing to say this tick yields the channel rather than freezing it. - One seam. Everything else — rules, agent intents, sense drivers, export
feeds, metrics — rides a single per-tick
tick_seamcallable as a pure consumer. The engine never imports them; they never import its internals. - Senses are injected peek callables, never imports, and every one degrades
to
Noneinstead of raising. - Rules are data, never code — react / inhibit / modes, loaded as a shipped layer plus a box-local overlay that overrides per rule id, so operator tuning survives an upgrade and new shipped rules still reach a deployed box.
- Drop, don't block. The 20 ms budget is the product: work that can block
goes to a worker, and every drop names its reason on a grep-able
[SENSE stage=… source=… event=…]line. - Validate fail-closed. An out-of-range axis or a runaway duration is refused, never clamped.
Consumers
| Repo | Relationship |
|---|---|
reachy-mini-cli |
donor and first consumer — its behavior engine run becomes a thin composition root over this library |
microduck-cli |
second robot, different plant, same tick |
reachy_nova |
reference only — an independent ~50 Hz loop several of these patterns were invented in |
Contributing
See CLAUDE.md for the full conventions: version-bump-every-PR, the
cicd PR lane, the worktree layout, and the rules for porting a module out of
the donor.
License
Apache 2.0 — see LICENSE.
Metadata
Release files for neurosymbolic-system 0.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| neurosymbolic_system-0.8.0.tar.gz | 172.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| neurosymbolic_system-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 196.1 kB
Release files / neurosymbolic_system-0.8.0.tar.gz
| Download URL | neurosymbolic_system-0.8.0.tar.gz |
|---|---|
| Size | 172.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d982e5e72ff79b4f81e380a032c6a024b91bdcfa5a7f17a3b97139fa301c4073
|
|
BLAKE2b-256 checksum How to use checksums |
b43b501ebea2b1f8912e13cdc16921b4f8af708782f34c36da32fb883b637bb1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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}
|
Release files / neurosymbolic_system-0.8.0-py3-none-any.whl
| Download URL | neurosymbolic_system-0.8.0-py3-none-any.whl |
|---|---|
| Size | 24.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7eddaac4771a09a1b73c1216aee34eae1922848dcda59938c86f7305bfdf5ade
|
|
BLAKE2b-256 checksum How to use checksums |
662cf4e64c496cec9685ceaf2c67db0b9f9c810348bdd1864dab49a181ed9fb2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","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}
|
Security for neurosymbolic-system 0.8.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.