Everything a terminal agent needs. Nothing it does not.
Every capability is a plugin on a vendored Cordis core. The CLI boots ordered patch layers, runs entirely on your machine, and never asks you to create an account.
Keyless connect
Run tvashta connect openai, pick from the catalog, and paste a key. It is stored in settings.yaml with 0600 permissions and picked up on the next request.
Durable sessions
Every turn persists to a session log. A failed request keeps the session open, so you can retry, rephrase, or step away and resume without losing context.
Everything is a plugin
Shell stacks, filesystem tools, subagents, hooks, MCP clients, and workflows are composed by profile patches, and extended without forking the harness.
One command feel
A single tvashta command on Windows, Linux, and macOS. It installs from one line and runs like a native tool.
Local-first secrets
Keys live in your home settings document and travel only to the provider you chose. Project .env layers work too.
Fails loud
An unknown provider, a missing key, or a bad profile errors at the earliest resolvable point, with the valid options listed.
Eleven connectors. One API key each.
Predefined base URLs and default models ship built in. An unknown id fails loud with the valid list.
One command does the work
| Command | What it does |
|---|---|
| tvashta | Open an interactive session in the default profile. Type a message, read the answer, repeat. /exit quits. |
| tvashta "<task>" | Answer one task in a fresh durable session, print the result, then exit. |
| tvashta providers | List the predefined providers and whether each one is connected. |
| tvashta connect <provider> | Store a provider API key in the settings document. Add --key to pass it inline. |
| tvashta --profile <name> | Boot a named profile. Everything after your flags belongs to the booted app. |
| tvashta --dump-config | Print the composed profile tree and exit without booting. |
| tvashta plugin add <pkg> | Install a plugin into the profile. Forwards to pnpm. |
| tvashta --version | Print the installed version. |
How it fits together
Profiles
Ordered stacks of plugin-bundle patch layers under $DSH_HOME/profiles/<name>, plus your own cordis.patch.yml. The default headless profile auto-initializes on first use. Inspect any composition with tvashta --dump-config.
Sessions
Runs persist a session log per home directory, not per terminal. Interactive sessions keep history across turns. One-shot runs exit nonzero unless the turn completed.
Keys and settings
$DSH_HOME/settings.yaml holds provider keys, and connect writes it with 0600 permissions. $DSH_HOME/.env and the project .env layer environment variables beneath it. Settings win over env.
Plugins
Bundles mount capabilities: bash and pwsh stacks, filesystem tools, code runtime, subagents, LSP, and MCP. Install one into a profile with tvashta plugin add, then compose it in your patch layer.