本文档基于实际使用体验总结,面向 PilotDeck 能力本身,不依赖任何具体项目。
- 凭据校验与真实服务行为不一致
- Skill 默认把
project_id / agent_id / api_token视为必填。 - 但有些部署模式下,即使为空也可完成远端同步(例如通过开放 API + projectId)。
- 状态文件字段语义不稳定
project.key、project.id、pilotdeck.project_id可能同时存在,优先级不明确。sync_state位置与缩进容易出错,导致状态不可解析。
- API 约定缺少“能力探测”
- 不同实例支持的 action type 不一致(例如
status.lifecycle可能不被支持)。 - Skill 未先探测接口能力,直接提交导致失败重试成本高。
- 日志与同步状态闭环不完整
- 常见“本地已更新,远端失败”状态缺少标准枚举。
- run/event/action 的关联 ID 未强制回写状态文件,审计链不完整。
建议在 Skill 内支持三种模式:
local_only:仅更新本地状态与日志remote_preferred:优先远端,失败自动回退本地remote_required:远端失败则整体失败
并支持自动判定:
- 若 health/runs 接口可用且 project 可解析,自动尝试
remote_preferred
在真正同步前执行:
GET /healthGET /projects+ project 解析POST /agent/runs试探- action/event 类型白名单探测(或读取服务端元数据)
输出 capability_report,再决定提交策略。
当前建议:
- 若 action type 不支持,自动降级到
PATCH /projects/{id}字段更新 - action 失败不应阻断 run/event 提交
即:actions 是增强能力,不应成为“唯一更新通道”。
建议优先级:
pilotdeck.project_idproject.id- 按
project.name在/projects中模糊匹配(唯一命中)
匹配结果必须回写 resolved_project_id 到 sync_state。
每次同步后强制回写:
sync_state.last_run_idsync_state.last_event_id(可选)sync_state.last_sync_atsync_state.remote_result(success/partial/failed)
schema_version: 1
project:
name: "..."
id: "..." # 本地项目标识
pilotdeck:
base_url: "..."
project_id: "" # 可空,允许动态解析
agent_id: "" # 可空
api_token: "" # 可空(部分服务模式)
sync_mode: "remote_preferred" # local_only / remote_preferred / remote_required
status:
lifecycle: "development"
priority: "high"
progress: 60
tags: []
sync_state:
sync_status: "not_started"
last_sync_at: null
last_run_id: null
last_event_id: null
resolved_project_id: null
remote_result: null
errors: []
activity_log: []统一为以下枚举,避免自由文本:
not_startedlocal_updatedremote_syncedremote_synced_partialremote_sync_failedremote_unavailable
status.progress强约束为0..100整数- 每次变化必须写
activity_log的 before/after
- 统一 ISO 8601 UTC(例如
2026-02-12T03:39:20Z) - 禁止混用本地时区字符串
- 幂等键
- run/event/action 建议带
idempotency_key,避免重复提交。
- 冲突处理
PATCH /projects/{id}必带ifUpdatedAt。- 409 时自动:拉最新 -> 合并 -> 重试一次。
- 分级失败
- run 创建失败:降级本地 only。
- action 失败:降级 PATCH。
- event 失败:记录
sync_state.errors,不回滚已成功更新。
建议 Skill 每次执行输出结构化结果:
mode_selectedcapability_reportresolved_project_idremote_calls(每步 status/code)final_status
这样可以快速定位“配置问题 vs 服务端能力问题”。
P0(立即):
- 增加
sync_mode - 增加 project 解析优先级
- 统一
sync_state枚举与字段
P1(短期):
- 增加 capability 探测
- action 失败自动降级 PATCH
P2(中期):
- 幂等键 + 冲突自动修复
- 执行结果结构化输出