
大家好,我是安东尼(tuaran.me),一名专注于前端与 AI 工程化的独立开发者。 我在建设 「博主联盟」——连接AI产品方与技术博主的品牌增长平台,帮AI产品精准触达开发者,也帮博主拿到推广资源与成长机会。 同时也在做 「前端下一步」——一个聚焦前端、AI Agent 与大模型的技术情报站,帮你从技术革新焦虑中解脱,得到技术转向判断。 这篇文章,希望对你有所启发。

前面几篇都在讲架构和安全,这篇直接动手——把 ZeroClaw 跑成"一个能在 Telegram 群里用的小助手"。10 分钟够用,但前提是你有 Rust 工具链。
注:本文写于 ZeroClaw v0.7 系列,命令行参数和 config 字段可能在后续小版本里调整。出问题先去仓库
examples/对一下。
需要的东西:
预编译版本没覆盖所有平台时,最稳的还是从源码装:
cargo install zeroclaw \
--features "channel-telegram provider-anthropic memory-sqlite tool-shell"几个 feature 的含义:
channel-telegram:编进 Telegram channel 实现provider-anthropic:编进 Claude 的 Provider(按需换成 provider-openai / provider-ollama)memory-sqlite:用本地 SQLite 做记忆(无需另跑数据库)tool-shell:允许 Agent 调用受限的 shell 命令——生产环境慎开装完会有 zeroclaw 这个二进制。
mkdir -p ~/zeroclaw-demo && cd ~/zeroclaw-demo
zeroclaw init这一步会生成:
zeroclaw.toml:主配置secrets/:本地加密的密钥库data/memory.db:SQLite 记忆库编辑 zeroclaw.toml:
[agent]
name = "demo-bot"
system_prompt = "你是一个简洁、友好的技术助手。回答控制在 200 字以内。"
[provider]
kind = "anthropic"
model = "claude-sonnet-4-6"
[[channels]]
kind = "telegram"
# token 从环境变量读,避免落进文件
token_env = "TG_BOT_TOKEN"
# 只响应这些 chat(白名单,强烈建议配上)
allowed_chats = [123456789]
[memory]
kind = "sqlite"
path = "data/memory.db"
# 工具白名单——只允许执行这两条命令
[[tools]]
kind = "shell"
allow_commands = [
"/usr/bin/date",
"/usr/bin/uptime",
]
[security]
# 文件系统白名单
allowed_paths = ["./data"]
# 默认拒绝其它工具
default_policy = "deny"要点:
allowed_chats 一定要填——不填就是任何人都能 @ 你的 bot。allow_commands 写到绝对路径,不要只写 date。system_prompt 是 Agent 的人格,按需调。export TG_BOT_TOKEN="123456:ABC..."
zeroclaw secret set anthropic.api_key
# 粘贴 Anthropic Key,回车zeroclaw secret set 会把密钥加密存到 secrets/ 里,运行时再解出来——不要直接把 key 写进 toml。
zeroclaw run正常的日志大致长这样:
[INFO] zeroclaw v0.7.x starting
[INFO] sandbox: landlock enabled (linux)
[INFO] provider: anthropic / claude-sonnet-4-6 ready
[INFO] channel: telegram polling started
[INFO] memory: sqlite at ./data/memory.db
[INFO] tools: 1 allowed (shell with 2 commands)
[INFO] policy: deny-by-default
[INFO] agent loop ready打开 Telegram,给你的 bot 发"现在几点",它会调 /usr/bin/date,把结果回给你。
最简版 systemd unit(/etc/systemd/system/zeroclaw.service):
[Unit]
Description=ZeroClaw demo bot
After=network-online.target
[Service]
Type=simple
User=zeroclaw
WorkingDirectory=/home/zeroclaw/zeroclaw-demo
EnvironmentFile=/home/zeroclaw/zeroclaw-demo/.env
ExecStart=/usr/local/bin/zeroclaw run
Restart=on-failure
# 再加一层 systemd 沙箱
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/home/zeroclaw/zeroclaw-demo/data
PrivateTmp=true
[Install]
WantedBy=multi-user.target配合 ZeroClaw 自带的 Landlock/Seatbelt,等于双层沙箱——这套配置放生产可以接受。
现象 | 排查方向 |
|---|---|
编译时 OOM | 加 CARGO_BUILD_JOBS=1,或在更大机器上交叉编译 |
Telegram 不响应 | 先确认 allowed_chats ID 没填错;私聊 bot 时 chat ID 是个人 ID,群聊是负数 |
工具一直被 deny | 看日志里的 tool denied: ... 行——99% 是路径或命令没进白名单 |
内存涨得不正常 | 检查 memory 是否开了 auto_summarize,关掉再观察 |
启动慢(不是 < 10ms) | 看是不是首次跑,SQLite 在做 schema 初始化和向量索引构建 |
[[channels]] kind = "discord",同一个 Agent 同时挂 TG + Discord。[[tools]] kind = "mcp"。Channel trait,比如接公司内部 IM。跑通这一版,剩下的就是按"加 Trait → 进白名单 → 重新编译"的节奏迭代。这套节奏也是 ZeroClaw 整个开发体验的味道。
文档锚点:官方 README、Reflex UI 教程。