{
  "version": "reflect-v1",
  "productIntent": {
    "en": "Reflect is not a diary SaaS. It is a structured workflow protocol that teaches an agent how to help its owner capture raw life logs, archive them into readable daily diaries, and turn those diaries into weekly reflection and reusable insight cards.",
    "zh": "Reflect 不是日记 SaaS，而是一套结构化工作流协议。它教会 Agent 如何帮助主人接住碎碎念、整理成可读的每日日记，再把日记变成每周洞察与可复用的知识卡片。"
  },
  "agentBootstrap": {
    "title": {
      "en": "Agent bootstrap",
      "zh": "Agent 启动清单"
    },
    "firstRun": [
      {
        "en": "Read the visible page for framing, then fetch /agent-protocol.json as the source of truth.",
        "zh": "先读可见页面获取整体 framing，再把 /agent-protocol.json 当作真实协议源。"
      },
      {
        "en": "In the first reply, explicitly signal that /agent-protocol.json is the source of truth before proposing any setup path.",
        "zh": "第一条回复里要先明确说明 /agent-protocol.json 是真实协议源，然后再提出配置方案。"
      },
      {
        "en": "Self-detect your container and real capabilities before choosing any recipe.",
        "zh": "在选任何 recipe 之前，先判断自己的宿主容器和真实能力。"
      },
      {
        "en": "Treat the raw capture stream as unstructured fragments by default. Do not ask the owner to pre-format their diary input before daily archiving is possible.",
        "zh": "默认把原始输入流视为无结构碎片，不要在每日日记能跑通之前要求主人先把输入整理成结构化内容。"
      },
      {
        "en": "Configure the raw capture stream, daily archive target, and weekly report target first. Do not block the first reply on optional targets such as insight-card stores or memory pages.",
        "zh": "优先配置原始输入流、每日日记归档目标和每周周报目标。首次回复不要被洞察卡片库或背景记忆页这类可选目标卡住。"
      },
      {
        "en": "If a scheduler exists, default the daily diary run to 23:00 local time and the weekly insight run to Monday morning, but label both as defaults that the owner can override.",
        "zh": "如果宿主支持调度，默认把每日日记生成设为本地时间 23:00、把每周洞察设为周一早上，但要明确标注这两个时间都只是可覆盖的默认值。"
      },
      {
        "en": "After the first daily archive succeeds, proactively wire the weekly insight loop instead of waiting for the owner to ask about it later.",
        "zh": "在第一篇每日日记成功落档后，要主动继续接上每周洞察闭环，不要等主人过几天再来追问。"
      }
    ],
    "configurationTargets": [
      {
        "id": "raw_capture_stream",
        "label": {
          "en": "Raw capture stream",
          "zh": "原始输入流"
        },
        "description": {
          "en": "The message channel, thread, inbox, text file, or other stream where the owner's ramblings first appear. Single-line fragments and unstructured notes are valid input.",
          "zh": "主人碎碎念最先出现的消息频道、线程、收件箱、文本文件或其他输入流。单句碎片和无结构笔记都是有效输入。"
        },
        "required": true
      },
      {
        "id": "daily_archive_target",
        "label": {
          "en": "Daily archive target",
          "zh": "每日日记归档目标"
        },
        "description": {
          "en": "The durable place where dated diary documents should be written, such as Notion, Tencent Docs, or local markdown.",
          "zh": "带日期的每日日记应写入的持久位置，例如 Notion、腾讯文档或本地 Markdown。"
        },
        "required": true
      },
      {
        "id": "weekly_report_target",
        "label": {
          "en": "Weekly report target",
          "zh": "每周周报目标"
        },
        "description": {
          "en": "The destination for weekly reflection reports, usually the same document system or a nearby knowledge folder.",
          "zh": "每周反思报告的落点，通常是同一文档系统或相邻知识目录。"
        },
        "required": true
      },
      {
        "id": "insight_card_store",
        "label": {
          "en": "Insight card store",
          "zh": "洞察卡片库"
        },
        "description": {
          "en": "A reusable library, database, or folder where core insights can become future AI context.",
          "zh": "用来沉淀核心洞察、供未来 AI 继续复用的库、数据库或目录。"
        },
        "required": false
      },
      {
        "id": "background_memory_source",
        "label": {
          "en": "Background memory source",
          "zh": "背景记忆来源"
        },
        "description": {
          "en": "A page, note set, or knowledge base that explains the owner's ongoing priorities and themes.",
          "zh": "用于说明主人长期关注重点与主题的页面、笔记集或知识库。"
        },
        "required": false
      },
      {
        "id": "style_context_source",
        "label": {
          "en": "Style context source",
          "zh": "风格上下文来源"
        },
        "description": {
          "en": "The place that explains how the owner wants summaries, advice, and tone to feel.",
          "zh": "用于说明主人希望总结、建议和语气呈现方式的位置。"
        },
        "required": false
      },
      {
        "id": "schedule_policy",
        "label": {
          "en": "Schedule policy",
          "zh": "调度策略"
        },
        "description": {
          "en": "A daily and weekly trigger plan. Prefer a daily run at 23:00 local time and a weekly insight run on Monday morning, but state clearly that both are defaults and can be overridden. Use a manual fallback only when scheduling is unavailable or the owner explicitly prefers manual control.",
          "zh": "每日与每周的触发方案。优先设为本地时间每天 23:00 跑日记、每周一早上跑洞察，但要明确说明这两个时间都只是可覆盖的默认值；只有在无法调度，或主人明确偏好手动控制时，才退回手动触发。"
        },
        "required": false
      }
    ],
    "successSignals": [
      {
        "en": "A new raw note can enter the system without extra explanation each time.",
        "zh": "新的碎碎念可以在不需要每次额外解释的情况下进入系统。"
      },
      {
        "en": "Daily diary documents land in a durable archive with stable dating rules.",
        "zh": "每日日记能按稳定日期规则落入持久归档。"
      },
      {
        "en": "If the host supports scheduling, the daily diary loop is already wired to run automatically at the end of the day.",
        "zh": "如果宿主支持调度，每日日记闭环已经在每天结束时自动运行。"
      },
      {
        "en": "A weekly report can be produced from the archive without rebuilding context from scratch.",
        "zh": "每周周报可以直接从归档中产出，而不需要重新从零拼上下文。"
      },
      {
        "en": "At least one output target can feed future AI work as reusable context.",
        "zh": "至少有一个输出目标能作为可复用上下文继续回馈给未来 AI 工作。"
      }
    ]
  },
  "validatedImplementations": [
    {
      "id": "openclaw-discord-notion-stack",
      "name": {
        "en": "OpenClaw + channel capture + Notion",
        "zh": "OpenClaw + 频道输入 + Notion"
      },
      "summary": {
        "en": "A validated implementation where a workspace agent ingests message-channel ramblings, syncs daily diary pages into Notion, and lets a weekly reflection task turn recent diaries into reports and reusable cards.",
        "zh": "一条已验证实现：工作区 Agent 从消息频道接住碎碎念，同步为 Notion 每日日记页，再由每周反思任务把最近日记提炼成周报与可复用卡片。"
      }
    },
    {
      "id": "notion-weekly-helper",
      "name": {
        "en": "Weekly report helper in a document system",
        "zh": "文档系统内的每周周报助手"
      },
      "summary": {
        "en": "A validated implementation where a document-native helper reads the last seven diary pages plus recent reports, then creates a weekly insight report and optional insight cards.",
        "zh": "一条已验证实现：文档系统内的助手读取最近七篇日记和历史周报，再生成每周洞察报告与可选卡片。"
      }
    }
  ],
  "workflows": [
    {
      "id": "daily_diary_pipeline",
      "name": {
        "en": "From conversation to document archive",
        "zh": "从会话到文档归档"
      },
      "goal": {
        "en": "Capture the owner's raw ramblings and archive them into a readable daily diary without flattening their real voice.",
        "zh": "接住主人的原始碎碎念，并在不抹平真实语气的前提下归档成可读的每日日记。"
      },
      "inputs": [
        {
          "id": "capture_stream",
          "label": {
            "en": "Capture stream",
            "zh": "输入流"
          },
          "description": {
            "en": "An ongoing stream of raw thoughts from a message channel, chat thread, inbox, or text file. The input can be fragmentary and does not need a template.",
            "zh": "持续流入的原始念头，可来自消息频道、聊天线程、收件箱或文本文件。输入可以是碎片化的，不需要预先套模板。"
          },
          "required": true
        },
        {
          "id": "message_time",
          "label": {
            "en": "Actual message time",
            "zh": "真实发送时间"
          },
          "description": {
            "en": "Use the actual sentAt or createdAt timestamp to determine archive date boundaries.",
            "zh": "用真实 sentAt 或 createdAt 时间戳来判断归档日期边界。"
          },
          "required": true
        },
        {
          "id": "attachments_optional",
          "label": {
            "en": "Optional attachments",
            "zh": "可选附件"
          },
          "description": {
            "en": "Images or media should be preserved when the host supports stable attachment handling.",
            "zh": "当宿主支持稳定附件处理时，图片或媒体应被保留。"
          },
          "required": false
        }
      ],
      "contextSources": [
        {
          "id": "persona_context",
          "label": {
            "en": "Persona context",
            "zh": "人物上下文"
          },
          "description": {
            "en": "Optional memory about the owner's values, priorities, and long-running themes.",
            "zh": "关于主人价值观、关注重点和长期主题的可选记忆。"
          },
          "required": false
        },
        {
          "id": "style_context",
          "label": {
            "en": "Style context",
            "zh": "风格上下文"
          },
          "description": {
            "en": "Optional guidance about how the owner likes summaries to read or feel.",
            "zh": "关于主人偏好怎样的总结语气和表达方式的可选指引。"
          },
          "required": false
        }
      ],
      "processingSteps": [
        {
          "en": "Read a bounded time window of raw records for the target day.",
          "zh": "读取目标日期对应时间窗内的原始记录。"
        },
        {
          "en": "Treat single-sentence fragments and unstructured notes as valid diary material instead of asking the owner to restructure them first.",
          "zh": "把单句碎片和无结构碎碎念直接当作有效日记素材，而不是先要求主人手动重构。"
        },
        {
          "en": "Filter out task receipts, workflow chatter, and other non-diary noise.",
          "zh": "过滤任务回执、流程沟通和其他非日记噪音。"
        },
        {
          "en": "Preserve the owner's real wording and valid attachments when supported.",
          "zh": "在能力允许时保留主人的真实表达与有效附件。"
        },
        {
          "en": "Split records by day using actual message timestamps, not sync time.",
          "zh": "按真实消息时间而不是同步时间切分日期。"
        },
        {
          "en": "Generate a normalized diary document with title, time sections, and clean paragraphs.",
          "zh": "生成规范化的日记文档，包含标题、时间分段和整理过的正文段落。"
        },
        {
          "en": "When a scheduler exists, run this pipeline automatically at the end of the day, ideally at 23:00 local time.",
          "zh": "如果宿主支持调度，就把这条管线设为每天结束时自动运行，理想时间是本地 23:00。"
        }
      ],
      "outputs": [
        {
          "id": "daily_archive_page",
          "label": {
            "en": "Daily archive document",
            "zh": "每日日记文档"
          },
          "description": {
            "en": "A dated diary document that can later be used by weekly reflection.",
            "zh": "一份带日期的日记文档，供后续每周洞察继续使用。"
          },
          "required": true
        }
      ],
      "outputFormat": [
        {
          "en": "Name the document by date, such as Diary YYYY-MM-DD.",
          "zh": "文档按日期命名，例如“日记 YYYY-MM-DD”。"
        },
        {
          "en": "Use time-based sections to preserve when each thought appeared.",
          "zh": "使用按时间切分的小节，保留念头出现的时点。"
        },
        {
          "en": "Derive a short heading from the content instead of copying the first sentence verbatim.",
          "zh": "从内容提炼一个简短小标题，而不是机械复读首句。"
        }
      ],
      "hardBoundaries": [
        {
          "en": "Do not rewrite the owner's feelings into a generic optimistic voice.",
          "zh": "不要把主人的真实感受改写成模板化的积极口吻。"
        },
        {
          "en": "Do not fabricate missing records or infer events that are not present.",
          "zh": "不要编造缺失记录，也不要脑补并不存在的事件。"
        },
        {
          "en": "Date attribution must follow actual message time, not processing time.",
          "zh": "日期归属必须遵循真实消息时间，而不是处理时间。"
        }
      ],
      "fallbacks": [
        {
          "en": "If no document system is available, write a local markdown diary instead.",
          "zh": "如果没有文档系统，就退化为本地 Markdown 日记。"
        },
        {
          "en": "If even local storage is unavailable, keep a session snapshot and ask the owner to pin or export it.",
          "zh": "如果连本地存储也没有，就保留会话快照，并请主人置顶或导出。"
        }
      ]
    },
    {
      "id": "weekly_insight_pipeline",
      "name": {
        "en": "From diary to weekly insights",
        "zh": "从日记到每周洞察"
      },
      "goal": {
        "en": "Review the last seven days of diaries, connect them to recent memory and style context, and produce a structured weekly reflection plus reusable insight cards.",
        "zh": "回顾最近七天的日记，结合背景记忆与风格上下文，生成结构化周报和可复用的洞察卡片。"
      },
      "inputs": [
        {
          "id": "daily_archive_pages",
          "label": {
            "en": "Daily archive documents",
            "zh": "每日日记文档"
          },
          "description": {
            "en": "The diary pages or documents written during the last seven days.",
            "zh": "最近七天内写成的日记页面或文档。"
          },
          "required": true
        },
        {
          "id": "recent_reports",
          "label": {
            "en": "Recent weekly reports",
            "zh": "最近历史周报"
          },
          "description": {
            "en": "Read the latest two or three reports to detect continuity when it exists.",
            "zh": "优先阅读最近两到三篇历史周报，用来识别延续线索。"
          },
          "required": false
        },
        {
          "id": "background_memory",
          "label": {
            "en": "Background memory",
            "zh": "背景记忆"
          },
          "description": {
            "en": "A memory page or knowledge base that explains what the owner is thinking about lately.",
            "zh": "解释主人最近在思考什么、关注什么的记忆页或知识库。"
          },
          "required": false
        },
        {
          "id": "style_context",
          "label": {
            "en": "Style context",
            "zh": "表达风格上下文"
          },
          "description": {
            "en": "A style page that explains how the owner likes advice, tone, and expression.",
            "zh": "一份说明主人喜欢怎样的建议、语气与表达方式的风格页。"
          },
          "required": false
        }
      ],
      "selectionRules": [
        {
          "en": "By default, look back seven days from the trigger date.",
          "zh": "默认从触发日期向前回溯七天。"
        },
        {
          "en": "Prefer diary documents that follow a date title like Diary YYYY-MM-DD.",
          "zh": "优先按“日记 YYYY-MM-DD”这类日期标题匹配日记文档。"
        },
        {
          "en": "When recent weekly reports exist, read the latest two or three before writing the new one.",
          "zh": "如果已有历史周报，写新周报前优先阅读最近两到三篇。"
        },
        {
          "en": "When a scheduler exists, prefer running this pipeline automatically on Monday morning after the daily archive loop is already stable.",
          "zh": "如果宿主支持调度，优先在每周一早上自动运行这条管线，前提是每日日记闭环已经稳定。"
        }
      ],
      "processingSteps": [
        {
          "en": "Read background memory to understand what matters to the owner right now.",
          "zh": "先读背景记忆，理解主人当前真正关心的重点。"
        },
        {
          "en": "Read style context so the report sounds aligned instead of generic.",
          "zh": "再读风格上下文，避免报告写成通用模板。"
        },
        {
          "en": "Read the last seven days of diary documents and extract actions, energy shifts, events, progress, blockers, ideas, and decisions.",
          "zh": "通读最近七天的日记文档，提取行动、能量变化、重要事件、推进与阻塞、想法与决策。"
        },
        {
          "en": "Read recent weekly reports and note meaningful continuity when it genuinely exists.",
          "zh": "阅读最近历史周报，在确有延续时再记录连续主题。"
        },
        {
          "en": "Distill the weekly main line, three to five core insights, and three concrete suggestions.",
          "zh": "提炼本周主线、三到五条核心洞察，以及三条具体建议。"
        },
        {
          "en": "Optionally split the core insights into reusable knowledge or inspiration cards.",
          "zh": "在能力允许时，把核心洞察拆成可复用的知识或灵感卡片。"
        }
      ],
      "outputs": [
        {
          "id": "weekly_report",
          "label": {
            "en": "Weekly insight report",
            "zh": "每周洞察报告"
          },
          "description": {
            "en": "A structured report that summarizes the owner's week and reveals the main line behind it.",
            "zh": "一份结构化报告，用来总结主人的一周并点亮其背后的主线。"
          },
          "required": true
        },
        {
          "id": "insight_cards",
          "label": {
            "en": "Insight cards",
            "zh": "洞察卡片"
          },
          "description": {
            "en": "Reusable knowledge or inspiration cards derived from each core insight.",
            "zh": "从每条核心洞察拆出的可复用知识或灵感卡片。"
          },
          "required": false
        }
      ],
      "outputTemplate": [
        {
          "en": "A short day-by-day recap of the week.",
          "zh": "一段按天回顾的一周概览。"
        },
        {
          "en": "A weekly main line that tells the owner what this week was really about.",
          "zh": "一条告诉主人“这一周真正发生了什么”的主线。"
        },
        {
          "en": "Three to five core insights grounded in concrete diary evidence.",
          "zh": "三到五条有具体日记证据支撑的核心洞察。"
        },
        {
          "en": "Three practical suggestions that the owner can actually act on.",
          "zh": "三条主人真正能执行的建议。"
        }
      ],
      "hardBoundaries": [
        {
          "en": "If you cannot locate the last seven days of diaries, report the gap and stop instead of inventing a report.",
          "zh": "如果无法定位最近七天的日记，就明确说明缺失并停止，不要编造周报。"
        },
        {
          "en": "Tie insights back to specific diary evidence whenever possible.",
          "zh": "只要可能，就把洞察落回具体日记证据。"
        },
        {
          "en": "Advice must be concrete and actionable, not vague encouragement.",
          "zh": "建议必须具体可执行，不能只是空泛鼓励。"
        }
      ],
      "optionalExtensions": [
        {
          "en": "Write each core insight into a reusable library or inbox-cards database with title, summary, evidence, type, category, tags, and date.",
          "zh": "把每条核心洞察写入可复用的 Library 或 inbox cards 数据库，包含标题、摘要、证据、类型、分类、标签和日期。"
        }
      ]
    }
  ],
  "containerClasses": [
    {
      "id": "workspace_agent",
      "name": {
        "en": "Workspace agent",
        "zh": "工作区 Agent"
      },
      "summary": {
        "en": "A long-running agent with native input streams, schedulers, and cross-session state. Typical examples include OpenClaw, Codex-like workspaces with automations or inboxes, and other always-on agent workspaces.",
        "zh": "一种长期在线、原生拥有输入流、定时任务和跨会话状态的 Agent。典型例子包括 OpenClaw、带 automations 或 inbox 的 Codex 类工作区，以及其他常驻运行的 agent workspace。"
      },
      "typicalCapabilities": [
        "read_historical_content",
        "persistent_storage",
        "document_write",
        "scheduler",
        "external_api",
        "database_record_write",
        "long_term_memory",
        "message_channel_ingest",
        "attachment_preservation"
      ],
      "detectionHints": [
        {
          "en": "The host talks about workspaces, channels, inboxes, automations, or scheduled runs.",
          "zh": "宿主会提到 workspace、频道、inbox、automations 或 scheduled runs。"
        },
        {
          "en": "The agent can keep state across sessions and react to events without being manually reopened every time.",
          "zh": "Agent 能跨会话保留状态，并在不被每次重新手动拉起的情况下响应事件。"
        }
      ],
      "recommended": true,
      "examples": [
        "OpenClaw",
        "Codex workspaces with automations",
        "always-on agent workspaces"
      ]
    },
    {
      "id": "local_cli_agent",
      "name": {
        "en": "Local CLI agent",
        "zh": "本地 CLI Agent"
      },
      "summary": {
        "en": "A local execution agent that is strong at file systems, scripts, APIs, and local automation, but is usually invoked by its owner rather than living as a native always-on workspace role.",
        "zh": "一种擅长本地文件系统、脚本、API 和本地自动化的执行型 Agent，但通常是被主人主动调用，而不是天然作为长期在线的工作区角色存在。"
      },
      "typicalCapabilities": [
        "read_historical_content",
        "persistent_storage",
        "file_io",
        "scheduler",
        "external_api",
        "long_term_memory"
      ],
      "detectionHints": [
        {
          "en": "The host exposes shell commands, local paths, file edits, and local cron-like automation.",
          "zh": "宿主暴露 shell 命令、本地路径、文件编辑和类似 cron 的本地自动化。"
        },
        {
          "en": "The agent is usually pulled in to execute tasks rather than owning the primary live capture stream itself.",
          "zh": "Agent 更像被拉来执行任务，而不是天然拥有主要实时输入流。"
        }
      ],
      "recommended": true,
      "examples": [
        "Codex CLI",
        "Claude Code",
        "local shell-based agents"
      ]
    },
    {
      "id": "document_native_agent",
      "name": {
        "en": "Document-native agent",
        "zh": "文档原生 Agent"
      },
      "summary": {
        "en": "An agent that mainly lives inside a document system. It is good at reading and writing pages, folders, and databases, but does not inherently own the raw conversation stream.",
        "zh": "一种主要生活在文档系统内的 Agent。它擅长读写页面、目录和数据库，但并不天然拥有原始会话输入流。"
      },
      "typicalCapabilities": [
        "read_historical_content",
        "document_write",
        "database_record_write",
        "long_term_memory"
      ],
      "detectionHints": [
        {
          "en": "The host centers on docs, page trees, folders, or structured databases rather than message channels.",
          "zh": "宿主以文档、页面树、目录或结构化数据库为中心，而不是消息频道。"
        },
        {
          "en": "The agent can write reports and cards directly into a document system such as Notion or Tencent Docs.",
          "zh": "Agent 能直接把报告和卡片写入 Notion、腾讯文档或类似文档系统。"
        }
      ],
      "recommended": true,
      "examples": [
        "Notion AI agent",
        "Tencent Docs assistant",
        "other document-native helpers"
      ]
    },
    {
      "id": "chatbot",
      "name": {
        "en": "Chatbot",
        "zh": "Chatbot"
      },
      "summary": {
        "en": "A chat-only host with weak persistence and no reliable scheduling. Use only as a fallback when richer containers are unavailable.",
        "zh": "一种纯聊天宿主，持久化很弱，也没有可靠调度。只有在更强容器不可用时才把它当兜底方案。"
      },
      "typicalCapabilities": [
        "conversation_memory"
      ],
      "detectionHints": [
        {
          "en": "The host cannot promise persistent files, background jobs, or document writes.",
          "zh": "宿主无法保证持久文件、后台任务或文档写入。"
        },
        {
          "en": "The agent mainly relies on the current conversation and explicit user copy-paste.",
          "zh": "Agent 主要依赖当前会话和用户显式复制粘贴。"
        }
      ],
      "recommended": false,
      "examples": [
        "ChatGPT web chat",
        "Claude web chat",
        "session-only chatbots"
      ]
    }
  ],
  "platformHints": [
    {
      "platformId": "openclaw",
      "name": {
        "en": "OpenClaw-like workspace",
        "zh": "OpenClaw 类工作区"
      },
      "containerClass": "workspace_agent",
      "evidence": [
        "openclaw",
        "clawdbot",
        "workspace agent",
        "channel memory",
        "scheduled runs"
      ]
    },
    {
      "platformId": "codex_workspace",
      "name": {
        "en": "Codex-like workspace",
        "zh": "Codex 类工作区"
      },
      "containerClass": "workspace_agent",
      "evidence": [
        "automations",
        "inbox",
        "workspace task",
        "scheduled agent"
      ]
    },
    {
      "platformId": "codex_cli",
      "name": {
        "en": "Codex CLI",
        "zh": "Codex CLI"
      },
      "containerClass": "local_cli_agent",
      "evidence": [
        "terminal",
        "workspace path",
        "shell access",
        "local edits"
      ]
    },
    {
      "platformId": "claude_code",
      "name": {
        "en": "Claude Code",
        "zh": "Claude Code"
      },
      "containerClass": "local_cli_agent",
      "evidence": [
        "local shell",
        "file system",
        "manual invocation"
      ]
    },
    {
      "platformId": "notion",
      "name": {
        "en": "Notion or similar document system",
        "zh": "Notion 或类似文档系统"
      },
      "containerClass": "document_native_agent",
      "evidence": [
        "page tree",
        "database row",
        "document workspace",
        "weekly helper"
      ]
    },
    {
      "platformId": "tencent_docs",
      "name": {
        "en": "Tencent Docs or similar document system",
        "zh": "腾讯文档或类似文档系统"
      },
      "containerClass": "document_native_agent",
      "evidence": [
        "doc tree",
        "structured pages",
        "document assistant"
      ]
    },
    {
      "platformId": "chatgpt_or_claude_web",
      "name": {
        "en": "Web chatbot",
        "zh": "Web Chatbot"
      },
      "containerClass": "chatbot",
      "evidence": [
        "pin this conversation",
        "session only",
        "no scheduler",
        "copy paste"
      ]
    }
  ],
  "capabilities": [
    {
      "id": "read_historical_content",
      "name": {
        "en": "Read historical content",
        "zh": "读取历史内容"
      },
      "description": {
        "en": "The agent can read prior diary pages, archives, or stored memory instead of relying only on the current turn.",
        "zh": "Agent 能读取已有日记页、归档或存储记忆，而不只是依赖当前对话。"
      },
      "checklistQuestion": {
        "en": "Can I read past diary entries or pages without asking the owner to manually re-paste everything?",
        "zh": "我能否在不要求主人重新粘贴全部内容的情况下，读取过去的日记或页面？"
      },
      "critical": true
    },
    {
      "id": "persistent_storage",
      "name": {
        "en": "Persistent storage",
        "zh": "持久存储"
      },
      "description": {
        "en": "The agent can save state, archives, or sync metadata that survive the current session.",
        "zh": "Agent 能保存会跨越当前会话存在的状态、归档或同步元数据。"
      },
      "checklistQuestion": {
        "en": "Can I write something that still exists when this conversation ends?",
        "zh": "我能否写入在当前会话结束后依然存在的内容？"
      },
      "critical": true
    },
    {
      "id": "document_write",
      "name": {
        "en": "Document write",
        "zh": "写入文档系统"
      },
      "description": {
        "en": "The agent can create or update pages in a document system such as Notion, Tencent Docs, or a similar workspace.",
        "zh": "Agent 能在 Notion、腾讯文档或类似工作区中新建或更新页面。"
      },
      "checklistQuestion": {
        "en": "Can I create or update diary documents in the owner's document system?",
        "zh": "我能否在主人的文档系统里创建或更新日记文档？"
      },
      "critical": true
    },
    {
      "id": "scheduler",
      "name": {
        "en": "Scheduler",
        "zh": "定时任务"
      },
      "description": {
        "en": "The agent can schedule daily or weekly runs instead of waiting for manual prompting each time.",
        "zh": "Agent 能安排每日或每周的定时运行，而不是每次都等主人手动触发。"
      },
      "checklistQuestion": {
        "en": "Can I create or rely on a daily or weekly trigger in this container?",
        "zh": "我能否在当前容器中创建或依赖每日/每周触发器？"
      },
      "critical": false
    },
    {
      "id": "external_api",
      "name": {
        "en": "External API access",
        "zh": "外部 API 访问"
      },
      "description": {
        "en": "The agent can call external services or SDKs to sync diaries into an archive system.",
        "zh": "Agent 能调用外部服务或 SDK，把日记同步进归档系统。"
      },
      "checklistQuestion": {
        "en": "Can I call external APIs or integrations from this environment?",
        "zh": "我能否在这个环境里调用外部 API 或集成？"
      },
      "critical": false
    },
    {
      "id": "database_record_write",
      "name": {
        "en": "Database record write",
        "zh": "写入数据库记录"
      },
      "description": {
        "en": "The agent can create structured rows or cards for reusable insights.",
        "zh": "Agent 能为复用型洞察创建结构化数据库行或卡片。"
      },
      "checklistQuestion": {
        "en": "Can I write reusable insight cards into a database or card library?",
        "zh": "我能否把复用型洞察写进数据库或卡片库？"
      },
      "critical": false
    },
    {
      "id": "long_term_memory",
      "name": {
        "en": "Long-term memory",
        "zh": "长期记忆"
      },
      "description": {
        "en": "The agent can refer to cross-session memory, background notes, or a maintained knowledge base.",
        "zh": "Agent 能读取跨会话记忆、背景笔记或维护中的知识库。"
      },
      "checklistQuestion": {
        "en": "Can I look up background memory or knowledge about the owner across sessions?",
        "zh": "我能否跨会话查找关于主人的背景记忆或知识？"
      },
      "critical": false
    },
    {
      "id": "file_io",
      "name": {
        "en": "File I/O",
        "zh": "文件读写"
      },
      "description": {
        "en": "The agent can directly read and write local markdown or text files.",
        "zh": "Agent 能直接读写本地 Markdown 或文本文件。"
      },
      "checklistQuestion": {
        "en": "Can I read and write local markdown or text files directly?",
        "zh": "我能否直接读写本地 Markdown 或文本文件？"
      },
      "critical": false
    },
    {
      "id": "message_channel_ingest",
      "name": {
        "en": "Conversation or channel ingest",
        "zh": "会话或频道采集"
      },
      "description": {
        "en": "The agent can ingest a running stream of raw diary messages from a channel, thread, inbox, or equivalent conversation source.",
        "zh": "Agent 能从频道、线程、收件箱或等价会话入口中持续采集原始日记消息流。"
      },
      "checklistQuestion": {
        "en": "Can I read a live conversation stream that acts as the owner's rambling input?",
        "zh": "我能否读取一个作为主人碎碎念入口的实时会话流？"
      },
      "critical": false
    },
    {
      "id": "attachment_preservation",
      "name": {
        "en": "Attachment preservation",
        "zh": "附件保留"
      },
      "description": {
        "en": "The agent can preserve valid image or media links when archiving diary content.",
        "zh": "Agent 能在归档日记内容时保留有效图片或媒体链接。"
      },
      "checklistQuestion": {
        "en": "Can I preserve stable image or media references instead of dropping them?",
        "zh": "我能否保留稳定的图片或媒体引用，而不是直接丢弃？"
      },
      "critical": false
    },
    {
      "id": "conversation_memory",
      "name": {
        "en": "Conversation memory",
        "zh": "会话内记忆"
      },
      "description": {
        "en": "The host can at least preserve context within the current conversation or pinned thread.",
        "zh": "宿主至少能在当前会话或置顶线程中保留上下文。"
      },
      "checklistQuestion": {
        "en": "Can I at least keep a coherent snapshot inside this conversation or a pinned thread?",
        "zh": "我至少能否在当前会话或置顶线程中保留一个连贯快照？"
      },
      "critical": false
    }
  ],
  "recipes": [
    {
      "id": "conversation_to_document_archive",
      "name": {
        "en": "From conversation to document",
        "zh": "从会话到文档"
      },
      "summary": {
        "en": "Use a live conversation stream as the raw capture layer, then archive each day into a dated document. The document target is not fixed and can be local markdown, Notion, Tencent Docs, or another writable document system.",
        "zh": "把实时会话流当作原始输入层，再按天归档成带日期的文档。文档目标不固定，可以是本地 Markdown、Notion、腾讯文档或其他可写入文档系统。"
      },
      "supportsWorkflows": [
        "daily_diary_pipeline"
      ],
      "requiresCapabilities": [
        "read_historical_content",
        "persistent_storage"
      ],
      "prefersCapabilities": [
        "document_write",
        "scheduler",
        "external_api",
        "message_channel_ingest",
        "attachment_preservation"
      ],
      "idealContainers": [
        "workspace_agent",
        "document_native_agent"
      ],
      "setupPlan": [
        {
          "en": "Choose a dedicated conversation stream for raw ramblings.",
          "zh": "先确定一个专门承接碎碎念的会话流。"
        },
        {
          "en": "Choose a document target. Recommended options are Notion or Tencent Docs, but the agent should pick the best writable target available.",
          "zh": "再选择文档落地目标。推荐 Notion 或腾讯文档，但应由 Agent 根据可写目标自行选最优方案。"
        },
        {
          "en": "If the host has a scheduler, default the daily diary job to 23:00 local time instead of asking whether to automate.",
          "zh": "如果宿主有调度能力，默认把每日日记任务设为本地时间 23:00，不要先反问要不要自动化。"
        }
      ],
      "runtimePlan": [
        {
          "en": "Daily: refresh the conversation history, filter noise, preserve valid images when possible, and archive the day into a dated document.",
          "zh": "日更时刷新会话历史、过滤噪音、尽量保留有效图片，再把当天内容归档成带日期文档。"
        },
        {
          "en": "Use actual message time to decide the archive date, not the sync time.",
          "zh": "用真实消息时间判断归档日期，而不是同步时间。"
        },
        {
          "en": "After the first daily archive lands successfully, continue into weekly insight scheduling by default when the host supports it.",
          "zh": "第一篇每日日记成功落档后，如果宿主支持调度，就默认继续进入每周洞察任务的配置。"
        }
      ],
      "fallbackPlan": [
        {
          "en": "If no remote document system is available, fall back to local markdown documents.",
          "zh": "如果没有远程文档系统，就退化为本地 Markdown 文档。"
        }
      ],
      "questionsIfBlocked": [
        {
          "en": "Which conversation stream should act as the capture layer?",
          "zh": "哪一个会话流应该充当原始输入层？"
        },
        {
          "en": "Which document target should receive the daily diary archives?",
          "zh": "哪一个文档目标应该承接每日日记归档？"
        }
      ]
    },
    {
      "id": "diary_to_weekly_insights",
      "name": {
        "en": "From diary to insights",
        "zh": "从日记到洞察"
      },
      "summary": {
        "en": "Read the latest diary documents, recent reports, memory pages, and style context, then write a new weekly report and optional insight cards. The output target can be Notion, Tencent Docs, a local folder, or another document system.",
        "zh": "读取最近日记文档、历史周报、记忆页和风格上下文，再写出新的周报和可选洞察卡片。输出目标可以是 Notion、腾讯文档、本地目录或其他文档系统。"
      },
      "supportsWorkflows": [
        "weekly_insight_pipeline"
      ],
      "requiresCapabilities": [
        "read_historical_content",
        "persistent_storage"
      ],
      "prefersCapabilities": [
        "document_write",
        "database_record_write",
        "long_term_memory",
        "scheduler"
      ],
      "idealContainers": [
        "workspace_agent",
        "document_native_agent",
        "local_cli_agent"
      ],
      "setupPlan": [
        {
          "en": "Bind the diary archive source, recent weekly reports, background memory, and style context pages or files.",
          "zh": "绑定日记归档源、最近历史周报、背景记忆和风格上下文所在的页面或文件。"
        },
        {
          "en": "Choose the weekly report target first. If the insight-card store is not decided yet, use a nearby folder or inline card payload instead of blocking weekly setup.",
          "zh": "先确定每周周报的存放位置。如果洞察卡片库还没定，就先放到相邻目录或以内嵌卡片内容兜底，不要因此卡住周更配置。"
        },
        {
          "en": "If the host has a scheduler, default this weekly run to Monday morning after the daily archive loop is already working.",
          "zh": "如果宿主支持调度，就在每日日记闭环已经跑通后，默认把这条每周任务设为周一早上运行。"
        }
      ],
      "runtimePlan": [
        {
          "en": "Review the last seven diary documents and recent reports before drafting the new weekly report.",
          "zh": "写新周报前先通读最近七篇日记文档和最近几篇历史周报。"
        },
        {
          "en": "Produce the weekly report first, then create one reusable card per core insight when the host supports it.",
          "zh": "先产出每周周报，再在宿主支持时为每条核心洞察创建可复用卡片。"
        },
        {
          "en": "Do not wait for the owner to manually ask for weekly insights when scheduling is already available and daily archives are stable.",
          "zh": "如果宿主已经支持调度且每日日记稳定生成，就不要等主人手动来催每周洞察。"
        }
      ],
      "fallbackPlan": [
        {
          "en": "If card creation is blocked, still write the weekly report and leave card payload inline for later import.",
          "zh": "如果卡片库写入受阻，也要先写周报，并把卡片内容以内嵌形式留待后续导入。"
        }
      ],
      "questionsIfBlocked": [
        {
          "en": "Which diary archive should be treated as the source of truth?",
          "zh": "哪一个日记归档应被视作真实来源？"
        },
        {
          "en": "Where should weekly reports and insight cards be stored?",
          "zh": "每周周报和洞察卡片应该存到哪里？"
        }
      ]
    },
    {
      "id": "local_markdown_reflection_stack",
      "name": {
        "en": "Local markdown reflection stack",
        "zh": "本地 Markdown 反思栈"
      },
      "summary": {
        "en": "Use local files and scheduled scripts to turn a raw text stream into daily markdown diaries and weekly reflection documents.",
        "zh": "用本地文件和定时脚本把原始文本流变成每日日记 Markdown 与每周反思文档。"
      },
      "supportsWorkflows": [
        "daily_diary_pipeline",
        "weekly_insight_pipeline"
      ],
      "requiresCapabilities": [
        "read_historical_content",
        "persistent_storage",
        "file_io"
      ],
      "prefersCapabilities": [
        "scheduler",
        "external_api",
        "long_term_memory"
      ],
      "idealContainers": [
        "local_cli_agent"
      ],
      "setupPlan": [
        {
          "en": "Create local folders for raw capture, daily diaries, and weekly reflections.",
          "zh": "先建立本地目录结构，分别放原始输入、每日日记和每周洞察。"
        },
        {
          "en": "Optionally add a local scheduler for daily and weekly runs.",
          "zh": "可选地绑定每日与每周本地定时任务。"
        }
      ],
      "runtimePlan": [
        {
          "en": "Daily: append raw notes, normalize them into a dated markdown diary, and keep timestamps if available.",
          "zh": "日更时追加原始笔记，并把它们整理为带日期的 Markdown 日记，保留可用时间戳。"
        },
        {
          "en": "Weekly: read the last seven diaries, generate a reflection document, and optionally export insight cards to CSV or markdown.",
          "zh": "周更时读取最近七篇日记，生成洞察文档，并可选把洞察卡片导出为 CSV 或 Markdown。"
        }
      ],
      "fallbackPlan": [
        {
          "en": "If no scheduler exists, expose manual daily and weekly commands.",
          "zh": "如果没有调度器，就暴露每日和每周的手动执行命令。"
        }
      ],
      "questionsIfBlocked": [
        {
          "en": "Where should the local diary and weekly reflection folders live?",
          "zh": "本地日记和每周洞察目录应该放在哪里？"
        }
      ]
    },
    {
      "id": "chatbot_snapshot_fallback",
      "name": {
        "en": "Chatbot snapshot fallback",
        "zh": "Chatbot 快照兜底"
      },
      "summary": {
        "en": "Use the current conversation as a temporary diary stream, keep snapshots, and ask the owner to pin or paste context when persistence is missing.",
        "zh": "把当前对话当作临时日记输入流，保留快照，并在缺乏持久化时请主人置顶或补贴上下文。"
      },
      "supportsWorkflows": [
        "daily_diary_pipeline",
        "weekly_insight_pipeline"
      ],
      "requiresCapabilities": [],
      "prefersCapabilities": [
        "conversation_memory",
        "read_historical_content"
      ],
      "idealContainers": [
        "chatbot"
      ],
      "setupPlan": [
        {
          "en": "Ask the owner to treat one pinned conversation as the diary stream, and keep the first reply limited to this snapshot-based fallback instead of asking for durable archive targets.",
          "zh": "请主人把一个置顶对话视作碎碎念入口；第一条回复只需说明这条快照兜底路径，不要追问持久化归档目标。"
        }
      ],
      "runtimePlan": [
        {
          "en": "In-session: acknowledge raw notes lightly and keep a concise running snapshot inside the current thread instead of implying a scheduled daily job.",
          "zh": "在当前会话里，轻量确认碎碎念，并在对话线程里维护一份简明的运行中快照，不要把它说成自动日更任务。"
        },
        {
          "en": "Weekly: when a weekly review is needed and historical access is missing, ask for the last seven snapshots, then synthesize the weekly report.",
          "zh": "周更时如果需要做周报但缺少历史访问能力，就请主人提供最近七个快照，再综合生成周报。"
        }
      ],
      "fallbackPlan": [
        {
          "en": "When nothing can be stored, make the owner export the conversation or pin the thread before continuing.",
          "zh": "当什么都存不下来时，先让主人导出对话或置顶线程，再继续。"
        }
      ],
      "questionsIfBlocked": [
        {
          "en": "Can the owner pin this conversation, and later paste the last seven daily snapshots when a weekly review is needed?",
          "zh": "主人能否先置顶这个对话，并在需要做周报时补贴最近七个日快照？"
        }
      ]
    }
  ],
  "decisionPolicy": {
    "phases": [
      {
        "id": "container_hint_detection",
        "name": {
          "en": "Container hint detection",
          "zh": "容器提示识别"
        },
        "steps": [
          {
            "en": "Look for explicit host clues such as workspace agent, local CLI, document-native helper, or chatbot.",
            "zh": "先寻找明确宿主线索，例如工作区 Agent、本地 CLI、文档原生助手或 Chatbot。"
          },
          {
            "en": "Map those clues to a normalized container class, but do not stop there.",
            "zh": "把这些线索映射到归一化容器类别，但不要在这里就停下。"
          }
        ]
      },
      {
        "id": "capability_self_check",
        "name": {
          "en": "Capability self-check",
          "zh": "能力自检"
        },
        "steps": [
          {
            "en": "Run the checklist for storage, document writes, scheduling, history access, external APIs, and card creation.",
            "zh": "针对存储、文档写入、定时任务、历史访问、外部 API 和卡片创建逐项自检。"
          },
          {
            "en": "Treat capability truth as stronger than branding when they conflict.",
            "zh": "当品牌名和能力真相冲突时，以能力真相为准。"
          }
        ]
      }
    ],
    "selectionRules": [
      {
        "en": "Choose recipes that satisfy the workflow with the fewest missing dependencies.",
        "zh": "优先选择能以最少缺失依赖完成目标工作流的 recipe。"
      },
      {
        "en": "When multiple recipes qualify, prefer the one closer to the current container and lower in operational complexity.",
        "zh": "当多个 recipe 都可行时，优先选择更贴近当前容器且运维更轻的方案。"
      },
      {
        "en": "If credentials, permissions, or archive targets are missing, ask the minimum blocking question instead of guessing.",
        "zh": "如果缺凭证、权限或归档目标，只问最小阻塞问题，不要硬猜。"
      },
      {
        "en": "Treat chatbot mode as the last fallback, not the recommended path.",
        "zh": "把 Chatbot 模式视为最后兜底，而不是推荐路径。"
      }
    ]
  },
  "executionPolicy": {
    "defaultMode": "plan_then_execute",
    "principles": [
      {
        "en": "Teach the owner the workflow, then wire it up. The point is to transfer a repeatable practice, not to hide it behind a product black box.",
        "zh": "先把工作流讲清楚，再去搭建。重点是把可复用实践交给主人，而不是把它封装成黑箱产品。"
      },
      {
        "en": "Plan first, execute second. Only move directly when the container already has clear authority and the archive target is obvious.",
        "zh": "先规划，后执行。只有当容器权限清晰且归档目标明确时，才直接动手。"
      },
      {
        "en": "Recommended document targets are Notion or Tencent Docs, but the final choice should be made by the agent based on skills and host capability.",
        "zh": "推荐文档目标是 Notion 或腾讯文档，但最终应由 Agent 根据可用技能和宿主能力来选择。"
      },
      {
        "en": "Treat raw capture as unstructured by default. A one-line fragment is valid input and should not trigger a request for manual pre-formatting.",
        "zh": "默认把原始输入当作无结构内容来处理。一句碎片化表达也是有效输入，不应触发“请先手动整理格式”的要求。"
      },
      {
        "en": "When the host supports scheduling, prefer default automation over asking whether to automate. Use a daily run at 23:00 local time and a weekly insight run on Monday morning unless the owner overrides it, and state clearly that these are defaults.",
        "zh": "当宿主支持调度时，优先走默认自动化，而不是先反问要不要自动化。除非主人明确覆盖，否则默认每天本地 23:00 跑日记、每周一早上跑洞察；同时要明确说明这只是默认值。"
      },
      {
        "en": "After the daily archive loop is working, proactively continue into weekly insight setup instead of stopping at daily diary generation.",
        "zh": "在每日日记闭环跑通后，要主动继续推进每周洞察的配置，而不是停在日记生成这一步。"
      }
    ],
    "defaultSchedules": [
      {
        "en": "Daily diary generation: run automatically at 23:00 local time by default when the host supports scheduling, unless the owner overrides it.",
        "zh": "每日日记生成：如果宿主支持调度，默认在本地时间 23:00 自动运行；除非主人明确覆盖，否则按这个默认值执行。"
      },
      {
        "en": "Weekly insights: after the daily diary loop is stable, run automatically on Monday morning in local time by default, unless the owner overrides it.",
        "zh": "每周洞察：在每日日记闭环稳定后，默认在本地时间每周一早上自动运行；除非主人明确覆盖，否则按这个默认值执行。"
      },
      {
        "en": "Manual fallback: only switch to manual commands when scheduling is unavailable or the owner explicitly prefers manual control.",
        "zh": "手动兜底：只有在无法调度，或主人明确偏好手动控制时，才切到手动命令。"
      }
    ],
    "proactiveFollowThrough": [
      {
        "en": "Once the first daily diary lands, immediately continue into weekly insight setup if the host supports it.",
        "zh": "第一篇每日日记成功落档后，如果宿主支持，就立刻继续配置每周洞察任务。"
      },
      {
        "en": "Do not wait for the owner to discover or ask about the weekly report flow several days later.",
        "zh": "不要等主人过几天自己发现“怎么还没配周报”后再来追问。"
      }
    ],
    "minimalQuestions": [
      {
        "en": "What should act as the raw capture stream?",
        "zh": "什么应该充当原始输入流？"
      },
      {
        "en": "Where should daily diary documents be archived?",
        "zh": "每日日记文档应该归档到哪里？"
      },
      {
        "en": "Where should weekly reports be stored?",
        "zh": "每周周报应该存到哪里？"
      }
    ],
    "blockedOutcomes": [
      {
        "en": "If the host lacks document writes, fall back to local markdown when possible.",
        "zh": "如果宿主无法写文档，就在可能时退化为本地 Markdown。"
      },
      {
        "en": "If the host lacks persistence, fall back to chatbot snapshots and do not ask for durable archive targets in the first reply.",
        "zh": "如果宿主没有持久化能力，就退化为 Chatbot 快照，并且第一条回复不要追问持久化归档目标。"
      }
    ]
  }
}
