Name: ai-office-landing Description: AI Office — Living Brief 协作循环(v2 对话式交互) Entry Point: true
Skill Contents
- Overview
- Usage
- Workflow
- State Management
- Phase 0: Design Reference Collection + Web Search
- Phase 1: Initial Interview + Iterative Refinement
- Phase 2: Style Tokens & Task Generation
- Phase 3: Sequential Execution with Q&A
- Phase 4: Critic Review + Clarification Loop
- Phase 5: Final Delivery
- Resume & Recovery
- Cost Expectations
Overview
AI Office v2 是一个对话驱动的 Living Brief 协作循环:
核心升级:
- 对话式交互: Executor 可在执行中提问,不必一次性想清楚
- 增量交付: 每个阶段完成后展示预览,用户确认后再继续
- 问题缓冲: Agent 的问题统一收集,批量问用户
- 双向通信: 从"批处理"升级为"请求-响应"模式
保留下来的优点:
- Living Brief 作为单一事实来源
- Critic 独立审查,不继承主控上下文
- 风格令牌自动转译(hex/px)
- 断点续跑
New Constraints:
[QUESTION: ...]标记 Agent 需要用户澄清的地方[USER_INPUT: ...]标记用户追加的信息state.json持久化当前进度,跨 session 可恢复
Usage
在任意项目目录下触发:
ai-office-landing [options]
Options:
--resume: 从 state.json 恢复上次的对话式工作流--auto-continue: 自动继续,不暂停等待用户确认(适合批处理场景)--human-critic: 启用人工 Critic 模式--cost-saving: 启用成本节省模式,自动将 MEDIUM/LOW 角色路由到 Kimi/DeepSeek--adapter <name>: 强制所有 Executor 使用指定 adapter (claude-agent|kimi-api|deepseek-api)
Adapter 路由 (v2.4 新增):
Executor 任务通过 adapters/route.sh 自动路由到最优 adapter:
| 角色 | 质量等级 | 默认 Adapter | 成本节省模式 |
|---|---|---|---|
| Interviewer, Critic, Integrator | HIGH | claude-agent | claude-agent (不可降级) |
| Frontend | MEDIUM-HIGH | claude-agent | deepseek-coder |
| Copywriter, Designer | MEDIUM | claude-agent | kimi-api |
| SEO | LOW | claude-agent | kimi-api / deepseek-api |
环境变量配置:
export KIMI_API_KEY="your-key" # 启用 Kimi adapter
export DEEPSEEK_API_KEY="your-key" # 启用 DeepSeek adapter
export COST_SAVING_MODE=true # 自动路由到便宜的 adapter
export AI_OFFICE_ADAPTER=kimi-api # 强制指定 adapter (HIGH 角色除外)
对话式示例:
# 启动对话式工作流
ai-office-landing
# 过程中的交互
[Phase 1 完成]
✓ 保存了 5 个维度的信息
✓ 但 Designer 想问:是否有品牌 logo 图片?
[Phase 3 - Copywriter 完成]
✓ 生成了 Hero/Features/FAQ/CTA 文案
✓ 但 Frontend 想问:是否接受 AI 生成的主视觉图?
[Phase 4 - Critic 审查]
⚠️ HIGH: Copy.md 使用了 "爆款"(在禁用词列表)
→ 需要你的修正: 删除或替换
Workflow
Phase 0: Initialize
↓ 创建 ai-office/ 目录, state.json
Phase 1: Initial Interview
↓ AskUserQuestion 批量问 5 维度
↓ 生成 brief.md v1
↓ *可选* 收集阶段: 其他 Agent 可追加问题
↓ 如果有 [QUESTION], 问你 → 更新 brief.md → 回到 Checkpoint
↓ 如果没有 → 进入 Phase 2
Phase 2: Style Tokens & Tasks
↓ 生成 style-tokens.md, tasks.md
↓ *可选* 收集阶段
↓ 如果有 [QUESTION] → 问你 → 更新 → 回到 Checkpoint
↓ 如果没有 → 进入 Phase 3
Phase 3: Sequential Execution (逐个执行)
↓ Task 1: Copywriter → copy.md
↓ 检查是否有 [QUESTION]
↓ 有 → 问你 → 修正 → 回到 Task 1
↓ 无 → 继续 Task 2
↓ Task 2: Designer → design-spec.md
↓ 检查是否有 [QUESTION]
↓ 有 → 问你 → 修正 → 回到 Task 2
↓ 无 → 继续 Task 3
↓ Task 3: Frontend → index.html
↓ 检查是否有 [QUESTION]
↓ 有 → 问你 → 修正 → 回到 Task 3
↓ 无 → 继续 Task 4
↓ Task 4: SEO → meta.md
↓ 检查是否有 [QUESTION]
↓ 有 → 问你 → 修正 → 回到 Task 4
↓ 无 → 进入 Phase 4
Phase 4: Critic Review
↓ 独立 Critic 审查所有 outputs
↓ 生成 critique.md
↓ *可选* 如果有 HIGH/CRITICAL
↓ 收集所有问题 → 统一问你 → 修正 → 回到 Phase 3
↓ 如果都通过 → 进入 Phase 5
Phase 5: Final Delivery
↓ 整合所有交付物
↓ 清除 state.json
State Management
State File Location
ai-office/state.json - 存储当前会话状态,结构如下:
{
"version": "v2",
"current_phase": 3,
"current_task": 2,
"checkpoint": {
"phase": 3,
"task": 2,
"text": "Designer 生成 design-spec.md"
},
"pending_questions": [
{
"source": "copywriter",
"file": "ai-office/questions/copywriter-questions.md",
"questions": ["是否有品牌 slogan?", "Hero 图用真实照片还是插画?"]
}
],
"user_inputs": {
"brand_slogan": "让世界更美好",
"hero_image_type": "真实照片"
},
"outputs_status": {
"copy.md": "completed_with_user_feedback",
"design-spec.md": "in_progress",
"index.html": "pending",
"meta.md": "pending"
}
}
State Operations
# 先加载仓库内置 helper,避免手写 jq 表达式
source "$SKILL_ROOT/state-management.sh"
# 缺少 state.json 时才初始化,保留 --resume 现场
ensure_state_initialized
# 读取当前进度
CURRENT_PHASE="$(get_current_phase)"
CURRENT_TASK="$(get_current_task)"
# 写入简单字段时显式传 value_type
write_state "current_phase" "3" "number"
write_state "current_task" "1" "number"
# 对带点号/连字符的真实输出键,使用字面键 helper
mark_task_waiting_for_user "design-spec.md"
mark_task_completed "copy.md"
# 保存用户补充输入
save_user_input "hero_image_type" "真实照片"
# 添加待处理问题与 checkpoint,不要直接手拼 pending_questions JSON
add_pending_question "designer" "需要确认配色方案"
create_checkpoint 3 2 "Designer 等待用户确认配色方案"
Recovery Logic
每个阶段开始时检查 state.json:
if [[ -f "ai-office/state.json" ]]; then
source "$SKILL_ROOT/state-management.sh"
CURRENT_PHASE=$(get_current_phase)
log "从 Phase $CURRENT_PHASE 恢复..."
else
CURRENT_PHASE=0
fi
Phase 0: Design Reference Collection + Material Search
目标: 收集设计参考,搜索视觉素材,为后续 Agent 提供 concrete 参考
触发条件:
- 用户提供了设计思路、参考网站或视觉参考
- 用户希望 Agent 上网搜索素材而非凭空创作
Step 0.1: Collect Design Intent
log "Phase 0: 设计参考收集"
# 问用户是否有设计参考
AskUserQuestion {
question: "请描述你的设计思路(可多选)",
options: [
"我有参考网站或落地页",
"我有品牌视觉指南/设计系统",
"我只有文字描述的风格",
"我希望 Agent 帮我找灵感",
"跳过,直接进入需求访谈"
]
}
如果用户选择 "我有参考网站":
AskUserQuestion {
question: "请提供参考网站 URL (多个用逗号分隔)",
multiSelect: false
}
# 保存到 ai-office/design-intent.md
echo "$USER_INPUT" > ai-office/design-intent.md
echo "source_type: reference_urls" >> ai-office/design-intent.md
如果用户选择 "我有品牌视觉指南":
AskUserQuestion {
question: "请上传或提供路径: 品牌手册/logo文件/设计系统文件",
options: ["上传文件", "提供本地路径"]
}
# 复制文件到 ai-office/references/
mkdir -p ai-office/references
if [[ "$USER_CHOICE" == "上传文件" ]]; then
# 提示用户上传文件
log "请上传文件到 ai-office/references/"
else
# 复制本地文件
cp "$USER_PATH" ai-office/references/
fi
echo "source_type: brand_guidelines" > ai-office/design-intent.md
echo "files_location: ai-office/references/" >> ai-office/design-intent.md
如果用户选择 "只有文字描述":
AskUserQuestion {
question: "请描述风格:现代/极简/温暖/科技感/活泼... 具体元素",
multiSelect: false
}
# 保存描述到 ai-office/design-intent.md
echo "source_type: text_description" > ai-office/design-intent.md
echo "description: $USER_INPUT" >> ai-office/design-intent.md
如果用户选择 "帮我找灵感":
log "进入自动搜索模式..."
echo "source_type: auto_inspiration" > ai-office/design-intent.md
echo "note: Will generate search keywords after Phase 1 interview" >> ai-office/design-intent.md
如果用户选择 "跳过":
log "跳过 Phase 0,直接开始 Phase 1"
write_state "current_phase" "1"
write_state "outputs_status.design-references" "skipped"
# Continue to Phase 1
Step 0.2: Design Researcher Agent Search
This step executes only if design-intent.md exists and is not "skipped"
# 创建输出目录
mkdir -p ai-office/references
# 检查是否有 design-intent.md
if [[ -f "ai-office/design-intent.md" ]]; then
SOURCE_TYPE=$(grep "source_type:" ai-office/design-intent.md | cut -d' ' -f2)
if [[ "$SOURCE_TYPE" == "skipped" ]]; then
log "Phase 0 skipped by user"
else
log "Design Researcher 开始搜索素材..."
# 调用 Design Researcher Agent
# This agent will:
# 1. Read design-intent.md
# 2. Execute web searches for materials
# 3. Generate design-references.md
Agent({
description: "Design Researcher - Search materials and references",
prompt: $(cat "${SKILL_ROOT}/prompts/design-researcher.md"),
context_files: ["ai-office/design-intent.md"],
output_path: "ai-office/references/desig