Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

BRIAN

BRIAN

A self-hosted agent runtime. Model, loop, tools, memory, permissions.

PyPI Python License

pip-installable as brian-core 2.0.0rc39. The command is brian.

macOS / Linux

curl -fsSL https://heybrian.ai/install | bash

cmd

powershell -c "irm https://heybrian.ai/install.ps1 | iex"

PowerShell

irm https://heybrian.ai/install.ps1 | iex

First brian in a terminal asks for a provider, credentials, and model, seeds ~/.brian/SOUL.md if missing, live-pings the provider, then asks what to call you. brian doctor diagnoses the home without starting a session. Pipe install stays non-interactive. Bring your own LLM key. The wheel is code — memory and sessions start empty, in ~/.brian.

What you get

Door How
CLI brian
HTTP API brian --api
Agent SDK from brian_core.sdk import run — same loop, in-process, not HTTP

BrianClient talks to the HTTP API. It is not the Agent SDK.

from brian_core.sdk import run, stream

print(run("list python files"))
for event in stream("list python files"):
    ...

Twelve providers (Anthropic, OpenAI, Gemini, Bedrock, OpenRouter, DeepSeek, Mistral, xAI, Ollama, LM Studio, plus generic gateways). Seventy tools: shell, files, browser, desktop, web, media, MCP, subagents, durable runs that survive a crash.

From this repo

Git, Python 3.11+, uv. Code lives under src/brian_core.

git clone https://github.com/mrgizmo212/Brian.git
cd Brian
uv sync
uv run brian --help
uv run brian
uv run brian "list python files"

Optional extras: providers, hosted, desktop (screen control).

Modes

uv run brian                         # TUI
uv run brian --repl                  # CLI prompt
uv run brian "do this"               # one shot
uv run brian --continue              # last session
uv run brian --resume <session-id>
uv run brian --fork-session <id>
uv run brian --tui
uv run brian --api
uv run brian --scheduler
uv run brian --heartbeat-only
uv run brian --learning-graph
uv run brian --version
uv run brian doctor

One mode per invocation. --api requires API_SERVER_KEY.

HTTP API

uv run brian --api
curl -fsS http://127.0.0.1:8000/health
curl -fsS http://127.0.0.1:8000/v1/chat/completions \
  -H "Authorization: Bearer $API_SERVER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"agent","messages":[{"role":"user","content":"Say hello."}]}'
Endpoint Purpose
POST /v1/chat/completions Chat, streaming or not
POST /v1/responses Responses API, streaming or not; chain turns with previous_response_id
GET /v1/responses/{id} / DELETE /v1/responses/{id} Fetch or delete a stored response
POST /v1/runs Durable run
GET /v1/runs/{id}/events SSE
POST /v1/runs/{id}/approval Human approval
GET /v2/capabilities Machine-readable surface

Self-host with Docker: deploy/README.md.

Bring your own machine

Let heybrian chats run bash, file reads/writes/edits, undo, glob and grep on your own laptop or server, inside an OS sandbox limited to the folders you choose. The helper only connects out to heybrian over HTTPS; nothing listens on your machine. Your admin turns it on in Admin → Configuration → machines.enabled.

Command output streams live to the chat while a command runs. When a command stops to ask a question ("Overwrite? (y/n)"), you answer it on the question card in the chat.

Install, pair once, then start the helper:

# macOS
brew install pipx && pipx install 'brian-core[desktop]==2.0.0rc39'
# Linux
sudo apt install -y bubblewrap pipx && pipx install 'brian-core==2.0.0rc39'
# Windows (PowerShell) — also follow srt's one-time restricted-account setup
py -m pip install --user pipx; py -m pipx install 'brian-core==2.0.0rc39'; npm install -g @anthropic-ai/sandbox-runtime

brian pair                                  # shows a code; enter it in heybrian → Settings → BRIAN → Your machines
brian worker --dir ~/code/project           # add more --dir flags for more folders (max 16)
brian machine status                        # pairing, sandbox and git token state
brian machine unpair                        # delete the local credential (also: brian unpair)
Flag Meaning
--dir PATH A folder BRIAN may work in. Not /, not your whole home folder.
--allow-network Commands may use the network (off by default).
--allow-domain DOMAIN Only these domains (srt only; with bubblewrap or sandbox-exec it allows all network and says so).
--screen Let BRIAN's computer tool act on this screen (needs the desktop extra).
--git-email-domain DOMAIN Domain for agent commit emails (default users.noreply.heybrian.ai).
--url URL heybrian address (default https://heybrian.ai).

Sandbox. Every command runs in srt (Anthropic sandbox-runtime) when it is on PATH, otherwise bwrap on Linux or sandbox-exec on macOS. Windows needs srt. With none of them the helper exits with code 4 and never runs a command unsandboxed. Commands can write only to your folders and a private scratch dir, cannot read the rest of your home folder or the helper's credential folder, cannot open Unix sockets (Linux), and have no network unless you allow it. File reads, writes and edits run in the helper itself, confined to the folders (.., absolute paths and symlinks that leave a folder are refused). Every write keeps an undo snapshot under the helper's folder.

Screen control (--screen, off by default, and only when your admin enabled machines.screenControl.enabled). You grant each app in Settings → Your machines as full, click-only or view-only; apps you have not granted are refused, and password managers are always view-only. Every screen action asks you first unless you turn on "Let BRIAN act without asking". BRIAN refuses to type into password, sign-in and payment windows or password fields, and never types card numbers. Move the pointer to the top-left corner to stop it at once. On macOS grant Screen Recording and Accessibility to your terminal in System Settings → Privacy & Security; on Linux an X11 session with xdotool is needed (Wayland is not supported).

Git identity. Commits made on the machine carry the agent's name as <agent> (BRIAN) and <agent>+brian@users.noreply.heybrian.ai. To let BRIAN push, store a token locally (brian machine git-token set, read from stdin, never from the command line; clear removes it). It is saved as git-token (mode 0600) next to machine.json, handed to git through a per-command credential helper, never sent to heybrian or the model, and masked as *** in every output. Pushing also needs network, e.g. --allow-domain github.com.

Files: ~/.config/brian/machine.json (macOS/Linux) or %APPDATA%\brian\machine.json (Windows), mode 0600; BRIAN_MACHINE_HOME overrides the folder. Exit codes: 0 ok, 2 not paired, 3 removed in heybrian (the credential is deleted), 4 no OS sandbox, 5 turned off by your admin.

Config

Settings live in ~/.brian/.env (or BRIAN_ENV_FILE). Names are in env.example. Required: PROVIDER, MODEL, and that provider's key.

Override the home directory with BRIAN_HOME.

Docs

  • docs/CAPABILITIES.md — what it can do (Memory Trio: flush-before-compact, stub summary, skill proposals; Engine parity 2026-09-20: real token counting, file-tool fence, default step cap, one durable path, surfaced transcript failures, CI)
  • docs/brian-operator.md — SOUL, skills, MCP, session save, compaction flags
  • AGENTS.md — working in this repo (module index, Memory Trio table, Engine parity table)
  • docs/core-v2/package-migration.md — package, CLI, and install reference

License

MIT License. Copyright 2026 TTG AI LLC. See LICENSE and NOTICE.

Metadata

Release files for brian-core 2.0.0rc39

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for brian-core 2.0.0rc39
File Size Uploaded Provenance
brian_core-2.0.0rc39.tar.gz 2.6 MB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for brian-core 2.0.0rc39
File Interpreter ABI Platform
brian_core-2.0.0rc39-py3-none-any.whl Python 3 none any Details

Total release size: 3.9 MB

Release files / brian_core-2.0.0rc39.tar.gz

Download URL brian_core-2.0.0rc39.tar.gz
Size 2.6 MB
Tags Source
SHA-256 checksum
How to use checksums
0d45f22186f34cc8d468623c37edc85a22604da5a3b3d926d711b546eb7ee1ad
BLAKE2b-256 checksum
How to use checksums
8dbdd4e45f7c346e8629be6cf824dd15b56feed32280b92804a8f1733d5eb61a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / brian_core-2.0.0rc39-py3-none-any.whl

Download URL brian_core-2.0.0rc39-py3-none-any.whl
Size 1.3 MB
Tags Python 3
SHA-256 checksum
How to use checksums
51749e1c7fe5242f2b24a3b0f8a9f7ef73a0571ffa65d6b4ee15ccdb8602afba
BLAKE2b-256 checksum
How to use checksums
fd7c1a25b453fe524688f6b00a6ec2e4488a0c02432d1c85b74b269a4d7b3707
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Security for brian-core 2.0.0rc39

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page