associate
associate is a non-coding agent harness — a fast, reliable worker for read,
summarize, and find work across local files and the web. It exists to take
non-coding tool work off colleague
so colleague can spend its budget on coding and thinking.
Modelled on the Pi harness, merged from colleague's base tools.
The name is not incidental: associate is a first-class role in
lobes — the tenth Colleague-facing
lobe, backed by nvidia/NVIDIA-Nemotron-3.5-Lightning-30B-A3B-NVFP4 and defined
there as worker minus repo_action: it executes, drafts, inspects and calls
tools, then hands the result back rather than enacting it. This repo is the
agent harness for that role. The lane is live — a lobes gateway proxies it over
the tailnet to a Jetson AGX Orin 64GB running the orin-associate shape.
Status: scaffold, not yet a harness
Read this before you install it. What ships today is the agent-first CLI and the skill kit — introspection verbs, a mesh identity, and a green build/test/publish baseline. The harness itself is not built: there is no read verb, no summarize verb, no find verb, and no web fetch. Nothing here takes work off colleague yet.
What is live is the model lane underneath it (see above) — the serving side is ready and waiting for a harness to drive it.
The rest of this README describes what exists. See
CLAUDE.md for what to build on top of it, and for the measured
topology of the lane.
Quickstart
git clone https://github.com/agentculture/associate && cd associate
uv sync
uv run associate whoami # who this agent is
uv run associate learn # self-teaching prompt (add --json)
uv run pytest -n auto # the test suite
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 takes --json. Results go to stdout, errors and diagnostics go
to stderr — never mixed, so an agent parsing the output can rely on it. Errors
in JSON mode are {code, message, remediation}; in text mode they are an
error: line and a hint: line. Exit codes: 0 success, 1 user error, 2
environment error, 3+ reserved.
The runtime package has no third-party dependencies — it installs and starts fast, which is the whole point of a harness.
What you get
- An agent-first CLI cited from teken
(
afi-cli), with the stdout/stderr,--json, error-shape, and learnability contract above enforced in CI byteken cli doctor --strict. - A mesh identity —
culture.yaml(suffix+backend+model) and the matching resident prompt file. associate runsbackend: colleague, so the resident prompt isAGENTS.colleague.md;CLAUDE.mdis the prompt for Claude Code sessions working on the repo. Both audiences are real. - 19 skills under
.claude/skills/, vendored cite-don't-import. Provenance for every one is tracked indocs/skill-sources.md. - A build + deploy baseline — pytest, four linters, markdownlint, the rubric gate, SonarCloud, and PyPI Trusted Publishing wired into GitHub Actions.
Skills
Eight of the vendored skills form one workflow, not eight independent tools.
They come from devague and carry an
idea from vague to accounted-for:
flowchart TB
subgraph spec [spec]
direction LR
S[1 scope] --> T[2 think] --> C[3 challenge]
end
subgraph plan [plan]
direction LR
P[4 spec-to-plan] --> A[5 assign-to-workforce]
end
subgraph delivery [delivery]
direction LR
D[6 deviate] --> V[7 validate-delivery] --> Z[8 summarize-delivery]
end
spec --> G1{{Gate 1 — you approve the spec}} --> plan
plan --> G2{{Gate 2 — you approve the split plan}} --> delivery
delivery --> G3{{Gate 3 — you review the PR}}
Three gates are yours: the spec, the split plan, the PR. Inside them you also adjudicate — every proposal the agent files waits for your confirm, and a mid-run deviation waits for your approval. Everything else is the agent's, and all of it is written down. Nothing is deleted to go green: unknowns are parked, questions are resolved, failures are reported faithfully.
The other eleven cover the day-to-day:
| Skill | What it's for |
|---|---|
cicd |
The PR lane — open, read review comments, reply, and gate on SonarCloud. |
communicate |
File issues on sibling repos and send messages to Culture mesh channels. |
ask-colleague |
Hand a scoped task to a different model for a genuinely independent second opinion. |
remember / recall |
Write to and search the shared eidetic memory store. |
run-tests |
pytest with parallel execution and coverage. |
version-bump |
Bump semver and prepend a CHANGELOG entry — required on every PR. |
sonarclaude |
Query the SonarCloud API directly. |
agent-config |
Show a Culture agent's full configuration in one read-only view. |
pypi-maintainer |
Switch a package install between PyPI, TestPyPI, and local editable. |
doc-test-alignment |
Verify committed docs still describe what the code does (stub today). |
Optional tooling
The CLI needs none of this. Individual skills do, and each degrades with a clear
install hint rather than blocking a clone that never uses it:
devex (>=0.21) for cicd, agtag (>=0.1) for communicate, devague
(>=0.24) for the eight-skill chain, colleague for ask-colleague, and
eidetic (>=0.10.0) for remember / recall.
Contributing
Every PR bumps the version — including docs-only and CI-only changes. CI enforces
it. Vendored skills are never patched in place; fixes go upstream and come back
on the next sync. Both rules, and the CLI contract you must not break, are in
CLAUDE.md.
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 associate-0.8.0.tar.gz.
File metadata
- Download URL: associate-0.8.0.tar.gz
- Upload date:
- Size: 198.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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 |
da63c75051290a5dbb4edabfd284f789479a85b5c205bc52e6157af427ba8635
|
|
| MD5 |
6e6e2261b34e98de51a45d046e8188db
|
|
| BLAKE2b-256 |
5a8b868e9b063da6b3cf427ea71acfe5dfb6fd1c140e5d8697d70fcae3787f3d
|
File details
Details for the file associate-0.8.0-py3-none-any.whl.
File metadata
- Download URL: associate-0.8.0-py3-none-any.whl
- Upload date:
- Size: 24.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","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 |
d872a7c84609ea7bc72b3c2b29a59e2ff745a10874011dc11d14d30a54ec0ca0
|
|
| MD5 |
589a9adfe3818b77e1b9c45b06a01f57
|
|
| BLAKE2b-256 |
b0e2638e2c22b26444454bd496dca22e1d80064111e359db29f24e9debd4116f
|