EdgeCitadel
EdgeCitadel connects AI Agents across a Core and enrolled Edge hosts. It runs complete Agents from packages such as Gemma and Home Assistant adapters, and connects active Pi, Claude Code, and Codex sessions through their native plugin systems.
Install
Install uv if it is not already available, then install EdgeCitadel as an isolated CLI tool:
uv tool install edgecitadel
On macOS, Homebrew is also supported through the EdgeCitadel tap:
brew tap EdgeCitadelTeam/edgecitadel
brew trust --tap EdgeCitadelTeam/edgecitadel
brew install edgecitadel
Homebrew 6 requires the trust step before loading formulas from a non-official tap.
uv tool install avoids modifying an operating-system-managed Python
environment. See the Python distribution guide for a
manual virtual-environment fallback.
Then run the guided, idempotent installer from the project where host-local Plugins should be configured:
edgecitadel install
The terminal guide first asks whether this host should join an existing Core or create a new one. It then collects the reachable Core address or invitation, explains the Edge messaging choices, detects available native agent hosts, and shows the exact Plugin installation plan before asking for confirmation.
For automation, make every choice explicit, for example
edgecitadel install --create --host core.example.internal --plugin codex --scope user --yes
on a Core.
Create a Core
For normal setup, run edgecitadel install and choose create. The guide asks
for the hostname or IP that Edge hosts can reach; no separate edgecitadel create command is required.
For unattended setup, start Docker and provide every choice as flags:
edgecitadel install --create --host core.example.internal --plugin codex --scope user --yes
edgecitadel doctor
The unified command creates the Core, starts its services, installs the selected Plugin, checks local requirements, and prints the dashboard URL.
Join an Edge
Create a one-time invitation on the Core:
edgecitadel invite --node-id studio-macmini --host core.example.internal
Copy the returned invitation URI to the Edge. The default single-client mode
connects the EdgeCitadel service directly to Core NATS:
edgecitadel install --join 'ecjoin://...' --plugin codex --scope user --yes
Use nats_leaf when Agents on this host must keep communicating while the Core
connection is unavailable:
edgecitadel install --join 'ecjoin://...' --messaging-mode nats_leaf --plugin codex --scope user --yes
The unified commands enroll the Edge, start its EdgeCitadel services and any
mode-specific NATS process, and install the selected native-host Plugin. Use the
lower-level edgecitadel join command only when those remaining steps will be
managed separately.
In both modes, Agent integrations talk to the host-local EdgeCitadel service.
Only nats_leaf needs a local NATS server; it is the durable local message bus
and maintains the outbound Leaf connection to Core. If nats-server is not
already on PATH, EdgeCitadel downloads its pinned, SHA-256-verified NATS
release into ~/.edgecitadel/runtime/nats-server. A custom executable can be
selected with EDGECITADEL_NATS_SERVER.
Install an Agent Package
Agent Packages contain complete runtimes operated by EdgeCitadel. An installed runtime may declare one or more Agent identities:
edgecitadel agent install gemma
edgecitadel agent list
edgecitadel agent status edgecitadel.gemma
Home Assistant is installed the same way after its URL, token, and allowlist are configured. EdgeCitadel operates the adapter and never installs or removes Home Assistant itself. See the Gemma guide and Home Assistant guide.
Connect an existing Agent
Plugins add Agent discovery, delegation, inbox, task-state, trace, and diagnostic tools to an active host session. They do not start the host in the background, and EdgeCitadel does not pass NATS credentials through the plugin protocol.
edgecitadel plugin install codex
edgecitadel plugin install claude-code --scope project
edgecitadel plugin install pi --scope user
edgecitadel plugin list
Each command delegates to the host's native package manager and reports package
installation separately from activation. Start a new host session, then use its
edgecitadel_* tools. Inspect active sessions with edgecitadel connector list
and edgecitadel connector status <connector-id>. The unified installer repairs
a selected Plugin whose distribution path moved; use
edgecitadel plugin repair <host> to perform that repair explicitly.
Operate
edgecitadel status
edgecitadel doctor
edgecitadel service status
edgecitadel task list --connector-id <connector-id>
edgecitadel trace list --connector-id <connector-id>
Stop a Core without deleting its data with edgecitadel down.
Upgrade or uninstall
Use the package manager that installed EdgeCitadel:
uv tool upgrade edgecitadel
uv tool uninstall edgecitadel
brew upgrade edgecitadel
brew uninstall edgecitadel
Before uninstalling an Edge, run edgecitadel service stop; in nats_leaf
mode also run edgecitadel messaging stop. Uninstall preserves local state in
~/.edgecitadel.
More detail: onboarding and troubleshooting and contributing.
License
MIT
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 edgecitadel-0.3.0.tar.gz.
File metadata
- Download URL: edgecitadel-0.3.0.tar.gz
- Upload date:
- Size: 230.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8b3fbc88dbd22730b0b95dc01d193b8c351f2f0d237a4bfc5aef6ea7cecbe0c
|
|
| MD5 |
783dbaea97f15c3db0003df98755587e
|
|
| BLAKE2b-256 |
a6ea690855c01bb73ec496589c57b93aa566236337e04f755dfbdb47c1109bfc
|
Provenance
The following attestation bundles were made for edgecitadel-0.3.0.tar.gz:
Publisher:
publish-pypi.yml on EdgeCitadelTeam/EdgeCitadel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgecitadel-0.3.0.tar.gz -
Subject digest:
b8b3fbc88dbd22730b0b95dc01d193b8c351f2f0d237a4bfc5aef6ea7cecbe0c - Sigstore transparency entry: 2732094609
- Sigstore integration time:
-
Permalink:
EdgeCitadelTeam/EdgeCitadel@a7db689a5a3915ce455a0ea26199b098a20c0873 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/EdgeCitadelTeam
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@a7db689a5a3915ce455a0ea26199b098a20c0873 -
Trigger Event:
release
-
Statement type:
File details
Details for the file edgecitadel-0.3.0-py3-none-any.whl.
File metadata
- Download URL: edgecitadel-0.3.0-py3-none-any.whl
- Upload date:
- Size: 324.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f961fc73b87fe18104c67f415966e272abe4d0ff17b4883df358c59b783b414c
|
|
| MD5 |
4839b4a49740108307f644293d33468c
|
|
| BLAKE2b-256 |
fd20d0d4e6a6631af3a399fe84526ae5157f97cd95d8502d2674d2458a50c993
|
Provenance
The following attestation bundles were made for edgecitadel-0.3.0-py3-none-any.whl:
Publisher:
publish-pypi.yml on EdgeCitadelTeam/EdgeCitadel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
edgecitadel-0.3.0-py3-none-any.whl -
Subject digest:
f961fc73b87fe18104c67f415966e272abe4d0ff17b4883df358c59b783b414c - Sigstore transparency entry: 2732095563
- Sigstore integration time:
-
Permalink:
EdgeCitadelTeam/EdgeCitadel@a7db689a5a3915ce455a0ea26199b098a20c0873 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/EdgeCitadelTeam
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@a7db689a5a3915ce455a0ea26199b098a20c0873 -
Trigger Event:
release
-
Statement type: