The memfleet cloud client — connect a terminal to a Strata fleet on memfleet.com without leaving it.
Project description
memfleet
memfleet is the cloud client for a Strata
fleet on memfleet.com. strata is the local memory engine; memfleet is
the remote fleet cloud. A developer connects a terminal to the cloud without
ever leaving it:
pipx install memfleet
cd my-project && memfleet connect # one browser approval, the rest in-terminal
claude # the session binds this project's profile
…and a teammate who only holds an enrollment code reaches the same with:
memfleet connect --code XXXX
A note on the version history
Releases of the
memfleetdistribution at or below 1.6.1 were the Strata engine — that package has been renamed and now ships asstrata-mem(import package and CLI stillstrata; ADR 0009).memfleet2.0.0 is the first release of the cloud client described here. The major-version jump is deliberate: the repurposed package's "latest" must never resolve to an old engine release.
Install
pipx install memfleet # once strata-mem + memfleet are on PyPI
Release order (strata-mem is not on PyPI yet): the engine publishes
strata-mem 1.6.2 first (it carries the #113 judge-parse fix and exposes
strata.install), then this client publishes memfleet 2.0.0, which
depends on it. Until strata-mem is on PyPI, install the engine from source or
git first:
pip install "strata-mem @ git+https://github.com/oren198/Strata.git"
pip install -e client/ # from a strata-web checkout
Commands
| Command | What it does |
|---|---|
memfleet login / logout |
Device-flow login; the owner token goes to the OS keychain. |
memfleet connect |
Guided: log in → pick/create a workspace → pick/define a scope → create an agent → save the agent profile → wire the project up → verify. |
memfleet connect --code XXXX |
Enrollment-code path — no owner login (delegation plane). |
memfleet workspaces list | create |
Manage workspaces over /api/v1/manage/*. |
memfleet scopes list | create |
List / define scopes (validated engine-side). |
memfleet agents list | create | revoke |
Manage Registered Agents. |
memfleet codes list | create | revoke |
Manage enrollment codes. |
memfleet profiles list | use |
List agent profiles; use writes the project default. |
memfleet setup |
(Re)write the additive project setup on its own. |
The binding model
Three credential planes, never crossed (ADR 0009 D4):
- the owner token (
sot_…) — device-flow issued, manages the fleet; - the agent key (
sak_…) — what a session presents; one agent ⇄ one(scope, skill)binding, fixed at registration; - the enrollment code (
sge_…) — delegation to non-owners.
Sessions bind, not machines. Locally there are only named agent
profiles (<workspace>/<agent>); the binding lives server-side. One machine
may hold many profiles and each concurrent session resolves its own.
Secrets never touch disk
Secrets live only in the OS keychain (via keyring) or the environment —
the client never writes an owner token or an agent key to a file:
- the owner token is keyed by server URL;
- each agent key is keyed by its profile name.
Where no keychain backend exists (headless, CI, containers), secrets come from the environment instead:
MEMFLEET_AGENT_KEY— the agent key for the active profile (the same name the written MCP config resolves at session start);MEMFLEET_OWNER_TOKEN— an owner token for the management plane.
In that mode a write cannot persist without putting a secret on disk, which the client refuses to do; it prints the env var to set instead.
What connect writes (additive, idempotent, secret-free)
Setup is strictly additive and reuses the engine's install machinery
(strata.install, ADR 0009 D3) — an existing entry is never overwritten. Run
with --diff to preview without writing; a second run is a no-op.
-
an MCP config entry for the hosted
/mcpendpoint, keyedmemfleet(distinct from the local engine'sstrataentry, so a project may run both). It is secret-free: the agent key is resolved at session start from the profile env (MEMFLEET_AGENT_KEY) —{ "mcpServers": { "memfleet": { "type": "http", "url": "https://memfleet.com/mcp", "headers": { "Authorization": "Bearer ${MEMFLEET_AGENT_KEY}" } } } }
-
the
memfleet-contributionskill into.claude/skills/.
The MCP entry is written to .mcp.json at the project root (the file where Claude Code expands ${VAR} in HTTP headers); it is secret-free and safe to commit. --project governs the repo-committable framing of future artifacts
(commit it); the default writes the machine-local .claude/settings.local.json.
Both are secret-free — a committed config with no profile present simply fails
to authenticate the MCP server, and the session degrades silently.
The contribution Stop-hook + evaluator script (Strata#112) does not exist yet; this client writes no hook block. There is a marked extension point for it in
memfleet/setup.py(TODO(strata#112)).
Configuration precedence
- server —
--serverflag →MEMFLEET_SERVERenv → project.memfleet/config.tomlserver→ defaulthttps://memfleet.com. No URL appears in the normal path;--serveris for test / self-hosted only. - agent profile —
MEMFLEET_PROFILEenv → project.memfleet/config.tomldefault_profile. The env override lets concurrent same-repo sessions each resolve their own profile.
.memfleet/config.toml holds only non-secret project state (a server URL and a
default profile name). It is .memfleet/, not .strata/, so a project may run
a local strata engine and the cloud side by side.
Project details
Release history Release notifications | RSS feed
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 memfleet-2.0.2.tar.gz.
File metadata
- Download URL: memfleet-2.0.2.tar.gz
- Upload date:
- Size: 31.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a358159615b538c1af6890a29fd0e84c972e7a28b1bfe8836aeacdd176dd4a5
|
|
| MD5 |
c37c2187ca406bcf21a4b4bcff64c5d5
|
|
| BLAKE2b-256 |
80825c5ea573d949ae6e406ad0e2acfdd872ac307c19e4d3a229c4ec70bf7df1
|
Provenance
The following attestation bundles were made for memfleet-2.0.2.tar.gz:
Publisher:
publish-client.yml on oren198/strata-web
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
memfleet-2.0.2.tar.gz -
Subject digest:
4a358159615b538c1af6890a29fd0e84c972e7a28b1bfe8836aeacdd176dd4a5 - Sigstore transparency entry: 2202717757
- Sigstore integration time:
-
Permalink:
oren198/strata-web@2451e31e4ef2b3f0c1b7e7d5d81fcbdab9e583de -
Branch / Tag:
refs/heads/main - Owner: https://github.com/oren198
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-client.yml@2451e31e4ef2b3f0c1b7e7d5d81fcbdab9e583de -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file memfleet-2.0.2-py3-none-any.whl.
File metadata
- Download URL: memfleet-2.0.2-py3-none-any.whl
- Upload date:
- Size: 28.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b443e8c33ec22ae62656e71c30cc97735f2532737dee81fe12227d0600921fae
|
|
| MD5 |
464d11784177895693d9d7a2a47476f9
|
|
| BLAKE2b-256 |
34044f8a8244c5827804f80daad8e4b13c12d7246219afaa42e5cf3495f11b29
|
Provenance
The following attestation bundles were made for memfleet-2.0.2-py3-none-any.whl:
Publisher:
publish-client.yml on oren198/strata-web
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
memfleet-2.0.2-py3-none-any.whl -
Subject digest:
b443e8c33ec22ae62656e71c30cc97735f2532737dee81fe12227d0600921fae - Sigstore transparency entry: 2202717805
- Sigstore integration time:
-
Permalink:
oren198/strata-web@2451e31e4ef2b3f0c1b7e7d5d81fcbdab9e583de -
Branch / Tag:
refs/heads/main - Owner: https://github.com/oren198
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-client.yml@2451e31e4ef2b3f0c1b7e7d5d81fcbdab9e583de -
Trigger Event:
workflow_dispatch
-
Statement type: