A multi-skilled agent with planning and reflection capabilities, powered by Qwen-MAX.
Tinbot/
├── agent.py # 主程序入口
├── .env # 全局配置
├── core/
│ ├── config.py # 配置参数
│ ├── logger.py # 日志功能
│ ├── skill_manager.py # Skill自动注册功能
│ ├── state.py # 状态管理功能(断开重开不丢失)
│ ├── vision.py # VL功能
├── skills/ # Skills目录(模块化技能)
│ ├── __init__.py # 包初始化文件
│ ├── base.py # Skill基类
│ ├── system_info.py # 获取系统信息Skill
│ ├── browser_dom.py # 获取浏览器DOM信息Skill
│ ├── browser.py # 浏览器基本操控Skill(滑动、点击)
│ ├── eye.py # 主动式接管屏幕检测Skill
│ ├── vscode_write.py # VS Code写代码Skill
│ ├── run_python.py # 运行Python Skill
│ ├── list_files.py # 列出文件Skill
│ ├── computer_control.py # 电脑基础操作Skill
│ ├── email_visual.py # 邮件相关操作Skill
│ └── vision_engine.py # 多模态识别Skill
├── memory/ # Memory目录(状态管理数据库保存路径)
│ ├── state.db # 状态sqllite数据库
└── README.md
参考了 MoltBot 和 Manus 的设计理念:
- ✅ 每个 Skill 是独立的文件 - 便于维护和扩展
- ✅ 统一的基类接口 - 所有 Skill 都继承自
Skill基类 - ✅ 即插即用 - 新增 Skill 只需添加文件并注册
- ✅ 类型安全 - 使用 JSON Schema 定义参数
python agent.py编辑 agent.py 的最后几行:
user_task = "你的任务描述"- 文件:
skills/vscode_write.py - 功能: 通过 GUI 自动化将代码写入 VS Code
- 参数:
filename: 文件名code: 完整代码
- 文件:
skills/run_python.py - 功能: 执行 Python 文件,自动安装缺失依赖
- 参数:
filename: 要运行的文件
- 文件:
skills/list_files.py - 功能: 列出当前目录的所有文件
- 参数: 无
在 skills/ 目录下创建 your_skill.py:
from skills.base import Skill
class YourSkill(Skill):
def __init__(self):
super().__init__()
self.name = "your_skill"
self.description = "功能描述"
self.parameters = {
"type": "object",
"properties": {
"param1": {"type": "string", "description": "参数说明"}
},
"required": ["param1"]
}
def execute(self, param1: str) -> str:
# 你的逻辑
return "执行结果"编辑 skills/__init__.py,添加:
from skills.your_skill import YourSkill
__all__ = [
# ...
'YourSkill',
]编辑 agent.py 的 AgentBrain._register_skills():
def _register_skills(self):
self.skill_manager.register(VSCodeWriteSkill())
self.skill_manager.register(RunPythonSkill())
self.skill_manager.register(ListFilesSkill())
self.skill_manager.register(YourSkill()) # 新增这行python agent.pyAgent 会自动识别新 Skill!
| 特性 | MoltBot/Manus | 本项目 |
|---|---|---|
| Skill 模块化 | ✅ TypeScript | ✅ Python |
| 独立的 Skill 文件 | ✅ | ✅ |
| 统一基类 | ✅ | ✅ |
| JSON Schema 参数定义 | ✅ | ✅ |
| 自动发现工具 | ✅ | ✅ |
| GUI 自动化 | ❌ | ✅ |
class YourSkill(Skill):
def __init__(self):
self.name = "skill_name" # 技能名称(唯一)
self.description = "..." # 功能描述(给 LLM 看)
self.parameters = {...} # JSON Schema 格式def execute(self, **kwargs) -> str:
"""
执行逻辑
Returns:
str: 必须返回字符串结果
"""
pass-
返回值格式化: 使用 emoji 和清晰的文本
return "✅ 操作成功" return "❌ 操作失败: 原因"
-
错误处理: 捕获异常并返回友好信息
try: # ... except Exception as e: return f"❌ 错误: {str(e)}"
-
参数兼容: 支持常见的参数名变体
def execute(self, filename=None, file=None): filename = filename or file # 兼容两种写法
WebSearchSkill: 网络搜索WebFetchSkill: 获取网页内容APICallSkill: 调用 REST API
ReadFileSkill: 读取文件内容EditFileSkill: 编辑文件(支持增量修改)DeleteFileSkill: 删除文件
GitCommitSkill: Git 提交GitPushSkill: Git 推送GitStatusSkill: 查看 Git 状态
ImageGenSkill: AI 生图TextToSpeechSkill: 文字转语音TranslateSkill: 翻译
A: 检查三个地方:
skills/__init__.py是否导出agent.py是否注册- Python 缓存清理:
rm -rf skills/__pycache__
A: 使用 SkillManager 的自动映射功能,或在 Skill 内部做兼容处理
A: 在 Skill 内部添加 print_log() 输出调试信息
MIT License