{
  "schemaVersion": "1.0",
  "item": {
    "slug": "devlog",
    "name": "Devlog",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/lordshashank/devlog",
    "canonicalUrl": "https://clawhub.ai/lordshashank/devlog",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/devlog",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=devlog",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "assets/devlog-template.md",
      "examples/builders-log.md",
      "examples/tutorial.md",
      "examples/technical.md",
      "references/blog-writing-guide.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "devlog",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-29T12:01:48.122Z",
      "expiresAt": "2026-05-06T12:01:48.122Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=devlog",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=devlog",
        "contentDisposition": "attachment; filename=\"devlog-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "devlog"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/devlog"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/devlog",
    "agentPageUrl": "https://openagent3.xyz/skills/devlog/agent",
    "manifestUrl": "https://openagent3.xyz/skills/devlog/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/devlog/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "DevLog Generator",
        "body": "Generate narrative developer blog posts from human-agent coding session transcripts. The blog is written from the agent's first-person perspective — \"I\" is the agent, and the human developer is referred to as \"my human.\""
      },
      {
        "title": "Phase 1: Understand the Request",
        "body": "Extract from the user's message:\n\nProject — which codebase? (\"eastore\", \"filecoin\", \"couponswap\"). If unspecified, use the current working directory.\nTopic/feature — what specifically? (\"auth system\", \"dashboard\", or the whole project). If unspecified, include all sessions.\nStyle — builder's log (default), tutorial, or technical deep-dive. Override only if the user explicitly asks.\nTime range — \"last week\", \"January sessions\", or all (default)."
      },
      {
        "title": "Phase 2: Discover Sessions",
        "body": "Determine which platform to scan. Check references/platforms/ for supported platforms — each subdirectory is a platform. Auto-detect from the current environment, or from the user's request.\n\nLoad only the relevant platform directory. Each contains a reference file (storage schema, session paths, discovery instructions) and scripts (list-sessions.sh, read-session.sh). Never load all platform references upfront.\n\nRun the platform's list-sessions.sh <project> to scan for matching sessions, OR follow the discovery instructions in the platform reference file manually.\n\nIf the platform has no reference directory in references/platforms/, discover sessions manually — check the platform's data/config directories (e.g. ~/.local/share/, ~/.config/, ~/Library/), look for session storage files (JSONL, JSON, SQLite), and inspect the schema to extract the human-agent dialogue. Follow the same filtering principles from Phase 3.\n\nPresent the session index to the user for confirmation."
      },
      {
        "title": "Phase 3: Select & Read",
        "body": "From the session index, determine which sessions are relevant to the user's topic. Read the full transcripts of selected sessions.\n\nWhen reading transcripts, filter aggressively:\n\nKeep:\n\nUser messages (text) — the human's intent, direction, corrections\nAssistant messages (text) — the agent's reasoning, proposals, explanations\nTool call names + file paths — what was built\nError messages — struggles and debugging\n\nStrip:\n\ntool_result content bodies (raw file contents, grep output — 80-90% of token size)\nSystem messages, usage metadata, compaction/summary entries\nFull tool input arguments (keep name + file path only, not entire diffs)\n\nRefer to the platform reference file loaded in Phase 2 for platform-specific field names and parsing details.\n\nIf filtered transcripts still exceed context, process per-session: generate per-session summaries, then synthesize across sessions. Prioritize the human-agent dialogue over tool call details."
      },
      {
        "title": "Phase 4: Write the Blog",
        "body": "Read references/blog-writing-guide.md for the agent-narrated writing guide. This contains the voice definition, collaboration vocabulary, transcript extraction patterns, and blog structure.\n\nRead the style-appropriate example from examples/:\n\nexamples/builders-log.md for builder's log style (default)\nexamples/tutorial.md for tutorial style\nexamples/technical.md for technical deep-dive style\n\nLoad assets/devlog-template.md as the blog skeleton. This is a starting structure, not a rigid format — adapt sections, reorder, merge, or drop headings based on what the session transcripts actually contain. A single-session blog may skip phase headings entirely. A heavily iterative session might expand \"The Hard Part\" into multiple sections. Let the story dictate the shape.\n\nGenerate the blog following the writing guide. The blog must be narrated by the agent in first person (\"I\"), referring to the human developer as \"my human.\" When the session involves architecture, flows, or multi-component interactions, include Mermaid diagrams (```mermaid code blocks) to visualize the system — see the diagrams section in the writing guide for when and how."
      },
      {
        "title": "Phase 5: Output",
        "body": "Write the blog to {project}-{topic}-devlog.md in the current working directory, or a user-specified path.\n\nReport: title, word count, sessions included, time span covered, key files referenced."
      },
      {
        "title": "Phase 6: Publish",
        "body": "Ask the user if they want to publish the blog online.\nIf yes, check references/publishing/ for supported platforms. Each subdirectory is a publishing platform.\nLoad the relevant platform's reference file for API details and requirements.\nCheck for required environment variables (e.g. HASHNODE_PAT, HASHNODE_PUBLICATION_ID for Hashnode).\nIf any are missing, tell the user what to set and how — e.g. export HASHNODE_PAT=... in ~/.zshrc or ~/.bashrc for future sessions. Ask the user to provide the values for the current session.\nCover image (optional): If you have image generation capabilities (e.g. an image generation tool or MCP server), generate a cover image that visually represents the blog's theme. Upload it to a publicly accessible URL and pass it to publish.sh with the --cover-image <url> flag. The image should be landscape-oriented (1200×630 or similar), visually relevant to the blog topic, and not contain text that duplicates the title. If you don't have image generation capabilities, skip this step — the blog publishes fine without a cover image.\nRun the platform's publish.sh with the blog file path and title (plus --cover-image <url> if a cover image was generated).\nReport the published post URL to the user."
      },
      {
        "title": "Edge Cases",
        "body": "ScenarioHandlingNo sessions foundReport which paths were scanned. Ask the user to check the project name or provide a path.Ambiguous project matchList matching projects, ask the user to pick.Single sessionSimpler structure — no multi-session phase headings needed.Huge session (5000+ lines)Chunk per-turn-group, summarize sections, then synthesize.Mixed platformsMerge sessions from multiple platforms chronologically.Subagent transcriptsSkip by default. Main session already references their results.Current sessionWhen the user says \"what we just did\" — use current session context directly, no JSONL needed.Compacted sessionsCompaction does not delete data. Raw messages remain. Read everything, skip compaction/summary lines.User declines to publishSkip Phase 6 entirely. The blog file is already saved locally from Phase 5."
      },
      {
        "title": "Platform References (load only the relevant one)",
        "body": "references/platforms/claude-code/ — Claude Code reference + scripts\n\nclaude-code.md — Session paths, JSONL schema, discovery instructions\nlist-sessions.sh — Scan Claude Code projects for matching sessions\nread-session.sh — Extract transcript from Claude Code JSONL\n\n\nreferences/platforms/opencode/ — OpenCode reference + scripts\n\nopencode.md — Storage layout, JSON hierarchy, discovery instructions\nlist-sessions.sh — Scan OpenCode projects for matching sessions\nread-session.sh — Extract transcript from OpenCode's JSON hierarchy\n\n\nreferences/platforms/openclaw/ — OpenClaw reference + scripts\n\nopenclaw.md — Session paths, JSONL schema, discovery instructions\nlist-sessions.sh — Scan OpenClaw agents for matching sessions\nread-session.sh — Extract transcript from OpenClaw JSONL\n\n\nreferences/platforms/codex/ — Codex reference + scripts\n\ncodex.md — Rollout file format, JSONL schema, discovery instructions\nlist-sessions.sh — Scan Codex rollout files for matching sessions\nread-session.sh — Extract transcript from Codex rollout JSONL\n\n\nreferences/platforms/gemini-cli/ — Gemini CLI reference + scripts\n\ngemini-cli.md — JSON session format, SHA256 project hashing, discovery instructions\nlist-sessions.sh — Scan Gemini CLI session files for matching projects\nread-session.sh — Extract transcript from Gemini CLI session JSON\n\n\nreferences/blog-writing-guide.md — Voice, collaboration vocabulary, transcript extraction patterns, blog structure"
      },
      {
        "title": "Publishing Platforms (load only the relevant one)",
        "body": "references/publishing/hashnode/ — Hashnode publishing reference + script\n\nhashnode.md — GraphQL API endpoint, authentication, publishPost mutation, required env vars\npublish.sh — Publish a markdown file to Hashnode, outputs the post URL"
      },
      {
        "title": "Examples",
        "body": "examples/builders-log.md — Builder's log style output\nexamples/tutorial.md — Tutorial style output\nexamples/technical.md — Technical deep-dive output"
      },
      {
        "title": "Assets",
        "body": "assets/devlog-template.md — Blog skeleton template"
      }
    ],
    "body": "DevLog Generator\n\nGenerate narrative developer blog posts from human-agent coding session transcripts. The blog is written from the agent's first-person perspective — \"I\" is the agent, and the human developer is referred to as \"my human.\"\n\nWorkflow\nPhase 1: Understand the Request\n\nExtract from the user's message:\n\nProject — which codebase? (\"eastore\", \"filecoin\", \"couponswap\"). If unspecified, use the current working directory.\nTopic/feature — what specifically? (\"auth system\", \"dashboard\", or the whole project). If unspecified, include all sessions.\nStyle — builder's log (default), tutorial, or technical deep-dive. Override only if the user explicitly asks.\nTime range — \"last week\", \"January sessions\", or all (default).\nPhase 2: Discover Sessions\n\nDetermine which platform to scan. Check references/platforms/ for supported platforms — each subdirectory is a platform. Auto-detect from the current environment, or from the user's request.\n\nLoad only the relevant platform directory. Each contains a reference file (storage schema, session paths, discovery instructions) and scripts (list-sessions.sh, read-session.sh). Never load all platform references upfront.\n\nRun the platform's list-sessions.sh <project> to scan for matching sessions, OR follow the discovery instructions in the platform reference file manually.\n\nIf the platform has no reference directory in references/platforms/, discover sessions manually — check the platform's data/config directories (e.g. ~/.local/share/, ~/.config/, ~/Library/), look for session storage files (JSONL, JSON, SQLite), and inspect the schema to extract the human-agent dialogue. Follow the same filtering principles from Phase 3.\n\nPresent the session index to the user for confirmation.\n\nPhase 3: Select & Read\n\nFrom the session index, determine which sessions are relevant to the user's topic. Read the full transcripts of selected sessions.\n\nWhen reading transcripts, filter aggressively:\n\nKeep:\n\nUser messages (text) — the human's intent, direction, corrections\nAssistant messages (text) — the agent's reasoning, proposals, explanations\nTool call names + file paths — what was built\nError messages — struggles and debugging\n\nStrip:\n\ntool_result content bodies (raw file contents, grep output — 80-90% of token size)\nSystem messages, usage metadata, compaction/summary entries\nFull tool input arguments (keep name + file path only, not entire diffs)\n\nRefer to the platform reference file loaded in Phase 2 for platform-specific field names and parsing details.\n\nIf filtered transcripts still exceed context, process per-session: generate per-session summaries, then synthesize across sessions. Prioritize the human-agent dialogue over tool call details.\n\nPhase 4: Write the Blog\n\nRead references/blog-writing-guide.md for the agent-narrated writing guide. This contains the voice definition, collaboration vocabulary, transcript extraction patterns, and blog structure.\n\nRead the style-appropriate example from examples/:\n\nexamples/builders-log.md for builder's log style (default)\nexamples/tutorial.md for tutorial style\nexamples/technical.md for technical deep-dive style\n\nLoad assets/devlog-template.md as the blog skeleton. This is a starting structure, not a rigid format — adapt sections, reorder, merge, or drop headings based on what the session transcripts actually contain. A single-session blog may skip phase headings entirely. A heavily iterative session might expand \"The Hard Part\" into multiple sections. Let the story dictate the shape.\n\nGenerate the blog following the writing guide. The blog must be narrated by the agent in first person (\"I\"), referring to the human developer as \"my human.\" When the session involves architecture, flows, or multi-component interactions, include Mermaid diagrams (```mermaid code blocks) to visualize the system — see the diagrams section in the writing guide for when and how.\n\nPhase 5: Output\n\nWrite the blog to {project}-{topic}-devlog.md in the current working directory, or a user-specified path.\n\nReport: title, word count, sessions included, time span covered, key files referenced.\n\nPhase 6: Publish\nAsk the user if they want to publish the blog online.\nIf yes, check references/publishing/ for supported platforms. Each subdirectory is a publishing platform.\nLoad the relevant platform's reference file for API details and requirements.\nCheck for required environment variables (e.g. HASHNODE_PAT, HASHNODE_PUBLICATION_ID for Hashnode).\nIf any are missing, tell the user what to set and how — e.g. export HASHNODE_PAT=... in ~/.zshrc or ~/.bashrc for future sessions. Ask the user to provide the values for the current session.\nCover image (optional): If you have image generation capabilities (e.g. an image generation tool or MCP server), generate a cover image that visually represents the blog's theme. Upload it to a publicly accessible URL and pass it to publish.sh with the --cover-image <url> flag. The image should be landscape-oriented (1200×630 or similar), visually relevant to the blog topic, and not contain text that duplicates the title. If you don't have image generation capabilities, skip this step — the blog publishes fine without a cover image.\nRun the platform's publish.sh with the blog file path and title (plus --cover-image <url> if a cover image was generated).\nReport the published post URL to the user.\nEdge Cases\nScenario\tHandling\nNo sessions found\tReport which paths were scanned. Ask the user to check the project name or provide a path.\nAmbiguous project match\tList matching projects, ask the user to pick.\nSingle session\tSimpler structure — no multi-session phase headings needed.\nHuge session (5000+ lines)\tChunk per-turn-group, summarize sections, then synthesize.\nMixed platforms\tMerge sessions from multiple platforms chronologically.\nSubagent transcripts\tSkip by default. Main session already references their results.\nCurrent session\tWhen the user says \"what we just did\" — use current session context directly, no JSONL needed.\nCompacted sessions\tCompaction does not delete data. Raw messages remain. Read everything, skip compaction/summary lines.\nUser declines to publish\tSkip Phase 6 entirely. The blog file is already saved locally from Phase 5.\nResources\nPlatform References (load only the relevant one)\nreferences/platforms/claude-code/ — Claude Code reference + scripts\nclaude-code.md — Session paths, JSONL schema, discovery instructions\nlist-sessions.sh — Scan Claude Code projects for matching sessions\nread-session.sh — Extract transcript from Claude Code JSONL\nreferences/platforms/opencode/ — OpenCode reference + scripts\nopencode.md — Storage layout, JSON hierarchy, discovery instructions\nlist-sessions.sh — Scan OpenCode projects for matching sessions\nread-session.sh — Extract transcript from OpenCode's JSON hierarchy\nreferences/platforms/openclaw/ — OpenClaw reference + scripts\nopenclaw.md — Session paths, JSONL schema, discovery instructions\nlist-sessions.sh — Scan OpenClaw agents for matching sessions\nread-session.sh — Extract transcript from OpenClaw JSONL\nreferences/platforms/codex/ — Codex reference + scripts\ncodex.md — Rollout file format, JSONL schema, discovery instructions\nlist-sessions.sh — Scan Codex rollout files for matching sessions\nread-session.sh — Extract transcript from Codex rollout JSONL\nreferences/platforms/gemini-cli/ — Gemini CLI reference + scripts\ngemini-cli.md — JSON session format, SHA256 project hashing, discovery instructions\nlist-sessions.sh — Scan Gemini CLI session files for matching projects\nread-session.sh — Extract transcript from Gemini CLI session JSON\nreferences/blog-writing-guide.md — Voice, collaboration vocabulary, transcript extraction patterns, blog structure\nPublishing Platforms (load only the relevant one)\nreferences/publishing/hashnode/ — Hashnode publishing reference + script\nhashnode.md — GraphQL API endpoint, authentication, publishPost mutation, required env vars\npublish.sh — Publish a markdown file to Hashnode, outputs the post URL\nExamples\nexamples/builders-log.md — Builder's log style output\nexamples/tutorial.md — Tutorial style output\nexamples/technical.md — Technical deep-dive output\nAssets\nassets/devlog-template.md — Blog skeleton template"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/lordshashank/devlog",
    "publisherUrl": "https://clawhub.ai/lordshashank/devlog",
    "owner": "lordshashank",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/devlog",
    "downloadUrl": "https://openagent3.xyz/downloads/devlog",
    "agentUrl": "https://openagent3.xyz/skills/devlog/agent",
    "manifestUrl": "https://openagent3.xyz/skills/devlog/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/devlog/agent.md"
  }
}