{
  "agent:main:main": {
    "sessionId": "49542fef-de6e-4d4b-b5f3-09a69c5f76eb",
    "updatedAt": 1775134861774,
    "systemSent": true,
    "abortedLastRun": false,
    "chatType": "direct",
    "deliveryContext": {
      "to": "7377499346"
    },
    "lastTo": "7377499346",
    "origin": {
      "label": "7377499346",
      "provider": "heartbeat",
      "from": "7377499346",
      "to": "7377499346"
    },
    "sessionFile": "/root/.clawdbot-radar/agents/main/sessions/49542fef-de6e-4d4b-b5f3-09a69c5f76eb.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>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-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, 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": "coding-agent",
          "requiredEnv": []
        },
        {
          "name": "gh-issues",
          "primaryEnv": "GH_TOKEN",
          "requiredEnv": []
        },
        {
          "name": "github",
          "requiredEnv": []
        },
        {
          "name": "healthcheck"
        },
        {
          "name": "mcporter",
          "requiredEnv": []
        },
        {
          "name": "node-connect"
        },
        {
          "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). 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-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, 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,
    "modelProvider": "google",
    "model": "gemini-3.1-pro-preview",
    "contextTokens": 200000,
    "systemPromptReport": {
      "source": "run",
      "generatedAt": 1775134815955,
      "sessionId": "49542fef-de6e-4d4b-b5f3-09a69c5f76eb",
      "sessionKey": "agent:main:main",
      "provider": "google",
      "model": "gemini-3.1-pro-preview",
      "workspaceDir": "/home/ccuser/radar",
      "bootstrapMaxChars": 20000,
      "bootstrapTotalMaxChars": 150000,
      "bootstrapTruncation": {
        "warningMode": "once",
        "warningShown": false,
        "truncatedFiles": 0,
        "nearLimitFiles": 0,
        "totalNearLimit": false
      },
      "sandbox": {
        "mode": "off",
        "sandboxed": false
      },
      "systemPrompt": {
        "chars": 52739,
        "projectContextChars": 33818,
        "nonProjectContextChars": 18921
      },
      "injectedWorkspaceFiles": [
        {
          "name": "AGENTS.md",
          "path": "/home/ccuser/radar/AGENTS.md",
          "missing": false,
          "rawChars": 7088,
          "injectedChars": 7088,
          "truncated": false
        },
        {
          "name": "SOUL.md",
          "path": "/home/ccuser/radar/SOUL.md",
          "missing": false,
          "rawChars": 4200,
          "injectedChars": 4200,
          "truncated": false
        },
        {
          "name": "TOOLS.md",
          "path": "/home/ccuser/radar/TOOLS.md",
          "missing": false,
          "rawChars": 3952,
          "injectedChars": 3952,
          "truncated": false
        },
        {
          "name": "IDENTITY.md",
          "path": "/home/ccuser/radar/IDENTITY.md",
          "missing": false,
          "rawChars": 1424,
          "injectedChars": 1424,
          "truncated": false
        },
        {
          "name": "USER.md",
          "path": "/home/ccuser/radar/USER.md",
          "missing": false,
          "rawChars": 3511,
          "injectedChars": 3511,
          "truncated": false
        },
        {
          "name": "HEARTBEAT.md",
          "path": "/home/ccuser/radar/HEARTBEAT.md",
          "missing": false,
          "rawChars": 1826,
          "injectedChars": 1826,
          "truncated": false
        },
        {
          "name": "BOOTSTRAP.md",
          "path": "/home/ccuser/radar/BOOTSTRAP.md",
          "missing": true,
          "rawChars": 0,
          "injectedChars": 54,
          "truncated": false
        },
        {
          "name": "MEMORY.md",
          "path": "/home/ccuser/radar/MEMORY.md",
          "missing": false,
          "rawChars": 11273,
          "injectedChars": 11273,
          "truncated": false
        }
      ],
      "skills": {
        "promptChars": 5975,
        "entries": [
          {
            "name": "coding-agent",
            "blockChars": 823
          },
          {
            "name": "gh-issues",
            "blockChars": 499
          },
          {
            "name": "github",
            "blockChars": 563
          },
          {
            "name": "healthcheck",
            "blockChars": 482
          },
          {
            "name": "mcporter",
            "blockChars": 321
          },
          {
            "name": "node-connect",
            "blockChars": 532
          },
          {
            "name": "openai-image-gen",
            "blockChars": 263
          },
          {
            "name": "openai-whisper",
            "blockChars": 224
          },
          {
            "name": "openai-whisper-api",
            "blockChars": 240
          },
          {
            "name": "skill-creator",
            "blockChars": 750
          },
          {
            "name": "tmux",
            "blockChars": 246
          },
          {
            "name": "video-frames",
            "blockChars": 220
          },
          {
            "name": "weather",
            "blockChars": 407
          }
        ]
      },
      "tools": {
        "listChars": 2794,
        "schemaChars": 19253,
        "entries": [
          {
            "name": "read",
            "summaryChars": 298,
            "schemaChars": 392,
            "propertiesCount": 4
          },
          {
            "name": "edit",
            "summaryChars": 129,
            "schemaChars": 591,
            "propertiesCount": 6
          },
          {
            "name": "write",
            "summaryChars": 127,
            "schemaChars": 313,
            "propertiesCount": 3
          },
          {
            "name": "exec",
            "summaryChars": 181,
            "schemaChars": 1037,
            "propertiesCount": 12
          },
          {
            "name": "process",
            "summaryChars": 85,
            "schemaChars": 949,
            "propertiesCount": 12
          },
          {
            "name": "browser",
            "summaryChars": 1683,
            "schemaChars": 2743,
            "propertiesCount": 48
          },
          {
            "name": "canvas",
            "summaryChars": 106,
            "schemaChars": 661,
            "propertiesCount": 18
          },
          {
            "name": "nodes",
            "summaryChars": 122,
            "schemaChars": 1783,
            "propertiesCount": 37
          },
          {
            "name": "cron",
            "summaryChars": 2689,
            "schemaChars": 581,
            "propertiesCount": 13
          },
          {
            "name": "message",
            "summaryChars": 130,
            "schemaChars": 5025,
            "propertiesCount": 94
          },
          {
            "name": "tts",
            "summaryChars": 152,
            "schemaChars": 223,
            "propertiesCount": 2
          },
          {
            "name": "gateway",
            "summaryChars": 464,
            "schemaChars": 497,
            "propertiesCount": 12
          },
          {
            "name": "agents_list",
            "summaryChars": 118,
            "schemaChars": 33,
            "propertiesCount": 0
          },
          {
            "name": "sessions_list",
            "summaryChars": 54,
            "schemaChars": 176,
            "propertiesCount": 4
          },
          {
            "name": "sessions_history",
            "summaryChars": 36,
            "schemaChars": 149,
            "propertiesCount": 3
          },
          {
            "name": "sessions_send",
            "summaryChars": 84,
            "schemaChars": 203,
            "propertiesCount": 5
          },
          {
            "name": "sessions_yield",
            "summaryChars": 97,
            "schemaChars": 60,
            "propertiesCount": 1
          },
          {
            "name": "sessions_spawn",
            "summaryChars": 198,
            "schemaChars": 1141,
            "propertiesCount": 17
          },
          {
            "name": "subagents",
            "summaryChars": 105,
            "schemaChars": 179,
            "propertiesCount": 4
          },
          {
            "name": "session_status",
            "summaryChars": 207,
            "schemaChars": 89,
            "propertiesCount": 2
          },
          {
            "name": "web_search",
            "summaryChars": 175,
            "schemaChars": 1059,
            "propertiesCount": 9
          },
          {
            "name": "web_fetch",
            "summaryChars": 129,
            "schemaChars": 360,
            "propertiesCount": 3
          },
          {
            "name": "image",
            "summaryChars": 260,
            "schemaChars": 342,
            "propertiesCount": 6
          },
          {
            "name": "pdf",
            "summaryChars": 275,
            "schemaChars": 400,
            "propertiesCount": 6
          },
          {
            "name": "memory_search",
            "summaryChars": 334,
            "schemaChars": 139,
            "propertiesCount": 3
          },
          {
            "name": "memory_get",
            "summaryChars": 151,
            "schemaChars": 128,
            "propertiesCount": 3
          }
        ]
      }
    },
    "totalTokensFresh": true,
    "inputTokens": 96523,
    "outputTokens": 594,
    "cacheRead": 24316,
    "cacheWrite": 0,
    "totalTokens": 49182
  },
  "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": "33b849e6-1bf8-4018-808c-c84b2d27ee6d",
    "updatedAt": 1774773374977,
    "deliveryContext": {
      "channel": "telegram"
    },
    "lastChannel": "telegram"
  }
}