v0.2.81 · BSL 1.1 → Apache 2.0 (2030) · published by Satoshi Ltd.

a slim /
personal agent.

alpi lives in your terminal. Inline-learning memory, live skills, your choice of model, reachable from the messengers you already use — and ALP, a closed agent-to-agent protocol that links your agents across profiles and machines without a hub. No telemetry. No account. No mandatory cloud.

01 / what alpi is

An agent that fits in a repo, not in a suite.

Third-party agents typically aim at a broad audience: 28 skill categories, sync hub, sub-agent mesh, SQLite state. alpi drops all of that. 17 tools, 3 memory files, 1 research sub-agent. Every feature earns its keep or doesn't ship.

// slim

Core loop first.

Turn, memory, tools, paths, scanner. The surface comes after. 30+ tools → ~17. No legacy code, no silent migrations.

constraint breeds coherence
// user in control

No destructive action without explicit OK.

Three-tier approval system: safe / caution / dangerous. The dangerous ones never get an override — no flag, no config knob.

approval gate
// inline memory

No post-session reflect.

Three markdown files — USER.md, MEMORY.md, PERSONALITY.md. Updated inline during conversations via the memory tool.

3 files
// live-by-default

Skills without an approval gate.

Tried in v0.1, removed in v0.2. The security scanner plus OSV check on install are the real gate. Auto-injected into the system prompt.

skills
// read-only research

One sub-agent role, not a mesh.

research(brief, depth) spawns a read-only worker with its own context. Returns a synthesised report — main agent never sees the trace.

quick · normal · deep
// honesty

We respect every provider's ToS.

Zero reversed OAuth against any vendor's first-party subscription client. You use your own API keys — the cost is honest, per-token, and visible.

no subscription routing
02 / quickstart

Ten minutes, end to end.

Install. Pick a model. Pin a workspace. Send a message. Connect a gateway if you want 24/7 messaging. Add a profile if you want isolation. Link machines over ALP if you want a mesh. All of it lives behind alpi setup.

step · 01

Install.

uv tool install alpi. Python ≥ 3.10. Optional: playwright install chromium (~200 MB) for the browser tool.

step · 02

Pick a model.

alpi setup → Model / Provider. Fresh profiles ship with no default — you choose the provider, paste the key, pick the model. See MODELS.md for tiered guidance.

step · 03

Pin a workspace.

Same wizard, Workspace. Point it at the dir alpi may read/write. Fallback is cwd at launch, with a warning — fine for trying, not for real use.

step · 04

Send a message.

Run alpi. Type hola. Useful first slash commands: /help · /memory · /skills · /status · /new · /model.

step · 05

Resume where you left off.

alpi -c rehydrates the last session. To make it implicit, flip tui.auto_resume in config.yaml.

step · 06

Connect a gateway.

alpi setup → Gateways then Gateway service → Install. alpi now answers Telegram / IMAP / Gmail 24/7, with per-chat session threading.

step · 07

Add a second profile.

alpi profile create work · alpi -p work setup. Different API key, different memory, different bot, different identity. Fully isolated under ~/.alpi/profiles/work/.

step · 08

Link another alpi.

alpi setup → ALP service → Install then → Peers to exchange pubkeys. See deployments for the six topologies.

step · 09

Check health.

alpi doctor. Live checks: model reachable, gateways logged in, MCP handshaking, services alive, ALP socket listening, peers reachable. Exits 1 on any failure — cron-friendly.

03 / in action

What it looks like, day to day.

Not a framework. Not a harness. A terminal companion that remembers you, executes, and — with ALP — talks to your other machines without a hub in the middle.

// memory across sessions

It remembers what matters.

you › my partner's birthday is march 14th
alpi › noted. added to MEMORY.md.
…
# three weeks later, fresh session
you › anything coming up this month worth planning?
alpi › yes — her birthday on the 14th. want me to draft a plan?
// live skills

Drop a folder. It's a new capability.

~/.alpi/skills/
  finance/
    SKILL.md          # when to invoke
    scripts/fetch.py
    references/ledger.md

you › how much did i spend on groceries last month?
alpi › → skill(finance) → fetch.py → €412.80 across 23 tx
// alp · peer-to-peer

Ask your other machine to do it.

# on the laptop
you › ask nas to pull the latest logs and tell me what's odd
alpi › → link.ask(peer=nas, brief=…)
         ← 3 auth failures from 185.220.x at 03:14 UTC.
         consistent with a credential-stuffing probe.
// reachable anywhere

Reach it from the messenger you already open.

# from your phone, 400km away
you › did the backup run tonight?
alpi › ✓ 02:11 UTC, 184GB, ok.
         previous 7 days also clean.

# fail-closed allowlist; unknown senders drop silently
04 / deployments

Six topologies. Pick the closest.

alpi is designed to scale from one laptop to an enterprise "army of alpis", without ever needing a central server. Each shape is a reference you can adapt — profiles provide identity, ALP provides the wire.

topology · 01

Laptop only.

One profile, one machine, TUI for chat. Optional gateway daemon for 24/7 Telegram / IMAP / Gmail. Zero ALP. The baseline — 90% of individual users stop here.

free · BSL personal use

topology · 02

Laptop + home server.

Heavy work (schedules, long research, cron) on the home server; interactive chat on the laptop. Linked via ALP.2 over Tailscale. Each pins the other's pubkey; capabilities narrow per peer.

free · BSL personal use

topology · 03

One machine, many profiles.

The "army of alpis" starter kit on a single host. assistant (daily driver) + researcher (deep-research role) + cron (scheduled jobs). Intra-machine ALP = Unix-domain sockets, mode 0600.

free · BSL personal use

topology · 04

Multi-device personal.

Your alpis follow you across devices — laptop, desktop, phone (Termux / iSH) — over a Tailscale mesh. Every device pins every other. Losing a device means dropping its pubkey from every peers.yaml.

free · BSL personal use

topology · 05

Family / small team.

One profile per human, plus a home-server hub. ALP.3 rooms: the hub holds the group key + transcript, members post via room.post. Agents inside the room act within their per-member budget. Ships in ALP.3 (v0.4).

free · BSL personal use

topology · 06

Enterprise — army of alpis.

Per-employee profiles, mesh linked over corporate Tailscale. Shared services (research-bot, tools-bot) as pinned peers with narrow capabilities. Central log + approval audit hub. Company policy pushes sandbox on.

commercial licence from Satoshi Ltd.

topology · 06 · enterprise mesh

┌──────────────────────────────────────────────────────────────┐
│ corporate Tailscale network                                  │
│                                                              │
│  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐            │
│  │Jane  │  │Raj   │  │Mia   │  │Léa   │  │… N  │            │
│  │alpi  │  │alpi  │  │alpi  │  │alpi  │  │      │            │
│  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘  └──┬───┘            │
│     └─────────┴─────────┴─────────┴─────────┘                │
│                       │                                      │
│              ┌────────┴─────────┐                            │
│    ┌─────────▼──────┐    ┌──────▼─────────┐                  │
│    │ research-bot   │    │ tools-bot      │                  │
│    │ (shared, RO)   │    │ (HR, calendar, │                  │
│    │                │    │  narrow budget)│                  │
│    └────────────────┘    └────────────────┘                  │
│                                                              │
│              ┌───────────────────┐                           │
│              │ audit + log hub     agent.log + approval.log
│              │ (SIEM forwarder)   shipped to your SIEM
│              └───────────────────┘                           │
└──────────────────────────────────────────────────────────────┘

out of scope, deliberately —
  · SSO / SAML / OIDC for human access         (belongs at Tailscale / OS)
  · centralised secret management               (wire Vault via MCP)
  · federation with non-alpi agents             (ALP is closed — use MCP)

Licence boundary. Topologies 1–5 are personal / non-production use by individuals and are free under BSL 1.1. Topology 6 — production deployment inside a legal entity — requires a commercial licence from Satoshi Ltd. (info@satoshi-ltd.com). Full text in §license.

05 / alp · new in v0.3

A closed protocol for agent-to-agent links.

ALP (Alpi Link Protocol) connects alpi instances — same machine, different machines, or a shared room — without a hub, a registry, or a discovery service. End-to-end encrypted, pinned pubkeys, fail-closed capabilities. Purpose-built, not open-federation.

identity

One Ed25519 key per profile.

Every envelope is signed. Peer lists pin a pubkey — not a hostname, not a trust-on-first-use cert. Unknown peer, dropped at the transport layer before the payload is parsed.

transport

Unix socket, or Noise_XK over TCP.

Intra-machine: alp.sock mode 0600. Inter-machine: Noise_XK handshake + ChaCha20-Poly1305. Forward-secret session keys. No TLS, no PKI, no CA to trust.

verbs

Three core methods.

link.ping — liveness. link.ask — runs a full agent turn on the target peer, using its memory, skills, and tools. link.cancel — interrupt. No introspection. No federation.

capabilities

Fail-closed per peer.

Every peer lists an allow: array of methods it may invoke. Not listed, not allowed. Daily budgets in tokens or USD. Rate limits per minute.

rooms

Multi-party, hub-anchored.

N agents share a workspace with a stable group key. One hub holds the transcript. No replication, no consensus re-election — host the hub on an always-on machine.

reentrancy

Reject fast, never queue.

A second link.ask on an already-running session returns -32007 target-busy. The caller retries with jittered backoff. No deadlock class.

peer A (laptop)                                   peer B (home-server)
┌──────────────────────────────────┐                 ┌─────────────────────────────────┐
 alpi profile=personal                            alpi profile=nas              
   key: ed25519 (pinned → B)                       key: ed25519 (pinned → A)   
└─────────────┬─────────────────┘                 └─────────────┬─────────────────┘
                                                   
              └─── Noise_XK ─── ChaCha20-Poly1305 ───┘
                           TCP :7423

envelope  { jsonrpc, id, method, params,
            alp: { v, from, to, ts, nonce, sig } }

verbs     link.ping   · liveness + version
          link.ask    · run full agent turn on peer
          link.cancel · interrupt session

What ALP is not. It's not an open federation protocol. It does not aim to interoperate with third-party agents. It does not anonymise traffic. It does not defend against a compromised endpoint. Scope is deliberately narrow — that's what keeps the attack surface narrow and the spec auditable end to end.

06 / principles

Inherited from Satoshi Ltd.

alpi is published by Satoshi Ltd. and inherits its six operating principles. They aren't aspirational copy — every non-obvious design choice in the repo traces back to one of these.

principle · 01

Privacy by Design.

No discovery. No registry. No telemetry. LiteLLM's default telemetry is audited off at release — regression-tested. ALP is a closed protocol by construction: every exposed knob is a potential attack vector.

principle · 02

User Sovereignty.

Per-profile isolation under ~/.alpi/profiles/<name>/. Fresh profiles ship with no default model — you pick your provider, your model, your memory. Skills and memory live on your disk, not ours.

principle · 03

Security First.

Threat-modeled from the spec. Ed25519 signing on every ALP envelope, fail-closed capability model, reject-fast reentrancy, approval gate on shell, OSV check before installing skills or MCPs, pip-audit in the release checklist.

principle · 04

Open Source.

Source-available under BSL 1.1. Reproducible via uv.lock. No hidden binaries. Converts to Apache 2.0 on the Change Date (2030-04-23). Free for individuals and non-production use.

principle · 05

Zero Knowledge.

No trust-on-first-use. Peers exchange pubkeys out of band and pin them. ALP.2's Noise_XK handshake produces forward-secret session keys — losing a long-term key doesn't unlock past traffic.

principle · 06

Digital Sovereignty.

Ollama is a first-class provider. Skills and sub-agents run locally. Wire alpi up on a laptop, a home server, and a remote box, link them via ALP, and never depend on a centralised service.

The design heuristic that pulls these together — borrowed from Satoshi's Clonara — is “constraint breeds coherence”. Closed scope, small verb set, one transport per environment, no generic framework.

07 / license

Free for individuals. Paid for commercial production.

Source-available under BSL 1.1 by Satoshi Ltd., converting to Apache 2.0 on 2030-04-23. Individuals, research, and non-production use are free. Companies deploying to production need a commercial licence. The Alpi Link Protocol itself ships under Apache-2.0 so third parties can implement interoperable nodes.

full terms

LICENSE →

BSL 1.1 split, Change Date, individuals vs companies, the Alpi Link Protocol exception.

commercial licence

Talk to Satoshi Ltd.

Production deployment by a company, or offering alpi as a hosted / embedded service — info@satoshi-ltd.com

08 / install

Four commands. No account.

# 1. install from PyPI (uv recommended, pip also works)
$ uv tool install alpi

# 2. configure the default profile (model + .env + workspace)
$ alpi setup

# 3. chat
$ alpi

# 4. check health
$ alpi doctor

# later — add a second profile, fully isolated
$ alpi profile create work
$ alpi -p work setup

alpi needs Python ≥ 3.10. The default profile lives in ~/.alpi/. Additional profiles in ~/.alpi/profiles/<name>/. No account, no central server, no telemetry — your .env is the single source of truth for secrets. Source-available under BSL 1.1; converts to Apache 2.0 on 2030-04-23. Commercial production deployment → §license.

09 / documentation

Live. In the repo. Auditable.

Each doc is a reference of something that already ships — historical decisions live in commits, planned work in the ROADMAP.

01 · intro

README.md

Start here. What alpi is, who it's for, how it differs.

read →
02 · guide

QUICKSTART.md

Install, set a key, first chat, first skill. 5 minutes from zero to a working agent.

read →
03 · guide

PROFILES.md

Switchable agent personalities: personal / coder / ops / research. How to define your own.

read →
04 · guide

SKILLS.md

Directory contract. 13 closed categories. Frontmatter. Where secrets live.

read →
05 · guide

MODELS.md

Tiers A/B/C. Usage signals + hands-on testing. What @soyjavi uses day to day.

read →
06 · reference

ALP.md

Alpi Link Protocol. Noise-encrypted inter-machine transport. Rooms, rate limits, budgets.

read →
07 · reference

ARCHITECTURE.md

Code structure, turn loop, memory, sessions, gateway, scheduler, MCP, logging.

read →
08 · reference

CONFIG.md

Every YAML knob, its default, what it controls.

read →
09 · reference

SECURITY.md

Two-layer security model. Approval system, SSRF, prompt-injection, sensitive paths. Sandbox.

read →
10 · ops

DEPLOYMENTS.md

launchd on macOS, systemd on Linux. Gateway daemon, schedule daemon, keep-alive, logs.

read →
11 · ops

OPERATIONS.md

Day-2 runbook. Doctor, diagnostics, log rotation, backup, recovery, upgrade.

read →
12 · legal

LICENSE.md

BSL 1.1 for the agent core; Apache-2.0 for the Alpi Link Protocol.

read →
13 · planning

ROADMAP.md

What's in progress, what's coming in v0.3, decisions discarded with rationale.

read →
14 · log

CHANGELOG.md

Version-by-version log of user-visible changes since v0.1.

read →
ascii bg