myFleet is a toolkit of agent-fleet machinery: agent skills, charters, and behavior policies from a working multi-agent setup, plus the harness-sync engine that projects them into eleven coding-agent checkouts — Claude, Codex, Gemini, Cursor, Factory droids, OpenCode, Kilo, Kimi, Antigravity, Vix, and ZCode. It is generalized from a production multi-agent workspace, where every piece is in daily use.
The problem it addresses is familiar to anyone running more than one agent harness: the same instructions, skills, and settings get maintained N times in N tools' private formats, and drift quietly. myFleet keeps one canonical copy of each artifact and treats every harness copy as generated. Policies are written as citable rule IDs (- **ID** — proposition) so a skill, charter, or review can reference a rule instead of restating it. Work lands through a review gate, not direct pushes. The content directories are data; the fleet package is the engine that moves the data.
Repository tour
| Path | Contents |
|---|---|
skills/ |
46 agent skills in four families — lifecycle verbs (000–111), build-*, use-*, and craft. See docs/skills.md |
agents/ |
11 agent charters, the shared base commitments, and a MANIFEST navigation snapshot. See docs/agents.md |
policies/ |
29 rule documents plus the permissions.yaml shorthand, all in a stable ID grammar. See docs/policies.md |
settings/ |
Shared configuration fragments, including the canonical MCP registry (mcp.jsonc) |
fleet/ |
The Python package: sync engine, pollers, session analytics, and CLIs |
docs/ |
The documentation hub — docs/index.md |
Quickstart
Python 3.13+ is the only runtime requirement. The engine is checkout-first by design: the sync engine projects this repository's skills/, policies/, and agents/ trees into your harnesses, so it runs from a clone rather than a site-packages install. (A PyPI release of the wheel is planned; the memory and analytics CLIs are the install-independent subset.)
git clone https://gitlab.com/doering-ai/libs/fleet.git && cd fleet
uv sync --all-extras
uv run sync-agents -n # read-only preview of every projection
uv run sync-agents --check # report drift between sources and generated consumers
uv run sync-policies -n # preview the permissions projection
Run the same commands without the uv run prefix once the environment is active. Applying is idempotent: symlinks already pointing at the right target are left alone, hook registrations de-duplicate, and unrelated keys in harness settings survive untouched.
The fleet package
Six console scripts cover the engine's jobs; two background pollers keep shared state fresh.
| CLI | Purpose |
|---|---|
sync-agents |
Project instructions, skills, charters, hooks, and MCP config into the supported harnesses — docs/sync-agents.md |
sync-policies |
Expand policies/permissions.yaml into a harness settings permission list |
agent-memory-index |
Concurrency-safe maintenance of per-agent MEMORY.md indexes — docs/memory.md |
fleet-memory-mcp |
FastMCP stdio server exposing the memory store to stateless agents |
agentlog |
Session-lifecycle analytics across harness surfaces — docs/agentlog.md |
ai-home |
Resolve $AI_HOME (default ~/ai), the agent-owned working-state home |
The pollers are plain scripts meant to run under a systemd user timer: the bulletin poller snapshots and cross-checks the shared agent bulletin (docs/bulletin.md), and the memory poller commits new agent-memory files to the default branch (docs/memory.md).
Design notes
- Data is not code.
skills/,agents/,policies/, andsettings/are plain files a human can read and diff; the package only moves and renders them. Generated consumers are never sources. - Dependency discipline. The ported modules stay stdlib-plus-pydantic by design, so they run inside externally-managed environments. Shared utilities come from my-basis where it clearly helps, and nothing depends on a private package.
- Preview, then idempotent apply. Every projection has a dry-run; applying twice changes nothing.
- Hooks are boring. Hook scripts are pure-stdlib programs that speak JSON over stdio; only the per-harness registration format differs.
- Rules are citable. Policies use stable ID anchors with nested scope, so agents can be pointed at a rule instead of a wall of prose.
Roadmap
agent-worktree— per-agent git worktree isolation with a review-gated merge path. The policies describe the workflow today; the CLI has not been generalized yet.agentviz— interactive dashboards over theagentlogdata.- Tracker sync — reconcile a local task mirror with a hosted tracker; the
use-planeskill documents the working method.
Provenance and sanitization
The contents are generalized from a production multi-agent workspace, and publication means the private provenance stays out. That is enforced, not promised: scripts/check_sanitized.py scans every tracked file in CI for known private patterns — names, hosts, home paths, vault references, ID fragments — and fails the pipeline on any genuine hit. The carve-outs are few and documented in the script: forge URLs in this repository's own namespace, secret-store product documentation in the auth skill, and the engine's own harness identifiers.
Contributing and license
GitLab is the development forge; report issues and propose changes at the GitLab project. Changes pass the same sanitizer and pipeline as everything else.
Licensed under MPL-2.0.
Release files for my-fleet 0.1.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 | |
|---|---|---|---|
| my_fleet-0.1.0.tar.gz | 238.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| my_fleet-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 409.6 kB
Release files / my_fleet-0.1.0.tar.gz
| Download URL | my_fleet-0.1.0.tar.gz |
|---|---|
| Size | 238.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
75943a792e762eda27c454f73d9cb517bceddd45b7fc5db5bfe7b667799bd5e2
|
|
BLAKE2b-256 checksum How to use checksums |
77b5f465131204890614e594818ea54c9b94a6d86b1dd0c19c0576845a61fd33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / my_fleet-0.1.0-py3-none-any.whl
| Download URL | my_fleet-0.1.0-py3-none-any.whl |
|---|---|
| Size | 171.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
92bcc13b9df8d447b048442499443267e8a46070b1d273299d517ae75680cdd5
|
|
BLAKE2b-256 checksum How to use checksums |
5b3dc87cf3482d9474971cb2bee43f22f805b8584bf4409fc5e822cf1c10ace7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|