{
  "schemaVersion": "1.0",
  "item": {
    "slug": "lobster",
    "name": "Lobster",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/guwidoe/lobster",
    "canonicalUrl": "https://clawhub.ai/guwidoe/lobster",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/lobster",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=lobster",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.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",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/lobster"
    },
    "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/lobster",
    "agentPageUrl": "https://openagent3.xyz/skills/lobster/agent",
    "manifestUrl": "https://openagent3.xyz/skills/lobster/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/lobster/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": "Lobster",
        "body": "Contribute: Source code & PRs welcome at github.com/guwidoe/lobster-skill\n\nWorkflow runtime for AI agents — typed pipelines with approval gates."
      },
      {
        "title": "CLI Location",
        "body": "# Set alias (adjust path to your install location)\nLOBSTER=\"node /home/molt/clawd/tools/lobster/bin/lobster.js\"\n\n# Or install globally: npm install -g @clawdbot/lobster\n# Then use: lobster '<pipeline>'"
      },
      {
        "title": "Quick Reference",
        "body": "# Run pipeline (human mode - pretty output)\n$LOBSTER '<pipeline>'\n\n# Run pipeline (tool mode - JSON envelope for integration)\n$LOBSTER run --mode tool '<pipeline>'\n\n# Run workflow file\n$LOBSTER run path/to/workflow.lobster\n\n# Resume after approval\n$LOBSTER resume --token \"<token>\" --approve yes|no\n\n# List commands/workflows\n$LOBSTER commands.list\n$LOBSTER workflows.list"
      },
      {
        "title": "Core Commands",
        "body": "CommandPurposeexec --json --shell \"cmd\"Run shell, parse stdout as JSONwhere 'field=value'Filter objectspick field1,field2Project fieldshead --n 5Take first N itemssort --key field --descSort itemsgroupBy --key fieldGroup by keydedupe --key fieldRemove duplicatesmap --wrap keyTransform itemstemplate --text \"{{field}}\"Render templatesapprove --prompt \"ok?\"Halt for approvaldiff.last --key \"mykey\"Compare to last run (stateful)state.get key / state.set keyRead/write persistent statejson / tableRender output"
      },
      {
        "title": "Built-in Workflows",
        "body": "# Monitor PR for changes (stateful - remembers last state)\n$LOBSTER \"workflows.run --name github.pr.monitor --args-json '{\\\"repo\\\":\\\"owner/repo\\\",\\\"pr\\\":123}'\"\n\n# Monitor PR and emit message only on change\n$LOBSTER \"workflows.run --name github.pr.monitor.notify --args-json '{\\\"repo\\\":\\\"owner/repo\\\",\\\"pr\\\":123}'\""
      },
      {
        "title": "Approval Flow (Tool Mode)",
        "body": "When a pipeline hits approve, it returns:\n\n{\n  \"status\": \"needs_approval\",\n  \"requiresApproval\": {\n    \"prompt\": \"Send 3 emails?\",\n    \"items\": [...],\n    \"resumeToken\": \"eyJ...\"\n  }\n}\n\nTo continue:\n\n$LOBSTER resume --token \"eyJ...\" --approve yes"
      },
      {
        "title": "Example Pipelines",
        "body": "# List recent PRs, filter merged, show as table\n$LOBSTER 'exec --json --shell \"gh pr list --repo owner/repo --json number,title,state --limit 20\" | where \"state=MERGED\" | table'\n\n# Get data, require approval, then process\n$LOBSTER run --mode tool 'exec --json --shell \"echo [{\\\"id\\\":1},{\\\"id\\\":2}]\" | approve --prompt \"Process these?\" | pick id | json'\n\n# Diff against last run (only emit on change)\n$LOBSTER 'exec --json --shell \"gh pr view 123 --repo o/r --json state,title\" | diff.last --key \"pr:o/r#123\" | json'"
      },
      {
        "title": "Workflow Files (.lobster)",
        "body": "YAML/JSON files with steps, conditions, and approval gates:\n\nname: pr-review-reminder\nsteps:\n  - id: fetch\n    command: gh pr list --repo ${repo} --json number,title,reviewDecision\n  - id: filter\n    command: jq '[.[] | select(.reviewDecision == \"\")]'\n    stdin: $fetch.stdout\n  - id: notify\n    command: echo \"PRs needing review:\" && cat\n    stdin: $filter.stdout\n    approval: required\n\nRun: $LOBSTER run workflow.lobster --args-json '{\"repo\":\"owner/repo\"}'"
      },
      {
        "title": "Clawdbot Integration",
        "body": "Lobster can call Clawdbot tools via clawd.invoke:\n\n$LOBSTER 'clawd.invoke --tool message --action send --args-json \"{\\\"target\\\":\\\"123\\\",\\\"message\\\":\\\"hello\\\"}\"'\n\nRequires CLAWD_URL and CLAWD_TOKEN environment variables."
      },
      {
        "title": "State Directory",
        "body": "Lobster stores state in ~/.lobster/state/ by default. Override with LOBSTER_STATE_DIR."
      }
    ],
    "body": "Lobster\n\nContribute: Source code & PRs welcome at github.com/guwidoe/lobster-skill\n\nWorkflow runtime for AI agents — typed pipelines with approval gates.\n\nCLI Location\n# Set alias (adjust path to your install location)\nLOBSTER=\"node /home/molt/clawd/tools/lobster/bin/lobster.js\"\n\n# Or install globally: npm install -g @clawdbot/lobster\n# Then use: lobster '<pipeline>'\n\nQuick Reference\n# Run pipeline (human mode - pretty output)\n$LOBSTER '<pipeline>'\n\n# Run pipeline (tool mode - JSON envelope for integration)\n$LOBSTER run --mode tool '<pipeline>'\n\n# Run workflow file\n$LOBSTER run path/to/workflow.lobster\n\n# Resume after approval\n$LOBSTER resume --token \"<token>\" --approve yes|no\n\n# List commands/workflows\n$LOBSTER commands.list\n$LOBSTER workflows.list\n\nCore Commands\nCommand\tPurpose\nexec --json --shell \"cmd\"\tRun shell, parse stdout as JSON\nwhere 'field=value'\tFilter objects\npick field1,field2\tProject fields\nhead --n 5\tTake first N items\nsort --key field --desc\tSort items\ngroupBy --key field\tGroup by key\ndedupe --key field\tRemove duplicates\nmap --wrap key\tTransform items\ntemplate --text \"{{field}}\"\tRender templates\napprove --prompt \"ok?\"\tHalt for approval\ndiff.last --key \"mykey\"\tCompare to last run (stateful)\nstate.get key / state.set key\tRead/write persistent state\njson / table\tRender output\nBuilt-in Workflows\n# Monitor PR for changes (stateful - remembers last state)\n$LOBSTER \"workflows.run --name github.pr.monitor --args-json '{\\\"repo\\\":\\\"owner/repo\\\",\\\"pr\\\":123}'\"\n\n# Monitor PR and emit message only on change\n$LOBSTER \"workflows.run --name github.pr.monitor.notify --args-json '{\\\"repo\\\":\\\"owner/repo\\\",\\\"pr\\\":123}'\"\n\nApproval Flow (Tool Mode)\n\nWhen a pipeline hits approve, it returns:\n\n{\n  \"status\": \"needs_approval\",\n  \"requiresApproval\": {\n    \"prompt\": \"Send 3 emails?\",\n    \"items\": [...],\n    \"resumeToken\": \"eyJ...\"\n  }\n}\n\n\nTo continue:\n\n$LOBSTER resume --token \"eyJ...\" --approve yes\n\nExample Pipelines\n# List recent PRs, filter merged, show as table\n$LOBSTER 'exec --json --shell \"gh pr list --repo owner/repo --json number,title,state --limit 20\" | where \"state=MERGED\" | table'\n\n# Get data, require approval, then process\n$LOBSTER run --mode tool 'exec --json --shell \"echo [{\\\"id\\\":1},{\\\"id\\\":2}]\" | approve --prompt \"Process these?\" | pick id | json'\n\n# Diff against last run (only emit on change)\n$LOBSTER 'exec --json --shell \"gh pr view 123 --repo o/r --json state,title\" | diff.last --key \"pr:o/r#123\" | json'\n\nWorkflow Files (.lobster)\n\nYAML/JSON files with steps, conditions, and approval gates:\n\nname: pr-review-reminder\nsteps:\n  - id: fetch\n    command: gh pr list --repo ${repo} --json number,title,reviewDecision\n  - id: filter\n    command: jq '[.[] | select(.reviewDecision == \"\")]'\n    stdin: $fetch.stdout\n  - id: notify\n    command: echo \"PRs needing review:\" && cat\n    stdin: $filter.stdout\n    approval: required\n\n\nRun: $LOBSTER run workflow.lobster --args-json '{\"repo\":\"owner/repo\"}'\n\nClawdbot Integration\n\nLobster can call Clawdbot tools via clawd.invoke:\n\n$LOBSTER 'clawd.invoke --tool message --action send --args-json \"{\\\"target\\\":\\\"123\\\",\\\"message\\\":\\\"hello\\\"}\"'\n\n\nRequires CLAWD_URL and CLAWD_TOKEN environment variables.\n\nState Directory\n\nLobster stores state in ~/.lobster/state/ by default. Override with LOBSTER_STATE_DIR."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/guwidoe/lobster",
    "publisherUrl": "https://clawhub.ai/guwidoe/lobster",
    "owner": "guwidoe",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/lobster",
    "downloadUrl": "https://openagent3.xyz/downloads/lobster",
    "agentUrl": "https://openagent3.xyz/skills/lobster/agent",
    "manifestUrl": "https://openagent3.xyz/skills/lobster/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/lobster/agent.md"
  }
}