# Add to your Claude Code skills
git clone https://github.com/duyongan/dots-agentSee how dots-agent compares with popular alternatives.
dots-agent is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by duyongan. 一个会主动发现任务的智能体. It has 50 GitHub stars.
dots-agent's catalog security scan is still queued. You can run an instant dependency and prompt-injection check now with the "Scan for vulnerabilities" button above.
Clone the repository with "git clone https://github.com/duyongan/dots-agent" and add it to your Claude Code skills directory (see the Installation section above).
dots-agent is primarily written in Python. It is open-source under duyongan on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh dots-agent against similar tools.
No comments yet. Be the first to share your thoughts!
Available after the catalog security scan passes.
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
The deep catalog scan for this skill is still queued. Run an instant dependency check now instead.
一个会主动发现任务、主动积累技能的智能体。
包名 dots-agent,命令是 dots(装完就有)。两种用法:命令行,或者 Windows 桌面窗口。
pip install dots-agent
国内镜像(清华、阿里等)同步新包有延迟,刚发布的几天可能报
No matching distribution found。加官方源即可:pip install dots-agent -i https://pypi.org/simple
或者不装,直接在仓库里跑(两种方式命令都通用):
git clone https://github.com/duyongan/dots-agent
cd dots-agent
python -m dots serve
日常使用双击 dots.exe(或者桌面/开始菜单里的 dots 快捷方式)。装好之后它在:
%LOCALAPPDATA%\Programs\dots\dots.exe
dots-<版本>-setup.exe 只是安装器,装一次就行,不是日常打开方式。
安装包由打包命令生成到 release/(该目录不进仓库):
release/dots-<版本>-setup.exe
双击安装。安装器是按用户安装,不需要管理员权限,默认装到
%LOCALAPPDATA%\Programs\dots。安装过程中可以改目录;会创建桌面快捷方式和开始菜单项。
卸载走 Windows 的「设置 → 应用 → 已安装的应用 → dots」。
安装包自带一份嵌入式 Python 和全部依赖(resources/runtime/),机器上没装过 Python 也能跑。
不想安装也可以直接运行 release/win-unpacked/dots.exe。它旁边必须保留 resources/
目录(运行时都在里面),不能只把这个 exe 单独拷走。
自己打包:
cd desktop
bash make-runtime.sh # 首次,或 dots/ 源码改动后
npm run dist # 生成 release/dots-<版本>-setup.exe
cd desktop
npm start
开发模式不打包,直接用系统上的 Python;工作目录是仓库根,所以会读仓库根或 ~/.dots/
下的 dot.toml。
dots init --global # 配一次,以后 cd 到哪都能敲 dots
dots doctor # 体检一下
dots goal "把 inbox 里的东西整理成一份报告"
dots serve --web # 常驻跑起来,同时开活动视图
--global 把配置写到 ~/.dots/,数据和 workspace/ 也跟着放那儿 ——
一份到处用,换个目录不用再 init。不带参数就是 dots init,只写当前目录,
那样每个目录都得配一次。
也可以不带子命令,直接进交互终端。里面直接打字就是和它说话,
/ 开头才是命令:
$ dots
dots> 工作区里现在有什么?帮我看看该先处理哪件事
(它自己去翻文件,然后回你)
dots> /goal "把 inbox 整理成一份周报" ← 交给后台慢慢跑
dots> /ls
dots> /exit
| 输入 | 干什么 |
|---|---|
| 直接打字 | 和它对话。记得上下文,能接着追问 |
/命令 |
命令行那些命令,前面加个 /(见下表) |
/help |
看全部命令 |
/exit |
退出(Ctrl-D、Ctrl-C 也行) |
对话走的是同一个大脑、同一个工作区,但它不是目标:不进 dot ls,
后台 tick 也不碰它,所以不会算进你的目标队列。要让它后台跑,用 /goal。
它想在对话里做 ask 类动作(比如发邮件)时会当场问你 y/n,不走邮件审批。
每条命令都会重新读一遍配置,所以改完 dot.toml 不用退出来重进。
打开 http://127.0.0.1:8765/ 看它在干什么。
想先不配模型试一遍:
dots selftest # 不联网、不调模型
一个窗口装下 dots 的全部日常操作:看它在干什么、给它派活、批准它想做的事、跟它说话。
不用开终端,不用背命令。它和命令行版共用同一份配置、同一个数据库、同一个工作区。
这是最容易卡住的一步:
后端找不到
dot.toml会直接退出,界面顶栏变成「后端已停」,所有按钮变灰。 此时连「生成全局配置」也点不动 —— 那个按钮要求后端已经就绪。
所以第一次使用,先在终端里生成一份全局配置:
pip install -e . # 或按上面的方式安装 dots-agent
dots init --global # 写到 ~/.dots/dot.toml
dots doctor # 体检,确认模型、目录、数据库都没问题
dots init 会自动探测环境变量里的模型 key。没探到就手填 ~/.dots/dot.toml 的 [model] 段。
打包版查找配置的顺序:
%APPDATA%\dots-desktop\dot.toml(也就是应用的当前工作目录)~/.dots\dot.toml你的数据跟着配置文件走:全局配置在 ~/.dots/,数据库和工作区也都在那儿。
双击图标后:
python -m dots bridge;ready,顶栏从「正在启动后端…」变成「值守中」。这 10 秒里输入框和按钮是灰的。不是卡死。不要在这个时候狂点 —— 虽然界面会拦住, 但后端准备好之前发的命令会堆在管道里,顺序不可控。
如果后端起不来,顶栏显示「后端已停」,同时底部弹出输出面板,里面是 Python 的 stderr 尾部(常见的:「没找到配置」「ModuleNotFoundError」「API key 缺失」)。
窗口从上到下五段:
┌────────────────────────────────────────────────────┐
│ 顶栏:dots ● 值守中 每 60s 一轮 [停止] [体检] │
├────────────────────────────────────────────────────┤
│ 待批横幅(只在有事等你时出现) │
├────────────────────────────────────────────────────┤
│ 目标 │ 技能 │ 活动 │
│ (三栏监控区) │
├────────────────────────────────────────────────────┤
│ 对话 │
│ 你/它 的消息…… │
│ [ 说点什么…(回车发送) ] │
├────────────────────────────────────────────────────┤
│ ▴ 全部命令(展开后是一整排中文按钮) │
└────────────────────────────────────────────────────┘
窗口最小 720×520。窗口高度不足 640px 时,命令抽屉会自动收起且把手不可点, 保证上面的内容不被挤没。
后端状态:
| 文字 | 含义 |
|---|---|
| 正在启动后端… | Python 子进程正在导入依赖,按钮全灰 |
| 值守中 | 后端就绪,可以操作 |
| 正在停止… | 正在优雅退出后端 |
| 后端已停 | 进程退出或起不来,详情看输出面板 |
顶栏中间显示:
每 60s 一轮:循环在跑。数字来自 [dot] tick_seconds。循环已停:循环没跑,但后端还活着,你仍然可以手动「跑一轮」、聊天、点命令。右边按钮:
loop_stopped。急着关窗口也没事,
关闭时会先把没跑完的目标放回队列。循环默认在界面启动时自动开启。它的存在感就是「主动」:不用你喊,它每轮自己找活干。
顶栏最右边「体检」= dots doctor。逐项检查:配置文件、读配置、审批规则、依赖、模型、
工作区可写、数据库、事件源、审批通道、技能库、bot、成本上限。每项失败都会给一句
「下一步怎么做」。
只有存在挂起审批时才出现,是整个界面唯一用琥珀色强调的地方。
⚠ a7f3 想发邮件给 alice:「周会改到周四」 (还有 2 个)
a7f3 [批准] [拒绝] b91c [批准] [拒绝] …
send_email 显示收件人和主题,run_shell 显示命令,
其它动作显示工具名。dots approve <token>,
「拒绝」= dots reject <token>。approvals 表,下一轮 tick 自动续跑对应目标。邮件回复和这里点按钮
走的是同一条路径。[approval] timeout_hours(默认 72 小时)自动按拒绝处理。
这比无限等待好 —— 一个永远等不到回复的审批就是一个悄悄卡死的目标。哪些动作需要批,由 dot.toml 的 [approval.rules] 决定:
[approval.rules]
send_email = "ask" # 挂起,等人批
save_skill = "allow" # 直接执行
run_shell = "deny" # 永不执行
没写到的动作一律 ask(默认从严)。
目标 = 一件要它做的事。每行显示:
| 列 | 含义 |
|---|---|
| 编号 | 目标 id,也是交接/日志里的标识 |
| 状态 | 见下表 |
| 目标原文 | 你写的或它自己派生的任务 |
| 结论 | agent 完成时给的 summary |
| 证据 | 工作区路径、邮件 id、URL 等可核对的东西 |
| 数字 | 这个目标累计消耗的 token |
| 时间 | 最后更新的时间(12s / 3m / 2h / 2d) |
| 日志 | 只看这个目标的活动记录 |
七种状态:
| 界面文字 | 内部值 | 含义 |
|---|---|---|
| 待批准 | pending |
agent 自己派生出来的目标,要你点头才跑 |
| 排队中 | ready |
等着被某一轮 tick 领走 |
| 在跑 | running |
正在执行 |
| 停下等你 | interrupted |
撞上审批闸门,等批准/拒绝 |
| 待复核 | pending_review |
它说完成了但没给证据,需要人看一眼 |
| 完成 | done |
完成且给了证据 |
| 失败 | failed |
执行失败 |
「待复核」值得单独说:一个没有证据的结论没法核对,所以不会直接算完成。
面板按钮:
| 按钮 | 等价命令 | 行为 |
|---|---|---|
| 新建目标 | 原生 goal |
弹输入框,写进 goals 表,状态直接 ready(你亲手写进去的,视为授权) |
| 跑一轮 | dots tick |
手动跑一轮就退,调试用。循环运行时按钮置灰;后端也会拦住并发的 tick |
| 全部目标 | dots ls |
输出完整列表(界面里的 60 条只是快照) |
| 活动日志 | dots log |
输出最近 30 条活动 |
「新建目标」走的是 bridge 的原生命令,不是 CLI:不会在输出面板里打印
「跑起来:python -m dots serve」这种在界面里很误导的提示。它固定交给默认 bot dot。
目标列表最多显示最近 60 条,多了会静默截断。
技能是 agent 干活时自己总结出来的可复用流程,存在工作区里,每份是一个目录,
里面有 SKILL.md(YAML frontmatter + 正文)。
面板每行显示技能名和一句话描述。技能库是渐进披露的:只有「名字 + 描述」每轮会进 系统提示,正文等真用到时才读。所以描述被硬性限制在 60 字符,超出部分每轮都会被截断。
| 按钮 | 等价命令 | 行为 |
|---|---|---|
| 学习 | dots learn <材料或描述> |
弹输入框;创建一个 origin=cli:learn 的 ready 目标,让 agent 把材料总结成技能。它不会立刻执行,要等循环或手动跑一轮 |
| 技能库 | dots skills |
输出技能表(名称、描述长度、描述) |
| 整理技能 | dots curate |
创建整理目标,让 agent 合并重复、删除没价值的。会真的删改文件,会先弹确认;技能少于 2 份时命令直接说没什么好整理的 |
每行右侧还有两个小按钮:
dots skill show <名>,在输出面板里显示 SKILL.md 全文。dots skill rm <名>,删除整个技能目录。会弹确认,确认按钮写「删掉」。技能库为空时,面板会提示:它干活时会自己攒,「学习」也能喂材料。
完整流水:收了事件、建了目标、被哪条规则拦下、什么时候跑完、循环启停、错误栈。
数据来源有两份,合并后按时间排序,最多显示最近 120 行:
audit 表的快照(最近 60 条);log / fatal / loop / 协议错误(最多缓存 300 条)。每行是 时间 | 类型 | 详情。出问题时先看这里。
| 按钮 | 等价命令 | 说明 |
|---|---|---|
| 用量 | dots cost |
今日和累计 token 用量 |
| 自检 | dots selftest |
不联网、不调模型,跑四个模块的 demo() + 全套测试,约 30 秒 |
直接打字就是跟它说话,回车发送。它用的是同一个大脑、同一个工作区:让它读文件、 查资料、写东西,它会真的动手,不是只描述打算怎么做。
特点:
thread_id = "chat",checkpoint 存在 dot.db 里,
关掉应用再打开,之前的对话还在。聊天时它如果想做 ask 类动作,会当场弹窗,不走待批队列:
它想干这个
send_email
{ "to": "alice@example.com", "subject": "周会改到周四", ... }
[拒绝] [批准]
对话功能是懒启动的:第一次发消息才建图,要几秒钟。不聊天就不付这个成本。
底部「▴ 全部命令」展开后,是 dots 的全部日常子命令。按钮上写中文,不写原始命令名;
鼠标悬停会说明它做什么,并带出对应的 dots xxx。
展开状态记在本地(localStorage),下次打开还是那样。
| 分组 | 按钮 | 实际命令 | 需要参数 | 二次确认 |
|---|---|---|---|---|
| 配置 | 生成配置 | dots init |
— | — |
| 配置 | 生成全局配置 | dots init --global |
— | ✓ |
| 配置 | 体检 | dots doctor |
— | — |
| 配置 | 自检 | dots selftest |
— | — |
| 目标 | 新建目标 | 原生 goal |
目标文本 | — |
| 目标 | 跑一轮 | dots tick |
— | — |
| 目标 | 全部目标 | dots ls |
— | — |
| 目标 | 活动日志 | dots log |
— | — |
| 审批 | 批准 | dots approve <编号> |
编号(只用行内/横幅按钮) | — |
| 审批 | 拒绝 | dots reject <编号> |
编号(只用行内/横幅按钮) | — |
| 技能 | 学习 | dots learn <内容> |
材料或一句描述 | — |
| 技能 | 技能库 | dots skills |
— | — |
| 技能 | 看技能 | dots skill show <名> |
技能名 | — |
| 技能 | 删技能 | dots skill rm <名> |
技能名 | ✓(按钮写「删掉」) |
| 技能 | 整理技能 | dots curate |
— | ✓ |
| 成本 | 用量 | dots cost |
— | — |
serve 和 bridge 不在抽屉里:常驻循环由顶栏按钮管;再起一个 worker 会抢同一个数据库。
几个按钮的细节:
dot.toml。打包版的当前目录是
%APPDATA%\dots-desktop,开发版是仓库根。文件已存在时不会覆盖。~/.dots/dot.toml,之后在任何目录都能用。[skills] enabled = false 时命令会拒绝。命令跑在独立的命令线程上,串行排队。一条在跑时点下一条,它会在后面等。 输出以流式事件推到输出面板,面板最终以应答里的完整输出为准。 界面给每条命令 180 秒超时;超时只是界面不再等,后端那条命令可能仍在跑完。
命令输出从底部升起,覆盖在界面下方:
「新建目标」不产生输出面板内容(成功时静默,失败时弹面板说明原因)。
界面只放了日常操作。下面这些仍然要用命令行(或 dots 交互终端):
| 功能 | 命令 | 为什么不在界面里 |
|---|---|---|
| 常驻循环 + 只读网页活动视图 | dots serve --web [--web-port 8765] |
循环已由顶栏管;web 是另一条监听 |
| 干跑(不真发邮件,审批打终端) | dots serve --dry-run / dots tick --dry-run |
调试用途 |
| 手动跑一轮(带 dry-run) | dots tick --dry-run |
同上 |
| 指定 bot 接活 | dots goal --bot ops "..." |
界面固定用 dot |
| 按状态筛目标 | dots ls --status running |
界面显示全部 |
| 控制日志条数 | dots log -n 100 [--goal <id>] |
界面固定 30 / 按目标查 |
| 交互终端 | 直接敲 dots |
需要真人在终端前 |
| 指定配置文件 | dots -c path/to/dot.toml ... |
界面固定用自动发现的那份 |
交互终端里,/ 开头是命令(如 /ls、/goal "..."),裸文本是和 agent 说话,
和桌面版「对话区」是同一个能力。
不想用桌面窗口,也可以走浏览器:
dots gui
它在本机 127.0.0.1 起一个页面并自动打开,四个页签:聊天、活动(目标/审批/流水)、
配置(模型预设 + API Key、事件源、SMTP、审批规则