Skip to content

AHWSWTYCL/myagent

Repository files navigation

  ┌──────────────────────────┐
  │                          │
  │       __o                │
  │     _ \<_    myagent     │
  │    (_)/(_)               │
  │                          │
  └──────────────────────────┘

阅读了 Claude Code 源码后,自己动手实现的一个 AI agent demo,主要用于学习。

⚠️ demo 项目:功能覆盖了 Claude Code 的核心交互模式(TUI + 工具调用 + agent 委派),但不做生产级保障。


目录


前置依赖

  • Node.js >= 18(推荐 20+)
  • npm >= 9

快速开始

# 1. 克隆项目
git clone <repo-url> && cd myagent

# 2. 安装依赖
npm install

# 3. 配置 API Key(任选一个提供商)
#    见下方配置说明

# 4. 运行
npm run agent

配置 API 提供商

项目读取 ~/.claude/settings-using-deepseek.json(硬编码路径,可在 src/config.ts 中修改)中的环境变量来初始化 API 客户端。

选项 A:DeepSeek(Anthropic 兼容接口)

DeepSeek 提供了 Anthropic Messages API 的兼容端点,无需 Anthropic 官方 Key,价格更低。

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://api.deepseek.com/anthropic",
    "ANTHROPIC_AUTH_TOKEN": "sk-你的DeepSeek API Key"
  }
}
字段 说明
ANTHROPIC_BASE_URL DeepSeek 兼容端点 https://api.deepseek.com/anthropic
ANTHROPIC_AUTH_TOKEN 你在 DeepSeek 平台 申请的 API Key

⚠️ 已知限制:DeepSeek 兼容接口不支持 prompt caching(cache_control 会被静默忽略,不影响功能)。

选项 B:Anthropic 官方 API

{
  "env": {
    "ANTHROPIC_API_KEY": "sk-ant-你的Anthropic API Key"
  }
}
字段 说明
ANTHROPIC_API_KEY 你在 Anthropic Console 申请的 API Key
ANTHROPIC_AUTH_TOKEN 二选一,优先级高于 API_KEY
ANTHROPIC_BASE_URL 可选,用于自定义代理或中转地址

选项 C:其他兼容提供商

设置 ANTHROPIC_BASE_URL 指向任意兼容 Anthropic Messages API 的端点即可:

{
  "env": {
    "ANTHROPIC_BASE_URL": "https://your-proxy.example.com/anthropic",
    "ANTHROPIC_AUTH_TOKEN": "你的API Key"
  }
}

认证优先级

ANTHROPIC_AUTH_TOKEN > ANTHROPIC_API_KEY,两者都提供时走 AUTH_TOKEN

配置文件路径说明

  • 默认路径~/.claude/settings-using-deepseek.json
  • 如果想改用 Claude Code 的标准配置文件,在 src/config.ts 中将 settings-using-deepseek.json 改为 settings.json 即可。

运行

命令 说明
npm run agent 启动 TUI 交互模式(默认)
npm run start 启动已编译的生产版本
npm run hello 运行 hello 测试
npm test 运行测试套件

调试模式(Headless)

传入 --debug 参数可直接执行单次 prompt 并输出 JSON 结果:

tsx src/agent.ts --debug "你的prompt"

可选参数:

  • --output <path> 将结果写入文件
  • --auto-yes 静默授权所有工具调用
  • --timeout <seconds> 超时自动中断

示例:

tsx src/agent.ts --debug "列出当前目录的文件" --output result.json --timeout 120

命令参考

在 TUI 中输入以下命令:

命令 说明
!<bash命令> 直接执行 Shell 命令,结果推回对话
!mcp <子命令> MCP 服务器管理
/help 显示帮助信息
/skill 管理技能(激活/停用)
/task 管理任务看板
/retro 执行回顾反思
/token 查看当前会话 Token 用量
/schedule 管理定时任务
/voice 语音播报 LLM 消息(仅 macOS)

语音

语音播报(TTS)

LLM 回复完成时朗读消息内容,仅 macOS(依赖系统 say 命令,无需额外安装)。

子命令 说明
/voice on 开启播报
/voice off 关闭播报
/voice stop 立即打断当前播报(按 Esc 也会打断)
/voice voice <name> 切换音色,例如 /voice voice Tingting
/voice rate <wpm> 调整语速(每分钟单词数,50-500)
/voice say <text> 立即朗读一段文本(用于试听)

终端运行 say -v '?' 可查看全部可用音色。中文推荐 Tingting

语音输入(STT)

直接使用 macOS 系统听写:在 系统设置 → 键盘 → 听写 里启用并设置触发键(默认 Fn 双击)。在输入框中按下触发键即可口述输入文字。


项目结构

src/
├── agent.ts            # 主入口,TUI + 调试模式
├── client.ts           # Anthropic SDK 客户端 + 重试逻辑
├── config.ts           # 配置加载(API Key / Base URL)
├── prompt/             # System Prompt 构建
├── memory/             # 自动记忆系统
├── tools/              # 工具定义(read/write/bash 等)
├── agents/             # Sub-agent 系统
├── skills/             # 技能系统
├── hooks/              # 生命周期钩子
├── commands/           # 斜杠命令
├── tui/                # 终端 UI(React + Ink)
├── scheduler/          # 定时任务调度
├── tasks/              # 任务看板系统
├── mcp/                # MCP 协议支持
├── todos/              # Todo 面板
└── attachment/         # 附件队列管理

项目受 Claude Code 启发,代码结构参考了其核心设计思路,但做了大量简化和面向学习的改动。


GitHub Bot

本项目支持通过 GitHub Actions + @myagent 自动修复 issue 并提 PR。详见 .github/workflows/myagent-bot.yml

About

learning agent

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors