首次运行会提示设置 WAKU_PROVIDER 和对应 API key,不配无法对话;dashboard 默认占用 localhost:7777 端口;连接 Waku Memory 需额外安装 waku-agent[mcp] 并在浏览器登录
waku-agent
ShenSeanChenMIT活跃维护本地优先的 AI agent 运行框架,把循环、记忆和评测都写成可读的代码,方便你完全掌控自己的个人助理。
Waku Waku! Waku Agent is a local-first AI agent harness you actually own, including loop, memory, eval, all in code built to stay legible as it grows.
pip install waku-agent
waku
waku dashboardREADME 未说明显存或 GPU 要求;模型通过 Anthropic、OpenAI、Gemini 等云端 API 调用,需自备对应 API key
本地优先的个人 AI 助手,循环、记忆、评测全部用可读的 Python 代码实现,归你自己所有
本地优先的 AI agent 运行框架,把循环、记忆和评测都写成可读的代码,方便你完全掌控自己的个人助理。
核心能力
- 约 95 行纯 Python 实现 reason-act 主循环
- 语义、情景、程序性三层记忆,用 SQLite 单文件存储
- 记忆门控决定是否记住,整合流程决定保留什么
- 内置确定性测试与 LLM-as-judge 双轨评测和发布门禁
- 本地 dashboard 实时展示每条消息在 harness 中的流转
容易踩的坑
- v0.1.9最新正式版2026-10-08 · 2026-10-08 19:44 UTC
waku-agent 0.1.9: see, grade and pay for every turn
What changed for you
- Observability: each turn is a trace with a readable waterfall, and an Evals page shows what CI passed on your release.
- Turn evals: five checks grade your own turns, and an on-demand AI judge reviews a turn you pick.
- treg: every local Waku Agent can call treg, the Tools tab leads with the endpoints a turn used, and a hosted tenant can bring their own treg key.
- Memory: each fact is written to
~/.waku/memory/<id>.md, and a reply says "saved" only when Waku Memory has the fact. - Jev: it decides which memories earn a slot, and the Judgment Arena races Jev against frontier models.
Upgrade:
pip install -U waku-agentStarring the repo does not notify you of releases. To hear about the next one: Watch, then Custom, then Releases.
What's Changed
- ci: every release also becomes a GitHub Release by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/197
- Add AGENTS.md rulebook and docs/context; CLAUDE.md imports it by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/198
- Move video and experiment material into lab/; stop shipping it by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/199
- Add waku connect waku-memory and waku skill export by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/200
- Slim the README to a landing page; move the detail into docs/ by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/201
- Add lab topic one-memory-every-agent (Grok Bot, Muse Code, Waku Memory) by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/202
- Lab one-memory-every-agent: pair Grok Bot with Meta's Muse agent by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/205
- Lab one-memory-every-agent: correct claims against official docs by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/207
- Add the Judgment Arena: race Jev against frontier models on typed questions by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/212
- Link the rail brand and add waku.one beside GitHub by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/215
- Move providers into waku/providers.toml so adding one is a table and a logo by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/216
- Remove the CSS left behind by three features cut during the day by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/217
- Make local waku hostable: bind host, the platform provider, honest idle, pinned routes by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/218
- Let a lockfile refresh be its own pull request by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/219
- Refresh uv.lock against the extras pyproject.toml already declares by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/220
- Open hosted/: the platform's tenant logic, offline, behind a boundary that cannot be crossed by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/221
- Make the chat composer wrap and grow instead of clipping long messages by @sathudeva7 in https://github.com/ShenSeanChen/waku-agent/pull/210
- Build the tenant image, the container template, and the spawner that makes one container per tenant by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/222
- Require a test to be proved able to fail, and name the three shapes that cannot by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/224
- Give every tenant their own origin, one way in, and one writer for tokens and containers by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/226
- Install hosted waku on one VM, upgrade it, back it up, restore it, and write down how by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/228
- Put hosted/ under the Elastic License 2.0 by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/230
- Pin the
- v0.1.82026-09-13 · 2026-09-13 22:26 UTC
查看更新说明
What's Changed
- license: the Waku brand assets are not MIT by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/194
- dashboard: cards, buttons, actions and menus from ui.js by @etsai0603 in https://github.com/ShenSeanChen/waku-agent/pull/192
- fix: "waku connect google" exists, and so does /connect google by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/195
- release: 0.1.8 by @ShenSeanChen in https://github.com/ShenSeanChen/waku-agent/pull/196
New Contributors
- @etsai0603 made their first contribution in https://github.com/ShenSeanChen/waku-agent/pull/192
Full Changelog: https://github.com/ShenSeanChen/waku-agent/compare/v0.1.7...v0.1.8
- v0.1.1v0.1.1 — agent graphs2026-07-31 · 2026-07-31 13:47 UTC
查看更新说明
pip install waku-agentWhat's new:
waku/graph/A stdlib graph engine, and the same job done two ways so you can read them against each other.
A loop discovers what to do next. A graph pre-determines what happens next.
waku briefthe morning briefing as a LOOP — one prompt, the model works out which tools to call waku gatherthe same job as a GRAPH — GitHub, web, calendar and memory fetched together, then one digest Measured on a live run:
node_start scan_github scan_web scan_calendar scan_memory node_end scan_github 1500ms node_end scan_web 515ms node_end scan_calendar 5ms node_end scan_memory 6msFour starts before a single finish. The wave costs its slowest branch, not the sum.
The graph front door is off by default (
WAKU_GRAPH_WORKFLOWS=1) and fails open to the plain loop, so it cannot make Waku worse.gatherproposes and never acts — its model call passes no tool schemas, so it cannot send or merge anything; it drafts into the outbox for you to read.Also: read-only GitHub via the
ghCLI (WAKU_GH_TOOL=1, no token stored).Fixed
v0.1.0's wheel shipped no skills — procedural memory was silently absent for anyone who installed from PyPI. Fixed and pinned by a test. Note that the
v0.1.0git tag predates the fix; v0.1.1 is the first tag whose code matches its wheel.Thanks
@Tian-Timm, @wilenWang, @drakegriffith, @c436zhan, @likweitan, @luminary19, @epicnellson, @AllenHK, @neoneye.
Full changelog: https://github.com/ShenSeanChen/waku-agent/compare/v0.1.0...v0.1.1
- v0.1.0v0.1.0 — the first tagged release2026-07-26 · 2026-07-26 20:29 UTC
查看更新说明
The first tagged release. waku has been usable for a while — this marks a point people can pin, and credits the contributors who got it here.
What waku is
A local-first personal assistant, in code you can read in an afternoon. Four pillars, none of them hidden behind a framework: Harness · Loop · Memory · Eval/LLM-Ops. Your memory is one SQLite file on your own machine.
git clone https://github.com/ShenSeanChen/waku-agent && cd waku-agent uv venv && uv pip install -e . cp .env.example .env # pick a provider, paste one key uv run waku # or: uv run waku dashboardIn this release
Talk to it from anywhere — CLI, a local dashboard at
:7777, voice with a wake word, Telegram, and now Discord.Memory that decides for itself — semantic (FTS5), episodic and procedural, with a retrieval gate that decides whether to remember and a consolidation pass that decides what to keep. Episodes can live in SQLite or Notion.
Bring your own model — Anthropic, OpenAI, Gemini, DeepSeek, MiniMax, Kimi, GLM, xAI or OpenRouter. One dialect in the loop, a small adapter for the rest, and you can switch model live from the dashboard.
The Arena — race one message through every model at once, in isolated homes, and score them on completion, an LLM referee, latency and real cost. Each model's knowledge-cutoff date is shown, so stale world-knowledge doesn't read as low capability.
Evals built in — deterministic tests and LLM-as-judge side by side, behind a release gate.
Calendar — local SQLite +
.icsstay the source of truth, with opt-in write-through to Apple Calendar or Google Calendar.Experimental: sub-agent delegation — behind
WAKU_EXPERIMENTAL=1, waku can hand a coding job to pi running on the same model, and stream its work into the dashboard live. Its tokens land on the same ledger, so a delegated run isn't free.Thanks
Community contributions in this release, from eight people who mostly opened their first PR here: gateways, encoding fixes across the whole tree, the trace viewer and its multi-day mode, a Notion memory backend, Google Calendar sync, model knowledge-cutoffs, and the first community skill.
@Tian-Timm · @wilenWang · @drakegriffith · @luminary19 · @c436zhan · @likweitan · @Dodothereal · @floze-the-genius · @epicnellson · @junlov · @maanas1234
Known gaps
waku/ops/dashboard.pyis a 1,695-line god file. Splitting it is the next piece of work.- Google Calendar auth still goes through the gcloud CLI; a real in-app OAuth flow is #31.
- Integrations are configured by hand-editing
.env. A proper Connections surface is #32.
MIT. Built alongside Sean's AI Stories.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
waku-agent
Your own AI assistant. On your laptop. In code you can read in an afternoon.
Meet Waku — a local-first personal assistant that shows the four pillars behind every serious agent: Harness · Loop · Memory · Eval/LLM-Ops. No frameworks hiding the good parts. Built by seanchen.io.
- Local-first. Your memory is one SQLite file. Open it. Read it. It's yours.
- Memory is the hero. Semantic + episodic + procedural — with a gate that decides whether to remember, and a pass that decides what to keep.
- The loop is ~95 lines of plain Python. Step through it.
- Watch it think. A local dashboard lights up every message as it flows through the harness.
- Eval built in. Deterministic tests and LLM-as-judge, side by side, with a release gate.

The system-design whiteboard from the series. Every box maps to a file — see the architecture.
▶ Watch the 20-min code walkthrough — the loop, the memory pillars, the evals, the Telegram gateway and the "Waku Waku" wake word, live.
Waku Memory — the same memory in Claude Code, Codex, Grok Bot and this agent: waku.one · docs
YouTube · X · LinkedIn · Instagram · TikTok · Discord · 哔哩哔哩 · 小红书 · 抖音
Buy me a coffee — it keeps this repo (and the videos) coming
Quickstart
Just want to run it:
pip install waku-agent
waku # talk to your Waku in the terminal
waku dashboard # …or the browser cockpit → localhost:7777
It will tell you which key to set the first time. Want to read the code (the point of this repo) or contribute — clone it instead:
git clone https://github.com/ShenSeanChen/waku-agent && cd waku-agent
uv venv && uv pip install -e . # create the env + install the `waku` command
cp .env.example .env # pick a provider, paste ONE key
uv run waku # talk to your Waku in the terminal
uv run waku dashboard # …or the browser cockpit → localhost:7777
Now try it. "Remember that Alex prefers morning meetings." Quit. Restart.
"Book a catch-up with Alex on Friday." → it remembers, and books 9am. Your memory is one
file: ~/.waku/state.db, the same from every folder.
Use the model you already pay for. Anthropic (default), OpenAI, Gemini, DeepSeek, MiniMax,
Kimi, GLM, OpenRouter (one key, hundreds of hosted models), OpenCode Zen, or OpenCode Go —
set WAKU_PROVIDER=, paste the key, done. One dialect in the loop;
a ~60-line adapter handles the rest.
New to it? Getting started walks the whole setup, with a check at the end of every step.
Connect Waku Memory
Waku's own memory is local. Waku Memory is the hosted memory you share across agents: save something in Claude Code, recall it here.
pip install 'waku-agent[mcp]' # in a checkout: uv pip install -e '.[mcp]'
waku connect waku-memory # or /connect waku-memory in the dashboard chat
waku skill export --to claude,codex # carry Waku's skills to Claude Code and Codex too
Your browser opens once to sign in. To connect Claude Code, Codex, Hermes or Grok Bot to the
same memory, see integrations.
For live data when it researches, waku connect treg (or /connect treg) signs in to your own
treg account the same way; see integrations.
What's inside
| Pillar | In one line | Read more |
|---|---|---|
| Harness | gateways (terminal, dashboard, voice, Telegram, Discord, WhatsApp) and tools around one loop | architecture |
| Loop | ~95 lines of plain Python: reason, act, repeat, with two ways to stop | the tour |
| Memory | semantic, episodic and procedural (skills); a gate decides whether to remember, consolidation decides what to keep | the tour |
| Eval / LLM-Ops | deterministic tests and LLM-as-judge side by side, a release gate, a trace for every turn | evals |
How is this different from ChatGPT or Claude Desktop? Those are products you use. This is a codebase you own: the loop, the memory schema, the gate and the eval harness are all yours to read and change. Versus the big open-source assistants (OpenClaw, Hermes)? Same architecture, 1/100th the code.
Docs
| Read | For |
|---|---|
| Getting started | installing, the first run, connecting Waku Memory |
| The tour | the dashboard, things to try, the loop, graph workflows, skills |
| Architecture | every box on the whiteboard, and the file behind it |
| Integrations | voice, Telegram, calendars, MCP servers, Waku Memory |
| Commands | every waku and make command |
| Evals & tracing | the two kinds of eval, the Docker tier, the release gate, traces and spend |
| Roadmap | what is live, what is still a skeleton, upgrade paths |
| Whiteboards | the editable system-design charts from the videos |
| lab/ | Waku meets other agents and models: the video experiments |
| AGENTS.md · CONTRIBUTING.md | the rules, and how to send a PR |
Community
Star the repo, join the Discord, and grab a good first issue — that link is the live list, so it's always current. Gateways, memory backends and community skills are all shaped to be first PRs; the easiest needs no Python at all (see contributing a skill).
Comment on an issue before you start and it gets assigned to you, so two people never build the same thing.
Also from me
- launch-mvp-stripe-nextjs-supabase — NextJS + Supabase + Stripe, everything you need to ship a SaaS.
- AutoManus.io — my AI startup: a sales lead manager for made-to-order products. It embeds where conversations already happen (WhatsApp, email, web chat) to capture inbound, automate follow-ups and kill CRM busywork. Pre-seed backed by Character VC. (AutoManus Discord)
Code is MIT — see LICENSE — except hosted/, which is Elastic
License 2.0: run it yourself, including commercially, but not as a service for
others. See hosted/LICENSE. waku/, the harness itself and
everything PyPI ships, is MIT. The Waku name, mark and design system belong to
AutoManus Technologies, Inc. and are not MIT — see LICENSE-BRAND. Built by @ShenSeanChen
(YouTube · X).