关于 taken
`taken` 是只读命令行工具和 MCP 服务,可在认领 GitHub 问题前检查其是否仍可参与。它综合问题时间线、评论、指派情况、仓库活跃度和贡献政策,并给出附证据的判定。
主要功能
- 01检查关联的拉取请求和指派情况
- 02扫描评论中的认领意向
- 03读取贡献政策和仓库活跃度
- 04依据证据给出 GO、TAKEN 或 CAUTION
- 05扫描仓库并发现候选问题
适用场景
- 01认领前检查问题是否仍开放参与
- 02寻找适合贡献的未解决问题
- 03针对目标问题查看仓库状态
MCP 相关
MCP 服务提供 `check_issue`、`scan_repo` 和 `discover_candidates` 工具。它通过已认证的 GitHub CLI(`gh`)执行只读 API 调用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| me | any | 否 | |
| repo | string | 是 | |
| owner | string | 是 | |
| graphql | boolean | 否 | 强制使用 GraphQL 路径。默认:根据身份验证状态自动选择。 |
| issue_number | integer | 是 | |
| pr_idle_days | any | 否 | 认领过期衰减:关联 PR 不活跃多少天后,TAKEN 会降为 CAUTION。默认值:90。 |
| claim_silence_days | any | 否 | 过时认领衰减:简单问题被一个认领阻塞并显示为 CAUTION 的天数;认领者有活动时计时重置。默认值:7。 |
| persistent_session | boolean | 否 | 强制使用持久会话 GraphQL 路径;仅在内存中保存来自 `gh auth token` 的令牌。默认值:根据身份验证状态自动选择。 |
| claim_silence_complex_days | any | 否 | 过时认领衰减:复杂问题被一个认领阻塞并显示为 CAUTION 的天数。默认值:14。 |
详细介绍
taken?
taken? 会在你主动接手 GitHub 问题之前,先回答一个问题:它已经有人接手了吗?
简单来说,它会在你开始工作前检查问题:是否仍可供贡献者参与?是否已经有人在处理?仓库的响应是否及时,能否让你的 PR 得到评审?
无需安装即可试用:在线控制台会在浏览器中运行实际检查。
它旨在解决这样一个问题:GitHub 会在问题时间线中显示“关联了拉取请求”事件,却不会在评论中显示。你可以读完问题的所有评论,却仍然错过已经有人为它开了 PR 这一事实。taken? 会检查时间线、扫描评论以查找认领工作的人、查看受指派者、读取 CONTRIBUTING.md 了解 AI 贡献政策,并检查仓库是否仍然活跃。然后它会给出 GO、TAKEN 或 CAUTION 的判定,并列出依据。
要求
- Python 3.10 或更高版本
- 已完成身份验证的 GitHub CLI(
gh)
taken? 只会通过你自己的 gh 登录信息发起只读 API 调用。它不会获取或存储令牌,也不会向 GitHub 写入任何内容。
安装
uv tool install taken-gh
或者使用 pipx:
pipx install taken-gh
然后运行:
taken owner/repo#123
也可以使用完整的问题 URL:
taken https://github.com/owner/repo/issues/123
判定结果
TAKEN 的优先级高于 CAUTION,CAUTION 的优先级高于 GO。
- TAKEN:问题已关闭、有未关闭的 PR 与其关联,或已有受指派者。
- CAUTION:评论称有人想接手(软性认领,对方可能已经不再处理);关联的 PR 已合并,但问题仍未关闭;仓库有需要遵守的 AI 政策;仓库看起来不活跃;或者新手友好标签同时伴有冗长的讨论串或设计级别的标签(开始前值得先浏览一下)。
- GO:以上情况均不符合。
认领者扫描是基于评论文本的启发式判断,并非确凿证据。判定结果始终会列出依据,供你自行判断。
退出代码:0 表示 GO,1 表示 TAKEN,2 表示 CAUTION,3 表示发生错误(目标或标志无效、没有 gh、API 错误)。
示例
已有 PR 正在修复的问题:
$ taken Exodus-Privacy/exodus#300
taken? Exodus-Privacy/exodus#300
verdict: TAKEN
...
why:
- open PR #700 already covers this: https://github.com/Exodus-Privacy/exodus/pull/700
已有受指派者的问题:
$ taken chahe-dridi/vscode-agent-bell#200
taken? chahe-dridi/vscode-agent-bell#200
verdict: TAKEN
...
why:
- assigned to: dk5488
干净的问题(已过滤掉你自己发布的认领评论):
$ taken snowflakedb/snowflake-cli#3145 --me RogueAlg0
taken? snowflakedb/snowflake-cli#3145
verdict: GO
...
why:
- no linked PRs, no assignees, no claimants, repo is active
实用标志
--json:以 JSON 格式输出完整结果,而不是人类可读的摘要--me LOGIN:扫描认领者时忽略你自己的评论--no-cache:绕过一小时的 API 响应缓存--rest:强制使用 REST 获取路径(默认情况下,已登录用户使用 GraphQL)--health:针对单个仓库生成维护者报告,而不是贡献者判断
taken --help 会列出所有选项。
批处理模式和仓库扫描
向 taken 提供多个目标,它会为每个目标输出一行判断结果:
taken owner/repo#123 owner/repo#124 --me mylogin
TAKEN owner/repo#123 assigned to: dk5488
GO owner/repo#124 no linked PRs, no assignees, no claimants, repo is active
单独的 owner/repo 会自动扫描该仓库:逐一检查其中未关闭的问题
(按最近更新时间从新到旧排列,不包括 PR):
taken django/django --label "good first issue" --limit 10
API 响应会缓存一小时,缓存目录为 ~/.cache/taken
(可通过 TAKEN_CACHE_DIR 覆盖),因此重复扫描的开销很低。
可选择启用的 REST 传输(TAKEN_TRANSPORT=httpx)会保留 JSON
对象和数组,包括空列表。响应 ETag 会与任一类型的数据一同缓存:缓存过期后,
304 Not Modified 会复用缓存的正文并刷新其 TTL。默认的子进程传输方式保持不变。
发现模式
taken --discover 会在 GitHub 上查找适合贡献的候选项:它从 GitHub 的问题搜索中获取原始
候选项,对每个候选项运行 taken 的完整验证,并对通过验证的候选项排序。列表中只会
包含 GO 判断结果,并根据聚合器不会筛选的信号评分:维护者的响应速度。
taken --discover --language python --min-contributors 3 --limit 10
6 octocat/hello-world#42 maintainer replied; updated 1d ago; repo pushed 0d ago
4 octocat/other-repo#7 updated 3d ago; repo pushed 2d ago
每行都会说明对应的评分。候选项会并行验证
(默认使用 8 个工作线程;可通过 --jobs N 调整)。
MCP 服务
taken 也可作为 MCP 服务运行,因此编码 Agent 可以通过调用工具来检查问题,
而无需通过 shell 调用 CLI。配置方式相同:需安装并完成身份验证的 gh,
并通过你自己的登录信息进行只读 API 调用。
uvx --from "taken-gh[mcp]" taken-mcp
提供三种工具:check_issue、scan_repo、discover_candidates。已在官方
MCP Registry 中发布,名称为
io.github.RogueAlg0/taken。
开发
uv sync # install dev tools (ruff, pytest)
uv run pytest
uv run ruff check
uv run ruff format --check
AI 辅助
本项目在 AI 辅助下构建,并对此公开说明。每项贡献都会由其作者审查并理解后才会合并。
安全
请参阅 SECURITY.md,了解受支持的版本以及报告漏洞的方式。请使用 私密漏洞报告渠道,而不要提交公开问题。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。