agent2you
Deploy a team of chat-resident AI agents from declarative manifests: each agent is one container holding Hermes (the employee), litellm (the failover chain), acp2api (an OpenAI endpoint over ACP) and the subscription coding CLIs (Claude Code, Codex, opencode, cline) that are its brain and hands.
The design was extracted from a production fleet that runs infrastructure, product and PM agents as colleagues in Mattermost channels. Every decision in this pack — one container per agent, no provider API keys, chat as the only inter-agent surface, generated-not-hand-written configs — was measured there first.
What an agent is
chat platform (Mattermost / Telegram / Slack / ...)
│ @mention
┌────┴─────────────────────────────────────────┐
│ hermes presence, sessions, memory, cron │
│ litellm failover: next brain on 429 │ one
│ acp2api OpenAI API ⇄ ACP, per-thread │ container
│ session continuity │ per agent
│ claude / codex / opencode / cline │
│ each spends its own SUBSCRIPTION │
└───────────────────────────────────────────────┘
No provider API key exists anywhere in a default deployment: the CLIs log in to their own subscriptions, which is the legal basis of the arrangement — and the reason nothing here can quietly bill an API account.
Nothing is shared between agents except memory (optional, bank-per-agent) and the chat workspace. Two agents cannot interfere with each other by construction.
Quickstart
uv tool install agent2you # or: pipx install agent2you
a2y init myfleet && cd myfleet # a self-contained fleet workspace
$EDITOR fleet.yaml agents/ana/ # who exists, what platform, what memory
a2y render # manifests -> deploy/ (commit it)
a2y build # the agent image, pinned end to end
cp deploy/example.env deploy/.env # secrets; a2y doctor checks parity
$EDITOR deploy/.env
a2y provision # prints the messenger account sequence
a2y up
a2y auth ana # sign the brains in (once; survives rebuilds)
a2y doctor # end-to-end checks
Adding a colleague later is one command:
a2y agent add cqrtai-pm \
--description "Project manager for cqrtai: specs, tasks, sequencing." \
--github-token --projects cqrtai
It validates against the whole fleet (rolling back on failure), re-renders
deploy/, and prints the numbered checklist of what remains (secrets,
provisioning, sign-in). The command is deliberately non-interactive so that
your own assistant agent can run it: the interview happens in chat, the
tool call is the answer — see docs/hiring.md. Running agents
discover the newcomer without a restart: the fleet roster in every SOUL.md
regenerates on a loop from the mounted manifests.
The manifests
fleet.yaml — deployment-level facts: platform (mattermost fully wired;
other Hermes platforms pass their env through), memory (hindsight or none),
network (bridge by default; shared VPN namespace as an advanced mode),
observability (Phoenix traces, Prometheus token metrics), image tag, and
defaults merged into every agent.
agents/<name>/agent.yaml — the agent: description (its card, roster entry and
the reason colleagues call it), brain chain and executors, access (ssh volume,
GitHub token), memory banks, extra MCP servers (mcp: — per agent, appended to
the defaults the platform/memory/observability choices imply), and toolkits:.
toolkits/<name>/ — a tool and its instructions as one unit: toolkit.yaml
(pinned apt/npm/uv_tools/env install, plus a verbatim dockerfile: escape
hatch) and USAGE.md, which lands in the SOUL.md of every agent carrying the
toolkit. Fleet-level toolkits bake into the fleet image; agent-level ones get a
derived image built automatically by a2y build.
agents/<name>/SOUL.md — the persona. SOUL-shared.md is appended to everyone.
a2y render turns those into deploy/: per-agent Hermes / litellm / acp2api /
hindsight configs, a compose file, and an example.env naming every variable
the deployment needs. The output is deterministic — same manifests, same bytes —
so the deploy tree is reviewable and belongs in git. Anything the generator
does not expose: agents/<name>/overrides/<file> replaces the generated file,
and hermes:/acp2api: keys in agent.yaml deep-merge into those configs.
What the pack takes care of
- Session continuity per chat thread — the
conversation-keyplugin + litellm header forwarding + acp2api's conversation keying, so a thread keeps one coding-agent session instead of cold-starting per message. - A visible working turn — progress narration into the chat post while the
agent works, the trace tucked behind the post's info card when it finishes,
and mid-turn steering (
/steer) delivered INTO the running turn. - Fleet discovery without restarts — a roster generated from every agent's own manifest, appended to each SOUL.md on a loop.
- Routing without a classifier — untagged messages claimed by exactly one agent from Mattermost facts alone; agent-to-agent messages always need an explicit @mention, which is the loop guard.
- Memory in tiers (optional) — a private Hindsight bank per agent written automatically, shared project banks written deliberately through tools, and bank missions pushed from the repository at every start.
- Cost visibility — acp2api's Prometheus metrics (tokens per agent, per executor, per account) and one Phoenix trace project per agent.
- The traps already sprung — device-code-only logins,
CLAUDE_CONFIG_DIR, codex's sandbox mode, cline's self-update, the CA store, the tty-guarded bashrc, healthchecks that mean something. They are encoded, not documented.
Docs
- docs/architecture.md — the stack and every decision in it
- docs/provisioning.md — accounts, tokens, sign-ins, keys
- docs/hiring.md — the interview an assistant agent runs to add a colleague
- docs/extending.md — custom tools, platforms, derived images
Development and releasing
uv run --group dev pytest # the contract: render determinism, validation, env parity
uv build # sdist + wheel (the vendored image ships as package data)
Releases publish to PyPI via trusted publishing (OIDC — no API token exists
anywhere): bump version in pyproject.toml, commit, git tag v<version>,
git push --tags. The workflow gates on the test suite and on the tag matching
the version. GitHub Actions are pinned by commit SHA, not by tag — a tag can be
moved onto a poisoned release; a sha cannot.
Status
Extracted from a running deployment; the mattermost + hindsight + claude/codex path is the proven one. Telegram/Slack/Discord pass through to Hermes' own adapters and are not yet exercised end to end by the maintainers.
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 agent2you-1.1.0.tar.gz.
File metadata
- Download URL: agent2you-1.1.0.tar.gz
- Upload date:
- Size: 84.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a0b2edbc4cd6e6ee629b682d19ce9c2384b21cf0cf13b20359b422c1494640f6
|
|
| MD5 |
2028e42c1001dcd0afe74b5a1e48ba0d
|
|
| BLAKE2b-256 |
3d49ae2f2f4dcb0d56d4633735bce10b0e6fd27f333b9e6816049d52560e1d81
|
Provenance
The following attestation bundles were made for agent2you-1.1.0.tar.gz:
Publisher:
release.yml on neprel/agent2you
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent2you-1.1.0.tar.gz -
Subject digest:
a0b2edbc4cd6e6ee629b682d19ce9c2384b21cf0cf13b20359b422c1494640f6 - Sigstore transparency entry: 2517852426
- Sigstore integration time:
-
Permalink:
neprel/agent2you@f1448c7cff8143e47d0f66a245334c41abf5dc65 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/neprel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f1448c7cff8143e47d0f66a245334c41abf5dc65 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agent2you-1.1.0-py3-none-any.whl.
File metadata
- Download URL: agent2you-1.1.0-py3-none-any.whl
- Upload date:
- Size: 93.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62a7aa487dda10fa559576d91ba662dd922b21c54aeb9827eebe0a647dd71fbd
|
|
| MD5 |
e6e91b525512c9dcf0b98689227cc4fc
|
|
| BLAKE2b-256 |
e99e38cdc91e7be3dd90ca9ec804d709da76111b04ab103743a000c1a23fee28
|
Provenance
The following attestation bundles were made for agent2you-1.1.0-py3-none-any.whl:
Publisher:
release.yml on neprel/agent2you
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agent2you-1.1.0-py3-none-any.whl -
Subject digest:
62a7aa487dda10fa559576d91ba662dd922b21c54aeb9827eebe0a647dd71fbd - Sigstore transparency entry: 2517852565
- Sigstore integration time:
-
Permalink:
neprel/agent2you@f1448c7cff8143e47d0f66a245334c41abf5dc65 -
Branch / Tag:
refs/tags/v1.1.0 - Owner: https://github.com/neprel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@f1448c7cff8143e47d0f66a245334c41abf5dc65 -
Trigger Event:
push
-
Statement type: