Observed since 20 Oct, 17:40 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
AbstractGateway: deployable Run Gateway host for AbstractRuntime (commands + ledger).
AbstractGateway is a deployable Run Gateway host for AbstractRuntime runs, and the control plane of an AbstractFramework installation:
/console), a terminal console, the CLI or a desktop tray icon.Clients (AbstractFlow, AbstractCode, AbstractObserver, AbstractContinuum, AbstractEntity, AbstractAssistant, scripts) talk to the gateway over HTTP, so none of them depends on the others.
Start here: docs/first-run.md on your own machine, or docs/getting-started.md for an explicit setup.
AbstractGateway is part of the AbstractFramework ecosystem:
pyproject.toml, src/abstractgateway/runner.py)src/abstractgateway/hosts/bundle_host.py)Related repos:
pip install abstractgateway
abstractgateway serve
On a first run with nothing configured, serve binds 127.0.0.1:8080, turns
on user auth, creates the admin user, and prints a one-time link
(http://127.0.0.1:8080/console#claim=...). Open it in a browser on the same
machine: you are signed in as the admin and a short first-run guide helps you
pick a local engine, a default model and the browser apps. A new link:
abstractgateway claim --open. Start the gateway at login:
abstractgateway service install. See docs/first-run.md.
The console's Providers page (its Local providers cards) and its Models page (and the matching commands) install a local engine, download a model that fits this machine and delete a download you no longer need, without a terminal. They are AbstractCore's model browser and engine installer, shown inside the gateway:
abstractgateway engines status --probe # Ollama, LM Studio, MLX, llama.cpp, ...
abstractgateway engines install ollama --dry-run # the exact command, nothing runs
abstractgateway models catalog --fits # models that fit this machine
abstractgateway models download ollama qwen3:8b
abstractgateway models list # installed models with sizes
The commands talk to the running gateway (admin rules and audit log apply);
add --local to run them in-process instead. Engine installs run on the
gateway host and are on by default for a loopback gateway, and for someone at
the gateway machine whatever it listens on
(allow_engine_install). See
docs/engines.md, docs/model-downloads.md
and docs/console.md.
Admins can turn on the OpenAI API on the console's OpenAI API page: any OpenAI SDK or app then uses this gateway's models at http://<gateway>/v1, with a named API key per app, made on that page (valid at /v1 only, revocable one at a time).
abstractgateway apps install observer --launch # Flow, Code, Observer, Continuum, Entity, Note, Assistant
abstractgateway apps open observer # a one-time signed-in link
abstractgateway network set lan # let your local network reach the gateway
abstractgateway network restart # apply it now
abstractgateway console # the terminal console, signed in
abstractgateway update --check # what the newest AbstractFramework release changes
abstractgateway update # ... and install it (installer installs)
The gateway installs Node.js when needed, installs the browser apps from npm,
runs them and opens them already signed in (docs/apps.md). The
network setting decides who can reach the gateway: localhost, lan or
internet
(docs/configuration.md).
With pip install "abstractgateway[tray]", serve also shows a menu bar /
system tray icon (docs/tray.md).
pip install abstractgateway
export ABSTRACTGATEWAY_DATA_DIR="$PWD/runtime/gateway"
# Optional: set only for a custom bundle registry. When unset, Gateway uses
# the packaged shipped bundle directory containing basic-agent.
# export ABSTRACTGATEWAY_FLOWS_DIR="/path/to/bundles"
# User accounts: the sign-in path for the console and the browser apps.
export ABSTRACTGATEWAY_USER_AUTH=1
abstractgateway serve --host 127.0.0.1 --port 8080
OpenAPI docs (Swagger UI): http://127.0.0.1:8080/docs
Smoke checks:
curl -sS "http://127.0.0.1:8080/api/health"
curl -sS -H "Authorization: Bearer $(cat "$ABSTRACTGATEWAY_DATA_DIR/auth/bootstrap-admin-token")" \
"http://127.0.0.1:8080/api/gateway/bundles"
That last call lists the workflows a fresh install already serves — including a
verify-gated coding agent (coding-agent), deep-research, and
co-scientist, alongside the default basic-agent. See
docs/shipped-workflows.md.
With user accounts on (the default of a plain serve, or
ABSTRACTGATEWAY_USER_AUTH=1), the gateway creates default/admin, writes its
first token to <data dir>/auth/bootstrap-admin-token, and routes each user to
their own runtime and data plane (1 user = 1 runtime). Admins manage users
from the console or /api/gateway/admin/users; user tokens are returned once
and stored only as hashes. Browser apps exchange a user token for an opaque
session (POST /api/gateway/session/login, HTTP-only cookie plus CSRF token)
instead of keeping the token. ABSTRACTGATEWAY_AUTH_TOKEN is a shared
server/operator token, not a browser sign-in token. See
docs/security.md.
The built-in console at /console groups its pages in the sidebar: Accounts
(users and entities in one table, with each account's email settings and
activity), Work (workflows, runtimes, apps), Models (providers, models,
engines, multimodal capability defaults) and System (host resources, a
sandbox, network access); Setup at the bottom reruns the setup guide. An
administrator sees every account; anyone else sees their own account and the
entities they created. The same
configuration surfaces exist in a terminal through the abstractgateway-console
Rust app (the installer builds it; by hand, cargo install abstractgateway-console);
abstractgateway console opens it signed in. See
docs/console.md.
Each user can connect their own mailbox (Accounts → Email on their own row in the web
console, @ on their own row in the terminal console, or /api/gateway/me/email): automations
can run when mail arrives, results and approvals can be emailed to the user,
and agents can use email tools when an administrator makes them available. See
docs/email.md.
Release images are published to GHCR. The default image is the light, portable server image:
docker pull ghcr.io/lpalbou/abstractgateway:0.13.1
NVIDIA hosts can try the experimental full GPU image when local vLLM/HuggingFace/Diffusers engines are wanted. This image is published best-effort until it has a real CUDA build and smoke gate:
docker pull ghcr.io/lpalbou/abstractgateway:0.13.1-gpu
The abstractgateway-server and abstractgateway-server-nvidia GHCR names are
published as aliases for existing deployments; use abstractgateway for new
ones.
The image installs the base abstractgateway package: HTTP server,
AbstractRuntime, Runtime-owned provider/tool and
multimodal facades, OpenAI-compatible text/media providers,
provider/session prompt-cache helpers, AbstractMemory/LanceDB KG support,
AbstractAgent, and AbstractFlow compatibility. Local sentence-transformer
embeddings and hardware-local inference engines are explicit extras so the
light server image does not pull PyTorch/CUDA runtime packages. Remote text
embeddings remain part of the light profile through the embedding.text
capability route: point it at OpenAI, OpenRouter, Portkey, LM Studio, vLLM,
any OpenAI-compatible embeddings endpoint, or a remote AbstractCore server.
AbstractFlow note:
abstractflow Python package to run .flow bundles. You only need it to author bundles; the gateway runs bundles only (store VisualFlows through /api/gateway/visualflows/* and publish them as bundles).docker run --rm --name abstractgateway \
-p 8080:8080 \
-e ABSTRACTGATEWAY_DATA_DIR=/data \
-e ABSTRACTGATEWAY_USER_AUTH=1 \
-e LMSTUDIO_BASE_URL="http://host.docker.internal:1234/v1" \
-v "$PWD/runtime:/data" \
ghcr.io/lpalbou/abstractgateway:latest
On first start, the container creates default/admin and writes the admin user
token to runtime/auth/bootstrap-admin-token. Use that token in /console,
then rotate it or create named users from the console.
Configure framework model defaults through execution-host capability routes:
docker exec abstractgateway abstractgateway-config set-default input.text \
--provider lmstudio \
--model your-model \
--base-url http://host.docker.internal:1234/v1
In user-auth mode this writes the Gateway baseline Core config at
/data/config/abstractcore.json. Per-user runtime overrides use the same Core
schema under /data/users/<tenant>/<runtime>/runtime/config/abstractcore.json;
use abstractgateway-config set-default --scope user --user alice ... for
operator-side scripting.
output.text is a compatibility alias for this same text route. Gateway reports
it as a read-only view of input.text, so LLM text input and output do not drift
to different default models.
On Apple Silicon, keep Metal/MLX inference native on macOS and run the
lightweight Gateway container as the transport/control plane. Point
OPENAI_BASE_URL at a generic host-native OpenAI-compatible endpoint such as
Docker Model Runner (http://model-runner.docker.internal/engines/v1) or
mlx_lm.server on a host port. For named providers, use
LMSTUDIO_BASE_URL=http://host.docker.internal:1234/v1 or
OLLAMA_BASE_URL=http://host.docker.internal:11434.
For native non-Docker installs with local engines, use
pip install "abstractgateway[apple]" on Apple Silicon, and
pip install "abstractgateway[gpu]" on GPU workstations or NVIDIA Docker builds.
For a minimal Apple-local Gateway + Flow setup, see
docs/apple-local-gateway-flow.md.
Compose and deployment details: docs/deployment.md.
Direct, run-scoped Gateway routes (each creates a durable child run and returns artifacts):
POST /api/gateway/runs/{run_id}/voice/tts,
POST /api/gateway/runs/{run_id}/audio/transcribePOST /api/gateway/runs/{run_id}/images/generate, /images/edit,
/images/upscalePOST /api/gateway/runs/{run_id}/videos/generate,
/videos/from_imagePOST /api/gateway/runs/{run_id}/music/generateGET /api/gateway/runs/{run_id}/input_data,
GET /api/gateway/runs/{run_id}/history_bundleDiscovery and catalogs for thin clients:
GET /api/gateway/discovery/capabilities: a versioned contract of packages,
plugins, endpoints and feature gates, with common.readiness/api/gateway/voice/voices, /audio/*/models, /audio/music/providers,
/vision/*), each with a gateway_catalog_v1 envelope and canonical items/api/gateway/artifacts/search: cross-run, session and run artifact search/api/gateway/kg/query: KG memory queries (LanceDB by default)/api/gateway/prompt_cache/* and /api/gateway/sessions/{session_id}/prompt_cache/*:
provider-dependent prompt-cache controlsMedia generation needs a configured backend for the route (the console's
Multimodal tab). Image and video routes stream abstract.progress records
on the child run's ledger; prompt-cache support depends on the provider and
model. Details: docs/api.md and docs/faq.md.
POST /api/gateway/runs/start
thinking sets the run-scoped _runtime.thinking default used by
Flow LLM/Agent nodes and AbstractAgent adapters when Core/provider support
reasoning controlsflow_id: "@default" with an agent interface runs the gateway's default
agent workflow for that interface; every start answers resolved_workflowinput_data._runtime.stream: true also sends the model's reply live
(llm.delta frames on the ledger stream)/api/gateway/automations* (docs/automations.md)POST /api/gateway/commands
pause|resume|cancel|conclude|emit_event|update_schedule|compact_memory|inject_guidance,
plus the automation.* commands for an automationGET /api/gateway/runs/{run_id}/ledger?after=...GET /api/gateway/runs/{run_id}/ledger/stream?after=...A run's owner can browse and preview the run's workspace folder
(GET /api/gateway/runs/{run_id}/workspace, /files, /content), and
GET /api/gateway/about reports the versions the gateway runs without
sign-in.
Model residency is available from a shell through
abstractgateway models loaded|load|unload (docs/console.md).
See docs/api.md for curl examples and the live OpenAPI spec (/openapi.json).
Requires Python >=3.10 (see pyproject.toml).
The base install is the remote-light HTTP/SSE server: Gateway, Runtime, Agent, Flow compatibility, Runtime-owned provider/tool and multimodal facades, and LanceDB-backed Memory. It intentionally excludes local sentence-transformer embeddings and hardware-local inference engines so Linux installs do not pull PyTorch/CUDA packages. Remote embeddings and remote multimodal input/output still work in this profile through hosted providers, OpenAI-compatible endpoints, or a remote AbstractCore server.
pip install abstractgateway
abstractgateway[apple]: full native macOS Python profile with Apple-local engines and all non-NVIDIA framework capabilitiesabstractgateway[gpu]: full local GPU profile with vLLM/HuggingFace, local Diffusers image generation, local voice engines, music, and KG memory; this is also the NVIDIA Docker install profileabstractgateway[embeddings]: local sentence-transformer embeddings for semantic KG queriesabstractgateway[tray]: a menu bar / system tray icon for abstractgateway serve (macOS, Windows, Linux) — open the console, pause/resume workflows, unload models, watch memory and GPU, restart or update; see docs/tray.mdabstractgateway[docs]: MkDocs site toolingabstractgateway[dev]: local test/dev depsKG memory nodes use Gateway's memory resolver. The default durable/vector
backend is LanceDB; memory is process-local dev/test storage, and sqlite is
structured-only when the installed AbstractMemory build exposes
SQLiteTripleStore.
Gateway has a first-class config helper:
abstractgateway-config status
abstractgateway config init --env-file .env
For details on capability route defaults, store backends, and workflow sources, see docs/configuration.md.
.flow bundle (authoring)Author the workflow in the AbstractFlow editor and publish it: the editor
stores the VisualFlow on the gateway (/api/gateway/visualflows/*) and
POST /api/gateway/visualflows/{flow_id}/publish packs it into a bundle. From
Python, AbstractRuntime packs a bundle from VisualFlow JSON files:
from abstractruntime.workflow_bundle import pack_workflow_bundle
pack_workflow_bundle(
root_flow_json="/path/to/root.json",
out_path="/path/to/bundles/my-bundle@0.1.0.flow",
bundle_id="my-bundle",
bundle_version="0.1.0",
flows_dir="/path/to/flows",
)
Upload it with POST /api/gateway/bundles/upload, or place it in
ABSTRACTGATEWAY_FLOWS_DIR.
See docs/getting-started.md for running, split API/runner, and file→SQLite migration.
Published docs site: https://www.lpalbou.info/AbstractGateway/
Project: CHANGELOG.md · CONTRIBUTING.md · CODE_OF_CONDUCT.md · SECURITY.md · ACKNOWLEDGMENTS.md · LICENSE (MIT)
pypistats · 74 observations shown. Missing days are unknown. Source category: overall: without mirrors.
| Date / source period | Value | Observed at |
|---|---|---|
| 2026-10-19 – 2026-10-19 | 319 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-18 – 2026-10-18 | 907 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-17 – 2026-10-17 | 187 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-16 – 2026-10-16 | 155 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-15 – 2026-10-15 | 143 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-14 – 2026-10-14 | 48 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-13 – 2026-10-13 | 30 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-12 – 2026-10-12 | 21 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-11 – 2026-10-11 | 99 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-10 – 2026-10-10 | 50 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-09 – 2026-10-09 | 39 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-08 – 2026-10-08 | 313 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-07 – 2026-10-07 | 36 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-06 – 2026-10-06 | 44 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-05 – 2026-10-05 | 212 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-04 – 2026-10-04 | 78 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-03 – 2026-10-03 | 225 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-02 – 2026-10-02 | 425 | 2026-10-20T18:54:11.3128087Z |
| 2026-10-01 – 2026-10-01 | 234 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-30 – 2026-09-30 | 425 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-29 – 2026-09-29 | 397 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-28 – 2026-09-28 | 279 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-27 – 2026-09-27 | 215 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-26 – 2026-09-26 | 253 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-25 – 2026-09-25 | 130 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-24 – 2026-09-24 | 234 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-23 – 2026-09-23 | 326 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-22 – 2026-09-22 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-21 – 2026-09-21 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-20 – 2026-09-20 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-19 – 2026-09-19 | 3 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-18 – 2026-09-18 | 72 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-16 – 2026-09-16 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-14 – 2026-09-14 | 5 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-13 – 2026-09-13 | 5 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-12 – 2026-09-12 | 89 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-11 – 2026-09-11 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-10 – 2026-09-10 | 3 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-09 – 2026-09-09 | 3 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-08 – 2026-09-08 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-07 – 2026-09-07 | 6 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-06 – 2026-09-06 | 7 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-04 – 2026-09-04 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-03 – 2026-09-03 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-02 – 2026-09-02 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-09-01 – 2026-09-01 | 12 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-31 – 2026-08-31 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-29 – 2026-08-29 | 4 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-28 – 2026-08-28 | 33 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-27 – 2026-08-27 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-26 – 2026-08-26 | 4 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-24 – 2026-08-24 | 18 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-23 – 2026-08-23 | 3 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-20 – 2026-08-20 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-19 – 2026-08-19 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-18 – 2026-08-18 | 58 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-17 – 2026-08-17 | 8 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-16 – 2026-08-16 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-15 – 2026-08-15 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-14 – 2026-08-14 | 5 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-13 – 2026-08-13 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-09 – 2026-08-09 | 10 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-07 – 2026-08-07 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-06 – 2026-08-06 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-04 – 2026-08-04 | 7 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-03 – 2026-08-03 | 12 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-02 – 2026-08-02 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-08-01 – 2026-08-01 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-07-31 – 2026-07-31 | 10 | 2026-10-20T18:54:11.3128087Z |
| 2026-07-29 – 2026-07-29 | 9 | 2026-10-20T18:54:11.3128087Z |
| 2026-07-27 – 2026-07-27 | 3 | 2026-10-20T18:54:11.3128087Z |
| 2026-07-24 – 2026-07-24 | 2 | 2026-10-20T18:54:11.3128087Z |
| 2026-07-23 – 2026-07-23 | 1 | 2026-10-20T18:54:11.3128087Z |
| 2026-07-22 – 2026-07-22 | 3 | 2026-10-20T18:54:11.3128087Z |
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.15.11 | 19 Oct 2026 | 21 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 17:40 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:1fdaa27ddbf6d2f79e19998880ce41e9e1fcda1f4fb40a73d92f8c6129ee8799