ethos
General-purpose AI is fine for small talk, mediocre at real work. Ethos gives you a team of specialists — researcher, engineer, reviewer — each with its own tools, memory, and model. Same conversation across Slack, Telegram, and your terminal. Boundaries the prompt can't talk its way out of.
mit · node 24 · typescript strict · zero deps in the types layer
One agent core with three orbiting personalities — researcher, engineer, reviewer. Every call the AgentLoop makes is shaped by a personality: hover or click a mark to see its model, tagline, and curated toolset.
Three specialists, one session. Switch personality mid-conversation; memory and boundaries follow.
One conversation, three specialists: the researcher finds a race condition, the engineer patches it, and the reviewer checks the diff — but is refused write access because write_file is not in its toolset.
A generic agent has every tool. That is its problem. The toolset is the union of every task you might ever do, which is a security surface, a cost surface, and a quality surface. Voice is mush. Memory is a pile.
Personalities invert it. Each has a curated toolset, a first-person identity (SOUL.md), and a memory scope. Researcher gets the 8 tools it needs. Reviewer gets 3 and a per-personality memory scope so its code-review notes never leak into the engineer's session.
Specialization, not configuration. Personality is architecture, not a system prompt in a costume.
routing: claude-fable-5 · gpt-5.6-sol · glm-5.2 · deepseek-v3.2 — per personality, set in config.yaml
Every component is an interface in @ethosagent/types, injected at construction. Personality decides which tools enter the loop and which model handles the turn.
user input flows into AgentLoop.run's nine steps — session, hooks, memory, prompt, agentic loop — and streams out as an AsyncGenerator of AgentEvents to cli, tui, vscode, email, telegram, and slack surfaces.
OpenClaw users migrate in one command. Any clawhub skill installs into Ethos directly — the catalogue becomes your toolset, no forks, no shims.
$ ethos claw migrate --dry-run # preview the plan, then re-run without --dry-run
Memory, skills, platform tokens, and API keys copy in place. Your SOUL.md becomes a migrated personality; built-in matches resolve automatically. Idempotent — safe to re-run.
$ ethos skills install steipete/slack # any slug clawhub serves, just works
The OpenClaw-compat layer parses SKILL.md frontmatter, environment substitutions, and OS gates — so the full clawhub catalogue runs unmodified inside your personality's toolset.
Every surface is a thin adapter in front of the same AgentLoop. Switch windows mid-conversation; the session comes with you.
one AgentLoop behind every surface — same sessions, same memory, same personality boundaries.
Detached jobs, schedules, skills, and plugins all run through the same AgentLoop and the same personality boundaries — nothing gets a side door.
delegate_task with detached: true returns a job id immediately — no waiting on the result. Jobs live in a durable store and survive restarts. Check in with task_status, task_result, task_logs, or task_cancel; each job carries its own max_cost_usd budget.
Add cron to a personality's toolset.yaml and recurring runs — daily briefings, weekly reports — fire through the agent loop and deliver to your configured channels. Needs the long-lived ethos gateway start.
Install from ClawHub, or point at skill libraries already on disk — Claude Code and OpenClaw formats parse as-is. Invoke with /skill-name in chat, or let them auto-load when relevant.
npm packages or local paths shipping tools, hooks, and injectors. Each personality opts in explicitly — a plugin unlisted in its config.yaml stays dormant.