@petercjl/procli
v0.7.0
Published
Agent-first CLI and portable Skill for SealSeek project management
Maintainers
Readme
procli
procli 是自建项目管理系统面向人和 Agent 的稳定 CLI。npm 包同时分发唯一真源的 project-management Skill;Codex 和 SealSeek 使用同一台机器上的同一个 CLI。
npm install -g @petercjl/procli@latest
procli profile add nas --url http://NAS地址:14317 --environment production
procli auth login --profile nas
procli skill install --agent codex
procli skill install --agent sealseekCLI 与 Skill 真源都位于全局 npm 包中。Codex 的发现目录使用指向包内 Skill 的链接;SealSeek 的活动工作区需要实体副本,skill install --agent sealseek 会复制并登记到工作区和技能池。升级 npm 包后运行 procli skill update --agent codex 和 procli skill update --agent sealseek,再新建 Agent 对话以刷新技能清单。非默认 SealSeek 工作区可设置 SEALSEEK_WORKSPACE 或传入 --target-dir 指向 workspaces/<工作区>/skills。
默认 Profile 是 nas。开发时可持久切换到本地,或只覆盖一条命令:
procli profile add local --url http://127.0.0.1:4317 --environment development
procli profile use local
procli --profile nas project create --name "NAS 测试项目" --goal "验证最终服务" --yes创建生产项目支持目标确认、幂等和写后回读:
procli project create --name "新品项目" --goal "完成市场验证与上市" --yes只读命令可直接查询目录、项目和任务记录:
procli directory list
procli task list --project "新品项目"
procli task get --project "新品项目" --task "完成市场与竞品调研"task get 返回节点当前状态、状态历史、依赖、活动记录、Agent 运行、交付物、Wiki 元数据和通知。
项目知识采用关系元数据、钉钉原文、不可变 Markdown 来源快照、报告证据页,以及按节点持续编译的 current.md。项目 index.md 和 queries/index.md 优先路由到当前知识;节点目录保存各期来源和历史记录,用于核对差异与证据。Agent 读取已有综合页及全部活跃来源,按知识点更新结论、标明证据时间窗与尚未解决的分歧,再经 procli knowledge compile 保存;服务端归档上一版并记入 wiki/log.md。钉钉文档由具备权限的官方 dws 创建并回读;knowledge source-check 可按需核验原文是否更新。
procli knowledge context --project "新品项目" --task "完成市场与竞品调研" --json
procli knowledge index --project "新品项目" --node "市场调研" --json
procli knowledge reindex --project "新品项目" --context-token "<knowledge index 返回的令牌>" --dry-run --json
procli knowledge ingest --project "新品项目" --task "完成市场与竞品调研" \
--title "市场调研报告" --source-node "<钉钉 nodeId>" \
--source-url "https://alidocs.dingtalk.com/i/nodes/<nodeId>" \
--source-version "<真实来源版本或读回时间>" --workspace "<知识库 workspaceId>" \
--file ./verified-source.md --wiki-file ./knowledge-summary.md \
--analysis-date "2026-09-16" --platform "跨平台公开资料" --topics "容量,保冷,竞品" \
--context-token "<当前令牌>" \
--idempotency-key "<UUID>" --dry-run --json
procli knowledge query --project "新品项目" --node "市场调研" --json
procli knowledge compile-context --project "新品项目" --node "市场调研" --json
procli knowledge compile --project "新品项目" --node "市场调研" \
--file ./market-current.md --source-ids "<来源知识ID1,来源知识ID2>" \
--change-summary "叠加两期调研,记录一致结论与待核查差异" \
--context-token "<编译上下文令牌>" --current-version 1 \
--idempotency-key "<UUID>" --dry-run --json
procli knowledge query --project "新品项目" --node "市场调研" \
--reports --platform "跨平台公开资料" --topic "保冷" --from "2026-01-01" --json
procli knowledge source-context --project "新品项目" --knowledge-id "<知识ID>" --json
procli knowledge source-check --project "新品项目" --knowledge-id "<知识ID>" \
--context-token "<来源上下文令牌>" --dry-run --json预演核对后移除 --dry-run 写入;生产 Profile 还需要 --yes。返回的 knowledgeId、来源快照和编译页均会回读验证。来源检查通过 dws 读取完整正文并比较 SHA-256;发现变化后将节点当前知识标记为待重新编译。任务或节点删除会归档项目侧知识关系与本地快照,原始钉钉文档保留不动,恢复时重建项目侧关系。
任务编辑和 Agent 执行采用项目级写前令牌。每次写入后都要重新获取上下文,因为项目版本会变化:
procli task update-context --project "新品项目" --task "完成市场与竞品调研" --json
procli task update --project "新品项目" --task "完成市场与竞品调研" \
--progress 45 --context-token "<令牌>" --task-version 3 --dry-run --json
procli run start --project "新品项目" --task "完成市场与竞品调研" \
--skill "市场调研" --context-token "<新令牌>" --task-version 4 --dry-run --json
procli artifact upload --project "新品项目" --task "完成市场与竞品调研" \
--file ./market-report.pdf --context-token "<新令牌>" --task-version 5 --dry-run --json
procli run finish-context --project "新品项目" --task "完成市场与竞品调研" --run-id "<运行ID>" --json
procli run finish --project "新品项目" --task "完成市场与竞品调研" \
--run-id "<运行ID>" --run-version 1 --status completed \
--output "完成市场判断与机会总结" --artifact-id "<附件ID>" \
--context-token "<新令牌>" --task-version 6 --dry-run --json
procli task submit --project "新品项目" --task "完成市场与竞品调研" \
--context-token "<新令牌>" --task-version 7 --dry-run --json提交、审核通过和驳回会进入通知队列。管理员绑定成员的精确钉钉 userId 后,可在配置好官方 dws 与应用机器人 Code 的运行环境启动发送 worker:
procli notification list --json
procli notification bind --member market --dingtalk-user-id "<userId>" --yes
PROCLI_DINGTALK_ROBOT_CODE="<机器人Code>" procli notification dispatch --dry-run --json
PROCLI_DINGTALK_ROBOT_CODE="<机器人Code>" procli notification worker --identity bot --yesworker 应由本地进程管理器持续运行;可用 PROCLI_DWS_PROFILE 固定同一企业身份。钉钉消息发送结果不确定时会进入人工核对状态。核实钉钉里确实未收到后,管理员可运行 procli notification requeue --id "<通知ID>" --confirm-not-delivered --yes 重新入队。
节点是看板中的阶段列。添加节点前先读取当前节点顺序,默认追加到末尾,也可以指定前后位置:
procli node create-context --project "新品项目" --json
procli node create --project "新品项目" --name "产品定价" \
--after-node "市场调研" --context-token "<令牌>" \
--idempotency-key "<UUID>" --dry-run --json删除节点会把节点、其中的任务、Wiki、附件和执行记录作为一个批次放入回收站。其他节点存在下游依赖时默认阻止;detach 必须由用户明确选择。有实质产出的节点只能由管理员删除:
procli node delete-context --project "新品项目" --node "产品定价" --json
procli node delete --project "新品项目" --node "产品定价" \
--confirm-node "产品定价" --dependency-policy block --dry-run --json
procli node restore --deletion-id "<deletionId>" \
--confirm-node "产品定价" --dry-run --json添加任务需要先读取精简写前快照。预演和真实写入使用同一个 contextToken 和幂等键;如果期间网页端或其他 Agent 修改了项目,写入会返回 PROJECT_STATE_CHANGED:
procli task create-context --project "新品项目" --json
procli task create --project "新品项目" --node "市场调研" \
--title "整理亚马逊热销款价格带" \
--description "统计前20款商品的价格、销量和主要卖点" \
--context-token "<create-context 返回的令牌>" \
--idempotency-key "<同一逻辑尝试的 UUID>" --dry-run --json本地 Profile 确认预演后移除 --dry-run 即可写入;生产 Profile 还需要 --yes。新任务默认添加到节点末尾,可使用 --before-task、--after-task 指定位置,使用 --depends-on 显式指定依赖。
任务删除采用可恢复链路。CLI 会读取当前状态、计算影响哈希,并把任务 Wiki、历史版本和附件移动到按 deletionId 隔离的回收目录。存在下游依赖时默认阻止删除,只有明确选择 detach 或 rewire 才会继续:
procli task delete-context --project "新品项目" --task "完成市场与竞品调研" --json
procli task delete --project "新品项目" --task "完成市场与竞品调研" \
--confirm-task "完成市场与竞品调研" --dependency-policy block --dry-run --json
procli task delete --project "新品项目" --task "完成市场与竞品调研" \
--confirm-task "完成市场与竞品调研" --dependency-policy detach \
--idempotency-key "<UUID>" --json查看回收记录并恢复任务:
procli trash list --project "新品项目" --json
procli trash get --deletion-id "<deletionId>" --json
procli task restore --deletion-id "<deletionId>" \
--confirm-task "完成市场与竞品调研" --dry-run --json恢复写入时移除 --dry-run;生产 Profile 还需要 --yes。任务默认保留 90 天,当前版本不自动彻底清除。
商品项目默认生成标准生命周期 SOP。Agent 也可以提交自定义 SOP;每个节点都必须有名称和工作说明:
{
"nodes": [{ "name": "验证需求", "description": "取得真实用户证据并形成结论" }]
}procli project create --name "新品验证" --sop-file ./sop.json删除项目仅允许系统管理员执行,必须先预览、精确复述项目名称并显式确认。删除是可恢复的软删除:
procli project delete --name "新品验证" --confirm-name "新品验证" --dry-run
procli project delete --name "新品验证" --confirm-name "新品验证" --yes店铺项目和企业项目已保留为后续能力,目前 CLI 会返回 FEATURE_UNSUPPORTED。
配置和每个 Profile 的个人凭证保存在用户配置目录,不进入 npm 包或项目仓库。运行 procli doctor --json 查看当前 Profile、服务指纹和认证状态。
一次提交任务研究成果
procli task publish 接收一份 JSON 内容包,创建并回读钉钉文档,把可选 HTML 报告嵌入文档并上传为任务附件,写入报告专属 Wiki 知识、编译节点当前知识,最后更新任务卡摘要。步骤结果保存在用户配置目录的 publish/ 日志中;用同一幂等键和同一内容包续传。
{
"schemaVersion": 1,
"title": "示例品类研究",
"summary": "市场数据支持继续深研;商品与利润条件待验证。",
"contentMarkdown": "# 研究结论\n\n有依据的正文。",
"htmlReport": "./示例报告.html",
"analysisDate": "2026-09-26",
"platform": "淘宝",
"topics": ["示例品类", "类目机会"]
}没有 HTML 时,contentMarkdown 默认同时用于钉钉正文和报告专属 Wiki;可分别提供 humanMarkdown、knowledgeMarkdown。提供 htmlReport 时,CLI 会把 HTML main 中的完整可见报告转为 Wiki Markdown,保留标题与全部数据表行,并将 knowledgeMarkdown 作为项目补充附在全文之后。写前检查转换覆盖,写后回读核对 Wiki 全文;HTML 仍作为给人看的附件。若节点已有知识来源,内容包还须提供融合旧来源的 currentMarkdown,其中以 [K:现有来源ID] 引用旧来源,以 [K:NEW] 引用本次新增来源。节点当前页会链接到 Wiki 全文,Agent 可以只读取 Wiki 获取细节。
procli task publish --profile local --project "示例项目" --task "确认商品目标与立项" \
--bundle ./bundle.json --idempotency-key <UUID> --dry-run --json
procli task publish --profile local --project "示例项目" --task "确认商品目标与立项" \
--bundle ./bundle.json --idempotency-key <同一UUID> --yes --json正式执行会修改钉钉和项目服务,必须显式添加 --yes。多组织钉钉账号可用 --dws-profile CORP:USER 固定文档操作身份。--dry-run 只检查内容与计划,不创建文档,也不代替正式执行时逐步调用的服务端预览。
若 HTML 插入回执不确定,先按记录的文档 ID 核对正文媒体列表;确认真实的 blockId、文件名和类型后,使用相同幂等键加 --recover-html-block BLOCK_ID --yes 续传。CLI 会回读核对区块,不会再次插入附件。
修复旧提交中不完整的 Wiki 时,使用原内容包及原提交记录,先加 --repair-wiki --repair-journal <原记录路径> --dry-run 检查,再以 --yes 执行。此模式在原知识 ID 上回填完整报告并重新编译当前页,不新建钉钉文档或重复上传附件。
