Terminal console (`abstractcore-console`)

abstractcore-console is AbstractCore's keyboard-first terminal console. It configures abstractcore.json (default models, providers and API keys, capability routes, media, embeddings, server) and manages local models and engines on this machine.

Table of Contents

Screens Who may change the host Same screens in the gateway console
pip install abstractcore               # the CLI the console drives
cargo install abstractcore-console     # the console (Rust 1.87+)
abstractcore-console                   # --wizard for the guided setup

The console reads the config file directly and runs the abstractcore CLI for everything derived or written. It finds the CLI through $ABSTRACTCORE_CLI, then abstractcore on PATH, then ~/.local/bin/abstractcore (the uv tool shim), then ./.venv/bin/abstractcore in the current directory.

Screens

Key Screen What it is for
1 Overview every config section's state; Enter jumps to its owner
2 Model default models and app defaults
3 Providers providers, endpoint profiles, API keys, model discovery
4 Routes capability routes (vision, audio, image, video, embeddings); w downloads a route's weights, a applies the recommended routes
5 Media vision / audio / video settings
6 Embeddings the embeddings route
7 Server server, logging, timeouts, cache
8 Review the file identity and test evidence
9 Models the model catalog fitted to this host (see the keys below)
0 Engines Ollama, LM Studio, MLX, llama.cpp, vLLM, Hugging Face (see the keys below)
@ Email the email address and the mailbox of this install, card by card (see Email keys) — the web console's Email tab, same cards and words; the password and client secret go to abstractcore email connect on stdin, never on its command line (see Email)

To move between screens, press the screen's key, Ctrl+N / Ctrl+P, or ← / → for the next and previous screen (wrapping from Engines to Overview and back). The arrows keep their own meaning while a text field has the caret (they move it), while the screen bar has the focus (it moves itself), and in any open dialog. In the wizard the arrows do not jump screens; Ctrl+N walks the wizard.

Switches

A persistent on/off setting is a switch, labelled by what it controls: [x] Agent email tools is on (accent, bold), [ ] Agent email tools is off, [-] Agent email tools — Connect a mailbox first. is unavailable (dimmed, with what unlocks it). Space or Enter switches the selected one and the status line names the new state ("Agent email tools are on."). On the Model, Media, Embeddings and Server screens every on/off field reads [x] on / [ ] off and switches at once; only switching on a flag AbstractCore marks UNSAFE (server.allow_unauthenticated, server.allow_local_files) asks first.

Email keys

Tab / Shift+Tab move between the controls, Enter presses a button or saves a field, Space switches a switch, ← / → change the Mailbox tab while the tab bar has the focus. The screen has four cards:

Card What it holds
Email address one field with its own Save ("✓ Saved" for two seconds): the first address your agents may write to. With no address stored and no mailbox, the card says connecting sets it, and the mailbox form's address is the only address field
Mailbox not connected: tabs IMAP (first, the default) / Google / Microsoft. The IMAP tab shows the mailbox address, the password, and the incoming (IMAP) and outgoing (SMTP) server, port and security, filled with imap.<domain> 993 SSL / smtp.<domain> 465 SSL as soon as the address has a domain, then with what abstractcore email discover finds (never over a field you edited); one line says where they come from. "My provider uses a different login name" reveals a Login field and "Custom certificate" the CA file. With an email address stored, the form shows "Mailbox account:
" and "› Use a different account" opens the field. One Connect stores and tests; its error says what failed. Google and Microsoft sign in through the provider (the device code or sign-in address shows while it waits; Cancel sign-in stops it); your own client goes under their Advanced. Connected: "Connected as … · method · Read only (or Read and write) · checked … ago", the Active switch, Test and Disconnect (asks inline first)
Agent email tools the switch (off by default); unavailable until a mailbox is connected and in use
Advanced (folded) three sentences: "Your agents may send to …" (only these recipients or everyone except these; entries added and removed at once), "At most N per hour and M per day." with this hour's and today's count, and "Watch folder …" (limits and folder saved on Enter or when the field loses focus); a failed change says its cause inline

Models keys

Key Action
w download the selected artifact; several downloads run at once
d delete an installed artifact (the confirm names what blocks it: a loaded model, a shared cache)
/ filter by name, family, tag or artifact
t cycle the model type: text, thinking, tools, vision, audio, embedding, voice, image, video
f show only what fits this host
e cycle the engine
h search Hugging Face (an empty query returns to the catalog)
u make the selected installed text model the default text model (output.text); the route becomes exactly that model
v cycle catalog → installed → downloads (every download the backend knows, live)
c cancel the selected download (asks first)
r re-read the host, the catalog and what is installed

Engines keys

Key Action
i install the selected engine (the confirm shows the command, the host it runs on, and any administrator step; a dry run is one of the answers)
o open the vendor's download page
r probe the local servers
c cancel the engine's install
s start or stop the engine's server (Ollama, LM Studio)
a continue an install that waits for an administrator or for developer tools
y copy that install's command

s, a and y, the install location (just you or all users) and Hugging Face search are optional backend verbs: over a backend without them the key answers "not available here" and the footer says "not here". The abstractcore CLI backend offers h, u and the downloads view; the gateway console offers them all.

Models and Engines speak the same vocabulary as the web console and the gateway console: weights installed / not downloaded / unknown / remote, fit fits / tight / too large / partial offload / unknown. Every action there is a CLI command you can run yourself:

Console action CLI equivalent
Models list abstractcore models catalog --json / models search <q> [--engine X] [--fits] --json
Installed view abstractcore models list --json
w download abstractcore models download <provider> <artifact> --json
d delete abstractcore models delete <provider> <artifact> --yes [--force] --json
Engines list abstractcore engines status [--probe] --json
i install abstractcore engines install <id> --yes [--dry-run] --json

Downloads and installs run on the machine that runs the console. Downloads run in parallel. An install that waits for a person (an administrator password, developer tools) blocks nothing and shows the exact command to run. q will not quit while a download or install is working; a waiting install does not hold it.

Who may change the host

w, d, u and c on Models and i, s, a and c on Engines change the host, so they are administrator verbs, as in the web console. In abstractcore-console you are the local operator and every verb is yours. In the gateway console they follow your sign-in: a non-admin browses freely, each of these keys answers "only an admin can … — ", and the footer marks them "admin only".

Same screens in the gateway console

The Models and Engines screens are a library inside the crate (abstractcore_console::screens). abstractgateway-console mounts them over an HTTP transport to the gateway's /api/gateway/models/* and /api/gateway/engines/* routes, so a gateway operator sees the same screens, acting on the gateway host, with the administrator rules of the gateway's sign-in. See the crate README (console-tui/README.md) for the library API.