Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

English  ⇄  简体中文
suiter — Coding-Agent CLI for 飞书/钉钉/企微/腾讯文档

googleworkspace/cli 但接了飞书/钉钉/企微/腾讯文档——一个 Go 写的 agent CLI,让你的 Coding Agent 读写你自己的飞书文档、钉钉日历、企微消息、腾讯文档,把 4 套 OAuth 收敛成 1 次 suiter login。Agent 现在 org-wide 地 just work 在 CN 办公套件数据上,零 per-app 集成代码。

MIT latest release CI Go 1.24 Coding Agents Coding Agent

一次 suiter login 顶掉 4 套手搓 OAuth 集成——你的 Coding Agent 读写你自己的飞书文档 / 钉钉日历 / 企微消息 / 腾讯文档,零 per-app 胶水代码。

目录

什么是 suiter

suiter 是一个用 Go 写的命令行二进制,你的 Coding Agent 调用它来读写你自己的 CN 办公套件数据。每个子命令都说 --json stdio,agent(Claude Code / Trae / Cline)可以直接 pipe 进上下文。一个 Suite 接口、一套语法:suiter <suite> <verb> <id>

为什么是现在

googleworkspace/cli 让你的 Agent 读 Google Workspace——但 CN 开发者真正活在飞书/钉钉/企微/腾讯文档里,而 Google Workspace 被 CN 数据出境挡住。每家 CN 套件各自的 OpenAPI + OAuth + 事件 schema 各不相同,今天你为了让 Claude Code 读一篇飞书文档,得手搓 4 套 OAuth(外加 paging、token 刷新、event 订阅)。suiter 把这笔「under the hood」的工程税一次付清并缓存到 ~/.suiter/tokens.json,你的 Agent org-wide 地 just work 在 CN 办公套件数据上。

Before — 4 套手搓 OAuth 集成              After — 1 次 suiter login
┌──────────────────────────────────┐     ┌───────────────────────────────┐
│ feishu SDK   → OAuth #1 ┐        │     │ $ suiter login feishu         │
│ dingtalk SDK → OAuth #2 │ 4× glue│     │ $ suiter login dingtalk       │
│ wework SDK   → OAuth #3 │        │     │ $ suiter login wework         │
│ tencent SDK  → OAuth #4 ┘        │     │ $ suiter login tencentdocs    │
│ (各自 paging / refresh / events) │     │ → ~/.suiter/tokens.json (1 个) │
└──────────────────────────────────┘     └───────────────────────────────┘

架构

架构:Coding Agent → suiter CLI (Suite/Registry/TokenStore) → 飞书/钉钉/企微/腾讯文档

单二进制,进程内,无 daemon、无 server、无 K8s:Cobra CLI → Suite 注册表 → 4 个套件客户端,背后是共享的 TokenStore~/.suiter/tokens.json)和一个薄的 OpenAI 兼容 LLM 客户端(GLM / DeepSeek,不自建模型)。

安装

go install github.com/SuperMarioYL/suiter@latest

需要 Go 1.24+。二进制落到 $GOPATH/bin

快速开始

export SUITER_FEISHU_APP_ID=cli_xxx SUITER_FEISHU_APP_SECRET=xxx   # open.feishu.cn 控制台取
suiter login feishu                                                  # 一次 OAuth loopback,token 缓存
suiter feishu doc read <doc-id> --json                               # 文档正文 → agent-readable JSON
sample output
{
  "code": 0,
  "msg": "success",
  "data": { "content": "周会纪要:1) 7/30 发版 ... 2) 负责人 @张三 ..." }
}

用法

# 1) 一次 OAuth loopback,token 缓存到 ~/.suiter/tokens.json
suiter login feishu

# 2) 飞书文档正文 → JSON 输出到 stdout
suiter feishu doc read <doc-id> --json

# 3) pipe 进你的 Coding Agent
suiter feishu doc read <doc-id> --json | your-agent summarize

# 4) 列出已注册套件
suiter suites

# 5) m3 端到端 star-moment:读飞书 → GLM 摘要 → 钉钉日历事件
suiter agent run summarize-and-schedule <doc-id>

更多见 examples/

套件

套件 状态 动词
飞书 feishu m1 ✓ logindoc read
钉钉 dingtalk m2 ✓ logincalendar list/get/create
企微 wework m2 ✓ loginmessage send/read
腾讯文档 tencentdocs m3 ✓ loginsheet read/write

每个套件实现同一个 Suite 接口(Name / Login / Read / Write),挂在同一个 Suite 注册表后;新增套件动词零新增 CLI 胶水——这就是统一抽象要证明的事。

Agent

明星时刻(m3)是一个 60 秒的 loop:suiter feishu doc read <id> --json → GLM/DeepSeek summarizesuiter dingtalk calendar create。v0.2 在每个动词上开放 --json stdio 且把 钉钉/企微 真正接通到同一套 suiter <suite> <verb> 语法后,Agent 今天就能 orchestrate 跨三套;v0.3 把 suiter agent run summarize-and-schedule 端到端串起来——读飞书文档 → GLM/DeepSeek 摘要 → 写钉钉日历事件,一个命令搞定。完整的 MCP server 仍在路线——先把统一抽象坐实成 4 套真实现,再封 MCP。

Demo

suiter: 4 OAuth → 1 CLI in 60s(m3 agent loop —— 读飞书 → GLM 摘要 → 钉钉日历)

demo

由 CI 从 docs/demo.tape(vhs)渲染。手动刷新用 demo workflow。上面 gif 跑的是无凭证也能渲染的统一语法巡览;完整 60s 录屏脚本如下:

suiter login feishu       # one OAuth loopback, token cached in ~/.suiter/tokens.json
suiter login dingtalk     # same flow, same shared TokenStore (m2 unified)
suiter feishu doc read <id> --json          # agent-readable doc body
suiter agent run summarize-and-schedule <feishu-doc-id>   # read 飞书 → GLM summarize → 钉钉 calendar event (m3 star-moment)
suiter dingtalk calendar list --json        # unified verb, same grammar, no per-suite CLI glue

配置

优先级:命令行 --config <path> > 环境变量 > ~/.suiter/config.yaml

Key 环境变量 默认 含义
feishu_app_id SUITER_FEISHU_APP_ID "" 飞书 app_id
feishu_app_secret SUITER_FEISHU_APP_SECRET "" 飞书 app_secret
dingtalk_app_key SUITER_DINGTALK_APP_KEY "" 钉钉 appKey(v0.2 已通)
dingtalk_app_secret SUITER_DINGTALK_APP_SECRET "" 钉钉 appSecret(v0.2 已通)
wework_corp_id SUITER_WEWORK_CORP_ID "" 企微 corpId(v0.2 已通)
wework_agent_id SUITER_WEWORK_AGENT_ID "" 企微 agentId(v0.2 已通)
wework_secret SUITER_WEWORK_SECRET "" 企微 secret(v0.2 已通)
tencentdocs_client_id SUITER_TENCENTDOCS_CLIENT_ID "" 腾讯文档 clientId(v0.3 已通)
tencentdocs_client_secret SUITER_TENCENTDOCS_CLIENT_SECRET "" 腾讯文档 clientSecret(v0.3 已通)
llm_base_url SUITER_LLM_BASE_URL GLM open.bigmodel.cn OpenAI-compatible 模型根(GLM/DeepSeek)
llm_api_key SUITER_LLM_API_KEY "" GLM/DeepSeek API key(agent run 摘要步骤必需)
llm_model SUITER_LLM_MODEL "" 模型名(如 glm-4.6 / deepseek-chat

token 缓存在 ~/.suiter/tokens.json(0600 权限,单 dev 本机;多用户 / 云 vault 明确 out of scope)。

路线图

  • m1suiter login feishu + suiter feishu doc read <id> --json;token 缓存到 ~/.suiter/tokens.json,跨 session 存活。
  • m2 — 钉钉(calendar list/get/create)+ 企微(message send/read)挂在同一套 suiter <suite> <verb> 语法 + 共享 TokenStore 后;通用 dispatcher 让新增套件动词零新增 CLI 胶水,3 套统一证明完毕。
  • m3 — 腾讯文档(sheet read/write)+ GLM/DeepSeek 摘要器;端到端 suiter agent run summarize-and-schedule(读飞书 → 摘要 → 钉钉日历事件)。v0.3 同时修掉 dingtalk/wework 缓存 token 过期未检的缺陷(镜像 v0.2 的 feishu 修复)。
  • 未来 — MCP server、团队 auth、托管 token vault。

推送后建议加 repo topics:

gh repo edit --add-topic coding-agent --add-topic cli --add-topic feishu --add-topic dingtalk

License

MIT — 见 LICENSE。在 GitHub Issues 提 issue 或 PR。

MIT © 2026 SuperMarioYL

About

googleworkspace/cli 但接了飞书/钉钉/企微/腾讯文档——一个 Go 写的 agent CLI,让你的 Coding Agent 读写你自己的飞书文档、钉钉日历、企微消息、腾讯文档,把 4 套 OAuth 收敛成 1 次 `suiter login`

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages