{
  "agent:main:main": {
    "sessionId": "8991dc82-fa24-4cc2-b837-3663175e9d3e",
    "updatedAt": 1775500582179,
    "systemSent": true,
    "abortedLastRun": false,
    "chatType": "direct",
    "deliveryContext": {
      "to": "7377499346"
    },
    "lastTo": "7377499346",
    "origin": {
      "label": "7377499346",
      "provider": "heartbeat",
      "from": "7377499346",
      "to": "7377499346"
    },
    "sessionFile": "/root/.clawdbot-herald/agents/main/sessions/8991dc82-fa24-4cc2-b837-3663175e9d3e.jsonl",
    "compactionCount": 0,
    "skillsSnapshot": {
      "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n  <skill>\n    <name>clawflow</name>\n    <description>Use when work should span one or more detached tasks but still behave like one job with a single owner context. ClawFlow is the runtime substrate under authoring layers like Lobster, acpx, or plain code. Keep conditional logic in the caller; use ClawFlow for flow identity, waiting, outputs, and user-facing emergence.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/clawflow/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>clawflow-inbox-triage</name>\n    <description>Example ClawFlow authoring pattern for inbox triage. Use when messages need different treatment based on intent, with some routes notifying immediately, some waiting on outside answers, and others rolling into a later summary.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/clawflow-inbox-triage/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>coding-agent</name>\n    <description>Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large codebases, (4) iterative coding that needs file exploration. NOT for: simple one-liner fixes (just edit), reading code (use read tool), thread-bound ACP harness requests in chat (for example spawn/run Codex or Claude Code in a Discord thread; use sessions_spawn with runtime:&quot;acp&quot;), or any work in ~/clawd workspace (never spawn agents here). Claude Code: use --print --permission-mode bypassPermissions (no PTY). Codex/Pi/OpenCode: pty:true required.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/coding-agent/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>gh-issues</name>\n    <description>Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]</description>\n    <location>/usr/lib/node_modules/openclaw/skills/gh-issues/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>github</name>\n    <description>GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries. Use when: (1) checking PR status or CI, (2) creating/commenting on issues, (3) listing/filtering PRs or issues, (4) viewing run logs. NOT for: complex web UI interactions requiring manual browser flows (use browser tooling when available), bulk operations across many repos (script with gh api), or when gh auth is not configured.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/github/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>healthcheck</name>\n    <description>Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).</description>\n    <location>/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>mcporter</name>\n    <description>Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/mcporter/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>node-connect</name>\n    <description>Diagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps. Use when QR/setup code/manual connect fails, local Wi-Fi works but VPS/tailnet does not, or errors mention pairing required, unauthorized, bootstrap token invalid or expired, gateway.bind, gateway.remote.url, Tailscale, or plugins.entries.device-pair.config.publicUrl.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/node-connect/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>openai-whisper</name>\n    <description>Local speech-to-text with the Whisper CLI (no API key).</description>\n    <location>/usr/lib/node_modules/openclaw/skills/openai-whisper/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>openai-whisper-api</name>\n    <description>Transcribe audio via OpenAI Audio Transcriptions API (Whisper).</description>\n    <location>/usr/lib/node_modules/openclaw/skills/openai-whisper-api/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>skill-creator</name>\n    <description>Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like &quot;create a skill&quot;, &quot;author a skill&quot;, &quot;tidy up a skill&quot;, &quot;improve this skill&quot;, &quot;review the skill&quot;, &quot;clean up the skill&quot;, &quot;audit the skill&quot;.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/skill-creator/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>tmux</name>\n    <description>Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/tmux/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>video-frames</name>\n    <description>Extract frames or short clips from videos using ffmpeg.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/video-frames/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>weather</name>\n    <description>Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/weather/SKILL.md</location>\n  </skill>\n</available_skills>",
      "skills": [
        {
          "name": "clawflow"
        },
        {
          "name": "clawflow-inbox-triage"
        },
        {
          "name": "coding-agent",
          "requiredEnv": []
        },
        {
          "name": "gh-issues",
          "primaryEnv": "GH_TOKEN",
          "requiredEnv": []
        },
        {
          "name": "github",
          "requiredEnv": []
        },
        {
          "name": "healthcheck"
        },
        {
          "name": "mcporter",
          "requiredEnv": []
        },
        {
          "name": "node-connect"
        },
        {
          "name": "openai-whisper",
          "requiredEnv": []
        },
        {
          "name": "openai-whisper-api",
          "primaryEnv": "OPENAI_API_KEY",
          "requiredEnv": [
            "OPENAI_API_KEY"
          ]
        },
        {
          "name": "skill-creator"
        },
        {
          "name": "tmux",
          "requiredEnv": []
        },
        {
          "name": "video-frames",
          "requiredEnv": []
        },
        {
          "name": "weather",
          "requiredEnv": []
        }
      ],
      "resolvedSkills": [
        {
          "name": "clawflow",
          "description": "Use when work should span one or more detached tasks but still behave like one job with a single owner context. ClawFlow is the runtime substrate under authoring layers like Lobster, acpx, or plain code. Keep conditional logic in the caller; use ClawFlow for flow identity, waiting, outputs, and user-facing emergence.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/clawflow/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/clawflow",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "clawflow-inbox-triage",
          "description": "Example ClawFlow authoring pattern for inbox triage. Use when messages need different treatment based on intent, with some routes notifying immediately, some waiting on outside answers, and others rolling into a later summary.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/clawflow-inbox-triage/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/clawflow-inbox-triage",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "coding-agent",
          "description": "Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large codebases, (4) iterative coding that needs file exploration. NOT for: simple one-liner fixes (just edit), reading code (use read tool), thread-bound ACP harness requests in chat (for example spawn/run Codex or Claude Code in a Discord thread; use sessions_spawn with runtime:\"acp\"), or any work in ~/clawd workspace (never spawn agents here). Claude Code: use --print --permission-mode bypassPermissions (no PTY). Codex/Pi/OpenCode: pty:true required.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/coding-agent/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/coding-agent",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "gh-issues",
          "description": "Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]",
          "filePath": "/usr/lib/node_modules/openclaw/skills/gh-issues/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/gh-issues",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "github",
          "description": "GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries. Use when: (1) checking PR status or CI, (2) creating/commenting on issues, (3) listing/filtering PRs or issues, (4) viewing run logs. NOT for: complex web UI interactions requiring manual browser flows (use browser tooling when available), bulk operations across many repos (script with gh api), or when gh auth is not configured.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/github/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/github",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "healthcheck",
          "description": "Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).",
          "filePath": "/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/healthcheck",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "mcporter",
          "description": "Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/mcporter/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/mcporter",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "node-connect",
          "description": "Diagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps. Use when QR/setup code/manual connect fails, local Wi-Fi works but VPS/tailnet does not, or errors mention pairing required, unauthorized, bootstrap token invalid or expired, gateway.bind, gateway.remote.url, Tailscale, or plugins.entries.device-pair.config.publicUrl.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/node-connect/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/node-connect",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "openai-whisper",
          "description": "Local speech-to-text with the Whisper CLI (no API key).",
          "filePath": "/usr/lib/node_modules/openclaw/skills/openai-whisper/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/openai-whisper",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "openai-whisper-api",
          "description": "Transcribe audio via OpenAI Audio Transcriptions API (Whisper).",
          "filePath": "/usr/lib/node_modules/openclaw/skills/openai-whisper-api/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/openai-whisper-api",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "skill-creator",
          "description": "Create, edit, improve, or audit AgentSkills. Use when creating a new skill from scratch or when asked to improve, review, audit, tidy up, or clean up an existing skill or SKILL.md file. Also use when editing or restructuring a skill directory (moving files to references/ or scripts/, removing stale content, validating against the AgentSkills spec). Triggers on phrases like \"create a skill\", \"author a skill\", \"tidy up a skill\", \"improve this skill\", \"review the skill\", \"clean up the skill\", \"audit the skill\".",
          "filePath": "/usr/lib/node_modules/openclaw/skills/skill-creator/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/skill-creator",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "tmux",
          "description": "Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/tmux/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/tmux",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "video-frames",
          "description": "Extract frames or short clips from videos using ffmpeg.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/video-frames/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/video-frames",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "weather",
          "description": "Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/weather/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/weather",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        }
      ],
      "version": 0
    },
    "authProfileOverride": "google:default",
    "authProfileOverrideSource": "auto",
    "authProfileOverrideCompactionCount": 0
  },
  "agent:main:openai:0778132e-e3c6-4ed3-94bf-8a0b109a99fb": {
    "sessionId": "286e6e1c-012a-4b52-898a-85eeace0c544",
    "updatedAt": 1772532371511,
    "skillsSnapshot": {
      "prompt": "\n\nThe following skills provide specialized instructions for specific tasks.\nUse the read tool to load a skill's file when the task matches its description.\nWhen a skill file references a relative path, resolve it against the skill directory (parent of SKILL.md / dirname of the path) and use that absolute path in tool commands.\n\n<available_skills>\n  <skill>\n    <name>coding-agent</name>\n    <description>Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large codebases, (4) iterative coding that needs file exploration. NOT for: simple one-liner fixes (just edit), reading code (use read tool), thread-bound ACP harness requests in chat (for example spawn/run Codex or Claude Code in a Discord thread; use sessions_spawn with runtime:&quot;acp&quot;), or any work in ~/clawd workspace (never spawn agents here). Requires a bash tool that supports pty:true.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/coding-agent/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>gh-issues</name>\n    <description>Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]</description>\n    <location>/usr/lib/node_modules/openclaw/skills/gh-issues/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>github</name>\n    <description>GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries. Use when: (1) checking PR status or CI, (2) creating/commenting on issues, (3) listing/filtering PRs or issues, (4) viewing run logs. NOT for: complex web UI interactions requiring manual browser flows (use browser tooling when available), bulk operations across many repos (script with gh api), or when gh auth is not configured.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/github/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>healthcheck</name>\n    <description>Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).</description>\n    <location>/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>mcporter</name>\n    <description>Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/mcporter/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>openai-image-gen</name>\n    <description>Batch-generate images via OpenAI Images API. Random prompt sampler + `index.html` gallery.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/openai-image-gen/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>openai-whisper</name>\n    <description>Local speech-to-text with the Whisper CLI (no API key).</description>\n    <location>/usr/lib/node_modules/openclaw/skills/openai-whisper/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>openai-whisper-api</name>\n    <description>Transcribe audio via OpenAI Audio Transcriptions API (Whisper).</description>\n    <location>/usr/lib/node_modules/openclaw/skills/openai-whisper-api/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>skill-creator</name>\n    <description>Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/skill-creator/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>tmux</name>\n    <description>Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/tmux/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>video-frames</name>\n    <description>Extract frames or short clips from videos using ffmpeg.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/video-frames/SKILL.md</location>\n  </skill>\n  <skill>\n    <name>weather</name>\n    <description>Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.</description>\n    <location>/usr/lib/node_modules/openclaw/skills/weather/SKILL.md</location>\n  </skill>\n</available_skills>",
      "skills": [
        {
          "name": "coding-agent",
          "requiredEnv": []
        },
        {
          "name": "gh-issues",
          "primaryEnv": "GH_TOKEN",
          "requiredEnv": []
        },
        {
          "name": "github",
          "requiredEnv": []
        },
        {
          "name": "healthcheck"
        },
        {
          "name": "mcporter",
          "requiredEnv": []
        },
        {
          "name": "openai-image-gen",
          "primaryEnv": "OPENAI_API_KEY",
          "requiredEnv": [
            "OPENAI_API_KEY"
          ]
        },
        {
          "name": "openai-whisper",
          "requiredEnv": []
        },
        {
          "name": "openai-whisper-api",
          "primaryEnv": "OPENAI_API_KEY",
          "requiredEnv": [
            "OPENAI_API_KEY"
          ]
        },
        {
          "name": "skill-creator"
        },
        {
          "name": "tmux",
          "requiredEnv": []
        },
        {
          "name": "video-frames",
          "requiredEnv": []
        },
        {
          "name": "weather",
          "requiredEnv": []
        }
      ],
      "resolvedSkills": [
        {
          "name": "coding-agent",
          "description": "Delegate coding tasks to Codex, Claude Code, or Pi agents via background process. Use when: (1) building/creating new features or apps, (2) reviewing PRs (spawn in temp dir), (3) refactoring large codebases, (4) iterative coding that needs file exploration. NOT for: simple one-liner fixes (just edit), reading code (use read tool), thread-bound ACP harness requests in chat (for example spawn/run Codex or Claude Code in a Discord thread; use sessions_spawn with runtime:\"acp\"), or any work in ~/clawd workspace (never spawn agents here). Requires a bash tool that supports pty:true.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/coding-agent/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/coding-agent",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "gh-issues",
          "description": "Fetch GitHub issues, spawn sub-agents to implement fixes and open PRs, then monitor and address PR review comments. Usage: /gh-issues [owner/repo] [--label bug] [--limit 5] [--milestone v1.0] [--assignee @me] [--fork user/repo] [--watch] [--interval 5] [--reviews-only] [--cron] [--dry-run] [--model glm-5] [--notify-channel -1002381931352]",
          "filePath": "/usr/lib/node_modules/openclaw/skills/gh-issues/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/gh-issues",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "github",
          "description": "GitHub operations via `gh` CLI: issues, PRs, CI runs, code review, API queries. Use when: (1) checking PR status or CI, (2) creating/commenting on issues, (3) listing/filtering PRs or issues, (4) viewing run logs. NOT for: complex web UI interactions requiring manual browser flows (use browser tooling when available), bulk operations across many repos (script with gh api), or when gh auth is not configured.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/github/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/github",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "healthcheck",
          "description": "Host security hardening and risk-tolerance configuration for OpenClaw deployments. Use when a user asks for security audits, firewall/SSH/update hardening, risk posture, exposure review, OpenClaw cron scheduling for periodic checks, or version status checks on a machine running OpenClaw (laptop, workstation, Pi, VPS).",
          "filePath": "/usr/lib/node_modules/openclaw/skills/healthcheck/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/healthcheck",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "mcporter",
          "description": "Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/mcporter/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/mcporter",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "openai-image-gen",
          "description": "Batch-generate images via OpenAI Images API. Random prompt sampler + `index.html` gallery.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/openai-image-gen/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/openai-image-gen",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "openai-whisper",
          "description": "Local speech-to-text with the Whisper CLI (no API key).",
          "filePath": "/usr/lib/node_modules/openclaw/skills/openai-whisper/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/openai-whisper",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "openai-whisper-api",
          "description": "Transcribe audio via OpenAI Audio Transcriptions API (Whisper).",
          "filePath": "/usr/lib/node_modules/openclaw/skills/openai-whisper-api/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/openai-whisper-api",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "skill-creator",
          "description": "Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/skill-creator/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/skill-creator",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "tmux",
          "description": "Remote-control tmux sessions for interactive CLIs by sending keystrokes and scraping pane output.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/tmux/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/tmux",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "video-frames",
          "description": "Extract frames or short clips from videos using ffmpeg.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/video-frames/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/video-frames",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        },
        {
          "name": "weather",
          "description": "Get current weather and forecasts via wttr.in or Open-Meteo. Use when: user asks about weather, temperature, or forecasts for any location. NOT for: historical weather data, severe weather alerts, or detailed meteorological analysis. No API key needed.",
          "filePath": "/usr/lib/node_modules/openclaw/skills/weather/SKILL.md",
          "baseDir": "/usr/lib/node_modules/openclaw/skills/weather",
          "source": "openclaw-bundled",
          "disableModelInvocation": false
        }
      ],
      "version": 0
    },
    "sessionFile": "/root/.clawdbot-herald/agents/main/sessions/286e6e1c-012a-4b52-898a-85eeace0c544.jsonl",
    "contextTokens": 200000,
    "modelProvider": "openrouter",
    "model": "google/gemini-3.1-pro-preview",
    "abortedLastRun": false,
    "inputTokens": 14441,
    "outputTokens": 150,
    "totalTokens": 14441,
    "totalTokensFresh": true,
    "cacheRead": 0,
    "cacheWrite": 0
  },
  "agent:main:telegram:group:@heartbeat": {
    "chatType": "group",
    "channel": "telegram",
    "groupId": "@heartbeat",
    "displayName": "telegram:@heartbeat",
    "origin": {
      "label": "telegram:group:@heartbeat",
      "provider": "telegram",
      "surface": "telegram",
      "chatType": "group",
      "from": "telegram:group:@heartbeat",
      "to": "telegram:@heartbeat"
    },
    "sessionId": "576618d7-7f6f-48bd-84d6-beaef042952b",
    "updatedAt": 1773475203484,
    "deliveryContext": {
      "channel": "telegram"
    },
    "lastChannel": "telegram"
  },
  "agent:main:telegram:group:@michael": {
    "chatType": "group",
    "channel": "telegram",
    "groupId": "@michael",
    "displayName": "telegram:@michael",
    "origin": {
      "label": "telegram:group:@michael",
      "provider": "telegram",
      "surface": "telegram",
      "chatType": "group",
      "from": "telegram:group:@michael",
      "to": "telegram:@michael"
    },
    "sessionId": "68145030-6d1b-466f-9f4a-1f12df4fdadc",
    "updatedAt": 1773906350203,
    "deliveryContext": {
      "channel": "telegram"
    },
    "lastChannel": "telegram"
  }
}