Nico0713520 / dsh-github-cli

Listed

Reuse your local GitHub CLI (gh) inside DeepSeek Harness — read-first, per-command allowlist, zero token setup.

mainOther View source

Installation

npx -y @deepseek-ai/dsh plugin --profile web add github:Nico0713520/dsh-github-cli

This installation command is an unverified starting point generated from the GitHub repository address.

README

Maintainer-authored documentation snapshot.

View on GitHub ↗
Commit 529b2d9Synced Aug 18, 2026

dsh-github-cli

把你的 GitHub CLI (gh) 直接接进 DeepSeek Harness —— 零 token 配置,只读优先。

CI License: MIT dsh-plugin

English · 中文

如果你已经用 gh 登录过这台机器,这个插件装完就能用。你的 Agent 可以直接查 PR、看 issue、搜代码、跑 gh api —— 用你已有的账号,不用再配任何 token。

为什么是 gh,而不是 GitHub MCP server?

DeepSeek Harness 支持 MCP,GitHub 也有官方 MCP server。但它们不是一回事:

dsh-github-cli(本插件)GitHub MCP server
登录复用你现有的 gh 登录(含企业版/SSO)需要单独 PAT 或 OAuth 流程
命令面每个 gh 子命令 + gh api只有精选的几个工具
写保护逐命令白名单(默认只读)工具级 scope
配置零配置、零 token装 server + 配 transport + 配 token

一句话:gh 是你已经信任、已经登录的那把钥匙,这里只是把它递给你的 Agent。

特性

  • 零配置 —— 复用 gh 本机登录态,不用生成、粘贴、管理任何新 token
  • 只读优先 —— 默认只放行安全命令(view/list/status/search/checks/diff),写操作需显式开启
  • 凭据永禁 —— auth tokensecretssh-key 等命令即使开了全访问也拒绝,杜绝密钥泄露进对话
  • 无注入 —— execFile + 参数数组(shell: false),不存在 shell 注入
  • 企业友好 —— 已登录的 enterprise / SSO 账号直接可用
  • 18 项单元测试 + 三版本 Node CI —— 每个命令边界都有测试兜底

30 秒上手

# 1. 安装(GitHub 源,立即可用)
dsh plugin --profile web add git+https://github.com/Nico0713520/dsh-github-cli.git

# 2. 重启 dsh web(让插件作为 bundle 层生效)
# 3. 在对话里直接问

安装后,在任意会话里:

你:这个仓库有哪些未关闭的 PR?
Agent:→ 执行 gh pr list --state open -R deepseek-ai/deepseek-harness

你:帮我看看 PR #123 改了什么
Agent:→ 执行 gh pr diff 123

你:gh 在这台机器上登录了没?
Agent:→ 执行 gh_auth_status

工具

工具作用
gh_cli_run以参数数组执行任意 gh 子命令
gh_auth_status检查 gh 是否已安装并登录

安全模型

这是本插件与其他 gh 封装最核心的区别 —— 每个命令都落在三个层级之一:

层级示例行为
🟢 只读白名单repo view/listpr view/list/status/diff/checksissue view/listsearch *gist view/listrelease view/listrun view/listworkflow view/listapi(仅 GET)、auth statusversionhelp默认放行
🟡 写操作pr create/mergeissue closerepo deleterelease createapi --method POST/DELETEapi -f/--field/--input需配置 fullAccess: true 才放行
🔴 永禁auth login/logout/token/refreshsecret *ssh-key *任何情况都拒绝

为什么要这样设计

  • 只读命令不会改动 GitHub 状态,按需执行是安全的。
  • 写命令会改变真实世界fullAccess 是一个明确、写在文档里的主动选择。
  • 凭据类命令无条件拒绝,因为它们的输出可能把密钥泄露进对话、或破坏你的登录。
  • 命令通过 execFile + 参数数组执行(shell: false),不存在参数注入
  • 顺带处理了两个容易踩的坑:gh api -f key=value隐式变成 POST(已识别为写);workflow run list(读)和 workflow run <file>(写)能精确区分。

配置

插件读取 GhCliConfig(在 profile 的插件配置里设置):

interface GhCliConfig {
  ghPath?: string        // gh 路径,默认 PATH 上的 `gh`
  fullAccess?: boolean   // 允许写命令,默认 false
  extraReadOnly?: string[]  // 额外放行的只读前缀,如 ['gist create']
  timeoutMs?: number     // 单次调用超时,默认 60_000
}

cordis patch 示例:

- insert:
    - id: gh-cli
      name: gh-cli
      config:
        fullAccess: false
        timeoutMs: 120000

FAQ

装了之后怎么没生效? —— 一个包只有声明了 dsh.bundle.patch 才会成为激活的 Harness 层(本插件自带 cordis.patch.yml)。装完必须重启 dsh web(或刷新页面)。

会泄露我的 token 吗? —— 不会。gh auth token 这类命令在最高安全层级,任何情况下都拒绝执行;只读命令的输出不含凭据。

为什么默认不是全功能? —— 把 gh 交给一个能读你工作区、跑 shell 的 Agent,最稳妥的做法是"默认只读、按需放开"。安全边界应该是显式的,而不是隐式的。

支持哪些 gh 版本? —— 只要 gh 已登录且版本较新即可;本插件用参数数组调用,不依赖特定版本语法。

开发

git clone https://github.com/Nico0713520/dsh-github-cli.git
cd dsh-github-cli
npm install
npm run typecheck
npm test
npm run build

# 在本地 Harness 检出里调试
dsh plugin --profile web add "link:$(pwd)"

要求

  • Node.js ≥ 20
  • GitHub CLI 已安装并登录(gh auth login
  • DeepSeek Harness(@deepseek-ai/dsh)—— 已在 0.1.0-rc.x 验证

相关链接

License

MIT — 见 LICENSE

Project files and signals

Shown items are public repository signals detected in the directory snapshot.

Contributing guideDetected

Repository information

Language
TypeScript
License
MIT
Latest release
v0.1.0
Last updated
Aug 17, 2026, 4:44 PM

Install deliberately

Review source code, permissions, lifecycle hooks, dependencies and network access. Test untrusted plugins in an isolated environment.