dejima — Python client
Thin Python client for the Dejima API: run a fleet of AI coding agents on hardware you own.
Alpha (0.x). The API is stable in shape (
v1/-prefixed) but fields may change until1.0. This client is hand-written over the REST surface and mirrorsopenapi.yaml; the only non-generated piece is the PTYSessionhelper.
Install
pip install dejima-sdk # REST client
pip install 'dejima[ws]' # + WebSocket PTY attach()
Quickstart
from dejima import Client
# host/token from $DEJIMA_HOST and $DEJIMA_TOKEN, or pass explicitly:
dj = Client(host="100.84.12.7:7273")
isl = dj.create_island(repo="git@github.com:you/foo.git", agent="claude-code")
print(isl["name"], isl["state"])
# add a second agent on its own worktree
dj.add_agent(isl["name"], type="codex")
# one-shot command
out = dj.exec(isl["name"], ["git", "status", "--short"])
print(out["stdout"], "exit", out["exit_code"])
# fleet view
for i in dj.list_islands():
print(i["name"], i["state"], len(i.get("agents", [])), "agents")
print(dj.overview()) # daemon health, VM memory, rollup
Interactive sessions
attach() opens the multi-attach PTY stream (needs the ws extra). The daemon
speaks a small JSON-envelope protocol over the WebSocket — Session hides that,
so you deal in raw bytes:
with dj.attach(isl["name"]) as s: # or agent="p2"
s.resize(40, 120)
s.send(b"ls -la\n")
print(s.recv()) # bytes of PTY output, or None when closed
dj.attach_terminal("t1") does the same for an operator host terminal.
API coverage
The client covers the full v1 surface:
- Islands — list/create/get/update/delete, hibernate/wake/reset/upgrade, clone, resources, workspace-ready, events.
- Agents — list/add/get/update/remove, configure (provider/model).
- Exec & files — exec, file read/write, logs.
- Port broker — scopes (list/grant/revoke), intake/export/write.
- Capability broker — grants (list/grant/revoke), execute.
- MCP broker — grants (list/grant/revoke),
mcp_call. - Credentials — Claude push/status, GitHub identities + repos, LLM providers.
- Operator tokens — create/list/revoke (owner-only; role + island scope).
- Events — webhook subscribe/list/unsubscribe.
- Activity — team activity feed (
activity, filterable). - Daemon — overview, agent-types, healthz, audit (filters + jsonl/csv export), clients, sessions-revoke, panic, admin-update, image-build, SSH account keys.
- Host terminals — list/create/delete/relabel +
attach_terminal. - Sessions —
attach/attach_terminal(PTY) andsession_url.
Every non-2xx response raises dejima.DejimaError (.status, .message).
Auth
- Operator (unix socket / tailnet) needs no token.
- Autonomy path (an agent driving its own/child islands) uses a per-island
bearer token — set
DEJIMA_TOKENor passtoken=.
Development
pip install -e '.[dev]'
pytest
Tests run against a stdlib http.server stub — no running daemon required.
Metadata
Release files for dejima-sdk 0.8.79
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dejima_sdk-0.8.79.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dejima_sdk-0.8.79-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 27.7 kB
Release files / dejima_sdk-0.8.79.tar.gz
| Download URL | dejima_sdk-0.8.79.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8938ac4ecceb47b24c1c3c23fbd359d373b8ec129364ca5f6c4c6ea09b4c9e54
|
|
BLAKE2b-256 checksum How to use checksums |
2577cb2571348470383f1109897f0281cea3a59893d007bce76fa72fa38611b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|
Release files / dejima_sdk-0.8.79-py3-none-any.whl
| Download URL | dejima_sdk-0.8.79-py3-none-any.whl |
|---|---|
| Size | 12.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
666b5446b8ea77e2d7ec5265884f6ecd32aa1647c87171e5398c219c9d4d8d3a
|
|
BLAKE2b-256 checksum How to use checksums |
1d9988921babab009f10cdd98ac5c43f43d39617809ed9e504747f891bb87975
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.14
|