abstract-claude
Fresh Claude Code session manager: a settings-only template, durable OAuth,
automatic quota fallback, and a web console — packaged as one pip-installable CLI.
Part of the hugpy orbit
┌──────────────────────────── hugpy (fleet) ───────────────────────────┐
│ central + workers: platform · engine · fleet · server · media · … │
│ OpenAI-compatible /v1 — every local model, incl. B (Qwen3-Coder-Next) │
└───────▲───────────────────────▲──────────────────────────▲───────────┘
│ inference │ inference │ B reductions
┌────────────────────────┴──┐ ┌────────────────┴──────────┐ ┌───────────┴───────────────┐
│ hugpy-station │ │ hugpy-agent │ │ abstract-toolserver │
│ desktop + headless console│──▶│ agent runtime · TUI · │◀─▶│ comms · ledgers · boards ·│
│ tmux seats per locus │ │ OpenCode/qwen seats │ │ exchanges · MCP · b_ask │
└────────────┬──────────────┘ └────────────┬──────────────┘ └───────────▲───────────────┘
│ keeper/codex seats │ --serve │ tools (MCP/HTTP)
┌────────────▼──────────────┐ ┌────────────▼──────────────┐ │
│ abstract-gpt (Codex seat) │ │ abstract-claude serve ────┼───────────────┘
│ abstract-claude (Claude) │ │ └ abstract-serve-core │
└───────────────────────────┘ └───────────────────────────┘
everything ships through abstract-pypit → PyPI (+ GitHub)
| Package | Role | PyPI |
|---|---|---|
| hugpy (14 lockstep dists) | the self-hosted LLM fleet: central, workers, engine, media, server | hugpy |
| hugpy-station | Electron desktop + headless backend; tmux seats, prompt composer, loop/bug scan | deb via central install links |
| hugpy-agent | agent runtime on the fleet; hugpy-agent tui, the provider-neutral terminal client over the shared Serve API (abstract-claude / abstract-gpt / hugpy-agent serve) |
hugpy-agent |
| abstract-claude | Claude Code launch/session/rollover + abstract-claude serve (roles keeper/chat/worker/local) |
abstract-claude |
| abstract-serve-core | the HTTP routes abstract-claude serve actually runs (queue, relay, rollover sweeps) |
abstract-serve-core |
| abstract-gpt | Codex/ChatGPT seat counterpart of abstract-claude | abstract-gpt |
| abstract-toolserver | one tool service per host: comms, ledgers, boards, exchanges, MCP bridge, B on call | abstract-toolserver |
| abstract-pypit | one-command publisher: bump → build → PyPI → GitHub push | abstract-pypit |
Install
pip install abstract-claude # from your index
# or from the private index:
pip install -i https://<index>/api/pypi/simple/ abstract-claude
Quickstart
abstract-claude init # materialize AC_ROOT (config + template)
abstract-claude serve # web console (default http://127.0.0.1:9111)
sudo abstract-claude install-service # install + enable the systemd unit
Commands
| Command | What it does |
|---|---|
serve [--host --port] |
Run the web console (Model+fallback, OAuth, Template+reset, Session settings). |
init |
Create AC_ROOT with config.json + template/ from shipped defaults. |
save-template |
Capture current ~/.claude/settings.json + minimal flags as the template. |
restore |
Create a fresh ~/.claude (settings + flags) if it doesn't exist. |
reset [-y] |
Wipe ALL Claude state (transcripts/history/creds) → reseed template → clean session. |
oauth-status / oauth-set <token> |
Show / store the durable 1-year claude-auth token. |
launch -- <claude args> |
Delete ~/.claude, rebuild it from the template + login, run Claude Code (no memory of earlier sessions), auto-switching to the fallback model when the default is over quota. |
sessions [--prune KEEP] |
List per-launch session dirs (LIVE/done); --prune removes the oldest finished ones beyond KEEP. |
mct [ws] [--model ID] [--plain] |
Pointer-exchange REPL for the frontier seat: a Claude-Code-style input box pinned to the bottom of the terminal (output scrolls above, status bar below), multi-line input as one prompt (Enter sends; \+Enter, Alt+Enter, Ctrl-J or Shift+Enter add a line; pasted blocks stay one prompt); --plain = readline line loop. Also deletes ~/.claude and starts a NEW claude session on every launch (drops the persisted session.json id) — same fresh_session_mode / AC_FRESH=0 knobs as launch. |
mcp |
stdio MCP bridge: exposes an abstract_toolserver instance to Claude Code as native tools (TOOLSERVER_URL, default https://toolserver.hugpy.ai). |
install-service [--user] |
Write + enable 9111_abstract_claude_web.service (needs sudo). |
Tool-aware sessions (MCP)
abstract-claude mcp discovers a toolserver's /endpoints and serves them to Claude
Code over stdio MCP — so the .claude session can call the whole abstract_* tool
surface (and /claude/*) through one authed entry point. The template registers it
automatically; to add it to an existing install:
claude mcp add -s user toolserver -e TOOLSERVER_URL=https://toolserver.hugpy.ai -- abstract-claude mcp
How it works
- Template = config only.
template/settings.json+ a minimal~/.claude.json(onboarding/trust flags). No credentials, history, or transcripts — a reset gives a genuinely clean session, not a restored snapshot. - OAuth is not templated. Login rides on the durable 1-year
CLAUDE_CODE_OAUTH_TOKEN(managed byclaude-auth), so a fresh session auto-authenticates — no/login. - Quota fallback is the wrapper. Claude Code's
fallbackModelonly fires on overload, never on quota;autoContinueAtUsageLimitdoesn't exist before v2.1.234.abstract-claude launchhandles the real case: default Fable maxed → run on Opus 4.8. - Fresh
.claudeper launch — no memory. EverylaunchDELETES~/.claudeand~/.claude.jsonand rebuilds them with only the template settings (or the embedder'sAC_SETTINGS_JSON), fresh onboarding/trust flags + MCP servers, and the login (freshest credentials +oauthAccount/userIDidentity). Transcripts, history, todos, project trust and caches from earlier sessions are gone; the launch cwd is trusted.config.jsonfresh_session_mode:wipe(default),dir(keep~/.claude, use a new~/.claude-sessions/<stamp>-<pid>viaCLAUDE_CONFIG_DIR;sessions [--prune]lists), oroff.AC_FRESH=0or a pre-setCLAUDE_CONFIG_DIRskips it for one launch. An explicit--modelin the pass-through args is honored as-is (no launcher model, no quota preflight).abstract-claude mctdoes the same at REPL start and additionally forgets the persistedsession.jsonid, so A opens a brand-new claude session each launch. - Claude-Code-style input for
mct. The prompt box stays at the bottom of the terminal (prompt_toolkit); A's activity and the rendered turn scroll above it and a status bar under it shows spinner · turn · elapsed · pending queries. Multi-line input is one prompt: Enter sends,\+Enter / Alt+Enter / Ctrl-J / Shift+Enter add a line, bracketed paste keeps newlines, first Ctrl-C clears the box.--plain, no TTY, or a missingprompt_toolkitfall back to the readline line loop. Wire it up with:alias claude='abstract-claude launch --dangerously-skip-permissions'
- A's system prompt is recorded.
mctruns A with--system-prompt-snapshot on, so Claude Code writes the FULL system prompt (built-in text + memory + this seat's appended directive) as aprompt_snapshotrecord in the session transcript (~/.claude/projects/<cwd-slug>/<session>.jsonl). Watch every session on the host live withsysprompt-watch(--oncefor the current state,--full,--diff). Claude Code reuses the recorded prompt on--resume, so an editedoperator-guidance.mdapplies at the next/new/ relaunch (the REPL says so).AC_SYSPROMPT_SNAPSHOT=0turns the recording off.
Config
AC_ROOT (default /srv/abstract_claude) holds config.json:
{ "listen_host": "127.0.0.1", "listen_port": 9111,
"default_model": "claude-opus-4-8", "quota_fallback_model": "claude-opus-4-8",
"preflight_quota_check": true }
Override the data root with AC_ROOT=/path abstract-claude ....
Serve, roles and launch (0.1.68 – 0.1.96)
abstract-claude serveruns abstract-serve-core's routes; the routes inabstract_claude/server.pyare not used at serve runtime. See the serve-core README for roles, relay, queue and interrupt behaviour.- Launch contract: session-first launch, managed rollover (handoff →
/clear→ resume through the toolserver ledger), TUI harness, and a reuse gate before an existing session is attached. - Also here: seat-report sidecar,
rollover.py/terminal_rollover.py, keepalive,mct_repl(pointer exchange),models.py/pricing.py,usage_db,exchange_hook. - The
abstract_claude.toolsetmodule adds the/claude/*category (claude_oauth_*,claude_state,claude_set_model, …) to abstract-toolserver when both are installed.
Attention-worthy
- Versions are bumped by abstract-pypit on publish; don't hand-edit them.
- Same-version republish needs
pip install --force-reinstall.
Fleet terminal compatibility release — 2026-10-22
Updates the shared runtime dependency floor for the fleet terminal release. Provider entry points and existing CLI/module layouts are retained; no unpublished source-layout migration is included.
The source distribution includes debian/build.sh OUTPUT_DIR for a standalone offline Debian CLI package. Installation creates only the provider-owned venv and CLI launcher; it does not start a service or copy credentials.
Metadata
Release files for abstract-claude 0.1.111
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| abstract_claude-0.1.111.tar.gz | 86.2 kB | Without provenance | Details for abstract_claude-0.1.111.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| abstract_claude-0.1.111-py3-none-any.whl | Python 3 | none | any | Details for abstract_claude-0.1.111-py3-none-any.whl |
Total release size: 146.2 kB
Release files / abstract_claude-0.1.111.tar.gz
| Download URL | abstract_claude-0.1.111.tar.gz |
|---|---|
| Size | 86.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e33c4e2e5a31bccf5b3f1ebe4ce886224af2d466c006d39d8501dbe9dc3361ed
|
|
BLAKE2b-256 checksum How to use checksums |
849072ce87c28b069bdd5533b9e68f2a30e8990294e0e19a63d33c9218a17d45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Release files / abstract_claude-0.1.111-py3-none-any.whl
| Download URL | abstract_claude-0.1.111-py3-none-any.whl |
|---|---|
| Size | 59.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
06d5cc3df5ff2801783f7bde1e45e873a726db25b18ff97c4de79da352f59ed5
|
|
BLAKE2b-256 checksum How to use checksums |
c65c132290ee69d099cb8af6631771a4f97a633de61e67faf91d51ed706b77ea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.3
|
Security for abstract-claude 0.1.111
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.