your agent,
everywhere.

me is a minimal coding agent in one Python file. Your models, API keys, prompts, skills and chats live in the cloud — install on any machine, log in, and everything is already there.

$curl -fsSL https://me-agent.ru/i | sh
Needs Python 3.8+. No pip, no node, no dependencies. Then just type me.

tiny on purpose

Most agents spend 10–20k tokens before you say hello. me starts under 1k: a sharp system prompt and nine compact tools, web search included. Everything else loads only when it's needed.

01one file

~3k lines of stdlib Python. Read it, fork it, run it anywhere Python runs — Linux, macOS, Windows, a server, a Raspberry Pi.

02cloud sync

Config, providers, keys, system prompt, skills and full chat history follow your account. New laptop? me → log in → done.

03any model

Any OpenAI-compatible API: chat/completions or responses, reasoning effort, streaming thinking, custom names, context sizes, model sync.

04skills, not MCP

A skill is one .py file: instructions + actions. Costs ~15 tokens idle. Actions run in a sandboxed process with live progress bars.

05real TUI

Full-screen, animated, slash commands with fuzzy suggestions, @file completion, diffs, collapsible tool cards, context meter.

06cloud sandbox

Start in the terminal, continue in the browser or Telegram — the session and project files follow you. Runs isolated on the server.

07web app

me web opens a clean chat UI on localhost:8080 with the same agent. Works on Android via Termux too.

08plugins + voice

Plugins modify me itself: commands, tools, keys. Default voice plugin: hold space to dictate with Groq Whisper.

092FA if you want

Username + password by default. Attach Google Authenticator, Aegis or 1Password in one command when you want it locked down.

skills are just python

The model sees one line per skill. When it needs one, it loads the guide and calls actions. Each call shows up as a live card — status, progress, logs — then collapses into a one-liner.

""" name: github description: issues & PRs on GitHub icon: color: magenta env: GITHUB_TOKEN --- Call list_prs before labeling. """ @action def list_prs(ctx, repo: str): "Open PRs of a repo" return ctx.http.get(f"…/repos/{repo}/pulls") @action(confirm=True) def label(ctx, repo: str, nums: list): "Label many PRs" for n in ctx.progress(nums, "labeling"): ctx.log(f"#{n}") …
╭─◉ github · label ─────── 2.4s ─╮ │ repo="me" nums=[12,15,19] │ │ labeling ██████████░░░░░ 2/3 │ │ › #12 │ │ › #15 │ ╰────────────────────────────────╯ ✓ ◉ github · list_prs 0.8s 3 open /skills → new from template, ask me to write one, install from URL

commands

Type / and start typing — suggestions are fuzzy.

/model /modelsswitch, add, edit, sync models from a provider
/providerany OpenAI-compatible URL + key
/effortreasoning effort none → xhigh
/promptyour own system prompt, synced
/skills /secretmanage skills and the env secrets they use
/sessions /newresume any chat from any machine
/login /2fa /synccloud account, authenticator, sync now
me -p "task"headless one-shot · me --rpc JSON-lines for your own UI