{
  "schemaVersion": "1.0",
  "item": {
    "slug": "arbiter",
    "name": "Arbiter",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/5hanth/arbiter",
    "canonicalUrl": "https://clawhub.ai/5hanth/arbiter",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/arbiter",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=arbiter",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "package.json",
      "scripts/get.sh",
      "scripts/push.sh",
      "scripts/status.sh"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/arbiter"
    },
    "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/arbiter",
    "agentPageUrl": "https://openagent3.xyz/skills/arbiter/agent",
    "manifestUrl": "https://openagent3.xyz/skills/arbiter/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/arbiter/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Arbiter Skill",
        "body": "Push decisions to Arbiter Zebu for async human review. Use when you need human input on plans, architectural choices, or approval before proceeding."
      },
      {
        "title": "Installation",
        "body": "Quick install via ClawHub:\n\nclawhub install arbiter\n\nOr via bun (makes CLI commands available globally):\n\nbun add -g arbiter-skill\n\nOr manual:\n\ngit clone https://github.com/5hanth/arbiter-skill.git\ncd arbiter-skill && npm install && npm run build\nln -s $(pwd) ~/.clawdbot/skills/arbiter"
      },
      {
        "title": "Prerequisites",
        "body": "Arbiter Zebu bot running (or just bunx arbiter-zebu)\n~/.arbiter/queue/ directory (created automatically by the bot)"
      },
      {
        "title": "Environment Variables",
        "body": "Set these in your agent's environment for automatic agent/session detection:\n\nVariableDescriptionExampleCLAWDBOT_AGENTAgent IDceo, swe1CLAWDBOT_SESSIONSession keyagent:ceo:main"
      },
      {
        "title": "When to Use",
        "body": "Plan review before implementation\nArchitectural decisions with tradeoffs\nAnything blocking that needs human judgment\nMultiple related decisions as a batch\n\nDo NOT use for:\n\nSimple yes/no that doesn't need explanation\nUrgent real-time decisions (use direct message instead)\nTechnical questions you can research yourself"
      },
      {
        "title": "arbiter_push",
        "body": "Create a decision plan for human review.\n\nCLI: arbiter-push '<json>' — takes a single JSON argument containing all fields.\n\narbiter-push '{\n  \"title\": \"API Design Decisions\",\n  \"tag\": \"nft-marketplace\",\n  \"context\": \"SWE2 needs these decided before API work\",\n  \"priority\": \"normal\",\n  \"notify\": \"agent:swe2:main\",\n  \"decisions\": [\n    {\n      \"id\": \"auth-strategy\",\n      \"title\": \"Auth Strategy\", \n      \"context\": \"How to authenticate admin users\",\n      \"options\": [\n        {\"key\": \"jwt\", \"label\": \"JWT tokens\", \"note\": \"Stateless\"},\n        {\"key\": \"session\", \"label\": \"Sessions\", \"note\": \"More control\"},\n        {\"key\": \"oauth\", \"label\": \"OAuth\", \"note\": \"External provider\"}\n      ]\n    },\n    {\n      \"id\": \"database\",\n      \"title\": \"Database Choice\",\n      \"context\": \"Primary datastore\",\n      \"options\": [\n        {\"key\": \"postgresql\", \"label\": \"PostgreSQL + JSONB\"},\n        {\"key\": \"mongodb\", \"label\": \"MongoDB\"}\n      ],\n      \"allowCustom\": true\n    }\n  ]\n}'\n\nJSON Fields:\n\nFieldRequiredDescriptiontitleYesPlan titletagNoTag for filtering (e.g., project name)contextNoBackground for reviewerpriorityNolow, normal, high, urgent (default: normal)notifyNoSession to notify when completeagentNoAgent ID (auto-detected from CLAWDBOT_AGENT env)sessionNoSession key (auto-detected from CLAWDBOT_SESSION env)decisionsYesArray of decisions\n\nDecision object:\n\nFieldRequiredDescriptionidYesUnique ID within plantitleYesDecision titlecontextNoExplanation for revieweroptionsYesArray of {key, label, note?}allowCustomNoAllow free-text answer (default: false)defaultNoSuggested option key\n\nReturns:\n\n{\n  \"planId\": \"abc123\",\n  \"file\": \"~/.arbiter/queue/pending/ceo-api-design-abc123.md\",\n  \"total\": 2,\n  \"status\": \"pending\"\n}"
      },
      {
        "title": "arbiter_status",
        "body": "Check the status of a decision plan.\n\nCLI: arbiter-status <plan-id> or arbiter-status --tag <tag>\n\narbiter-status abc12345\n# or\narbiter-status --tag nft-marketplace\n\nReturns:\n\n{\n  \"planId\": \"abc123\",\n  \"title\": \"API Design Decisions\",\n  \"status\": \"in_progress\",\n  \"total\": 3,\n  \"answered\": 1,\n  \"remaining\": 2,\n  \"decisions\": {\n    \"auth-strategy\": {\"status\": \"answered\", \"answer\": \"jwt\"},\n    \"database\": {\"status\": \"pending\", \"answer\": null},\n    \"caching\": {\"status\": \"pending\", \"answer\": null}\n  }\n}"
      },
      {
        "title": "arbiter_get",
        "body": "Get answers from a completed plan.\n\nCLI: arbiter-get <plan-id> or arbiter-get --tag <tag>\n\narbiter-get abc12345\n# or\narbiter-get --tag nft-marketplace\n\nReturns:\n\n{\n  \"planId\": \"abc123\",\n  \"status\": \"completed\",\n  \"completedAt\": \"2026-01-30T01:45:00Z\",\n  \"answers\": {\n    \"auth-strategy\": \"jwt\",\n    \"database\": \"postgresql\",\n    \"caching\": \"redis\"\n  }\n}\n\nError if not complete:\n\n{\n  \"error\": \"Plan not complete\",\n  \"status\": \"in_progress\",\n  \"remaining\": 2\n}"
      },
      {
        "title": "arbiter_await",
        "body": "Block until plan is complete (with timeout).\n\narbiter-await abc12345 --timeout 3600\n\nPolls every 30 seconds until complete or timeout.\n\nReturns: Same as arbiter_get on completion."
      },
      {
        "title": "Example 1: Plan Review",
        "body": "# Push plan decisions (single JSON argument)\nRESULT=$(arbiter-push '{\"title\":\"Clean IT i18n Plan\",\"tag\":\"clean-it\",\"priority\":\"high\",\"notify\":\"agent:swe3:main\",\"decisions\":[{\"id\":\"library\",\"title\":\"i18n Library\",\"options\":[{\"key\":\"i18next\",\"label\":\"i18next\"},{\"key\":\"formatjs\",\"label\":\"FormatJS\"}]},{\"id\":\"keys\",\"title\":\"Key Structure\",\"options\":[{\"key\":\"flat\",\"label\":\"Flat (login.button)\"},{\"key\":\"nested\",\"label\":\"Nested ({login:{button}})\"}]}]}')\n\nPLAN_ID=$(echo $RESULT | jq -r '.planId')\necho \"Pushed plan $PLAN_ID — waiting for human review\""
      },
      {
        "title": "Example 2: Check and Proceed",
        "body": "# Check if decisions are ready\nSTATUS=$(arbiter-status --tag nft-marketplace)\n\nif [ \"$(echo $STATUS | jq -r '.status')\" == \"completed\" ]; then\n  ANSWERS=$(arbiter-get --tag nft-marketplace)\n  AUTH=$(echo $ANSWERS | jq -r '.answers[\"auth-strategy\"]')\n  echo \"Using auth strategy: $AUTH\"\n  # Proceed with implementation\nelse\n  echo \"Still waiting for $(echo $STATUS | jq -r '.remaining') decisions\"\nfi"
      },
      {
        "title": "Example 3: Blocking Wait",
        "body": "# Wait up to 1 hour for decisions\nANSWERS=$(arbiter-await abc12345 --timeout 3600)\n\nif [ $? -eq 0 ]; then\n  # Got answers, proceed\n  echo \"Decisions ready: $ANSWERS\"\nelse\n  echo \"Timeout waiting for decisions\"\nfi"
      },
      {
        "title": "Best Practices",
        "body": "Batch related decisions — Don't push one at a time\nProvide context — Human needs to understand tradeoffs\nUse tags — Makes filtering easy (--tag project-name)\nSet notify — So blocked agents get woken up\nUse priority sparingly — Reserve urgent for true blockers"
      },
      {
        "title": "File Locations",
        "body": "PathPurpose~/.arbiter/queue/pending/Plans awaiting review~/.arbiter/queue/completed/Answered plans (archive)~/.arbiter/queue/notify/Agent notifications"
      },
      {
        "title": "Checking Notifications (Agent Heartbeat)",
        "body": "In your HEARTBEAT.md, add:\n\n## Check Arbiter Notifications\n\n1. Check if `~/.arbiter/queue/notify/` has files for my session\n2. If yes, read answers and proceed with blocked work\n3. Delete notification file after processing"
      },
      {
        "title": "Troubleshooting",
        "body": "IssueSolutionPlan not showing in ArbiterCheck file is valid YAML frontmatterAnswers not appearingCheck arbiter_status, may be incompleteNotification not receivedEnsure --notify was set correctly"
      },
      {
        "title": "See Also",
        "body": "Arbiter Zebu Architecture\nArbiter Zebu Bot"
      }
    ],
    "body": "Arbiter Skill\n\nPush decisions to Arbiter Zebu for async human review. Use when you need human input on plans, architectural choices, or approval before proceeding.\n\nInstallation\n\nQuick install via ClawHub:\n\nclawhub install arbiter\n\n\nOr via bun (makes CLI commands available globally):\n\nbun add -g arbiter-skill\n\n\nOr manual:\n\ngit clone https://github.com/5hanth/arbiter-skill.git\ncd arbiter-skill && npm install && npm run build\nln -s $(pwd) ~/.clawdbot/skills/arbiter\n\nPrerequisites\nArbiter Zebu bot running (or just bunx arbiter-zebu)\n~/.arbiter/queue/ directory (created automatically by the bot)\nEnvironment Variables\n\nSet these in your agent's environment for automatic agent/session detection:\n\nVariable\tDescription\tExample\nCLAWDBOT_AGENT\tAgent ID\tceo, swe1\nCLAWDBOT_SESSION\tSession key\tagent:ceo:main\nWhen to Use\nPlan review before implementation\nArchitectural decisions with tradeoffs\nAnything blocking that needs human judgment\nMultiple related decisions as a batch\n\nDo NOT use for:\n\nSimple yes/no that doesn't need explanation\nUrgent real-time decisions (use direct message instead)\nTechnical questions you can research yourself\nTools\narbiter_push\n\nCreate a decision plan for human review.\n\nCLI: arbiter-push '<json>' — takes a single JSON argument containing all fields.\n\narbiter-push '{\n  \"title\": \"API Design Decisions\",\n  \"tag\": \"nft-marketplace\",\n  \"context\": \"SWE2 needs these decided before API work\",\n  \"priority\": \"normal\",\n  \"notify\": \"agent:swe2:main\",\n  \"decisions\": [\n    {\n      \"id\": \"auth-strategy\",\n      \"title\": \"Auth Strategy\", \n      \"context\": \"How to authenticate admin users\",\n      \"options\": [\n        {\"key\": \"jwt\", \"label\": \"JWT tokens\", \"note\": \"Stateless\"},\n        {\"key\": \"session\", \"label\": \"Sessions\", \"note\": \"More control\"},\n        {\"key\": \"oauth\", \"label\": \"OAuth\", \"note\": \"External provider\"}\n      ]\n    },\n    {\n      \"id\": \"database\",\n      \"title\": \"Database Choice\",\n      \"context\": \"Primary datastore\",\n      \"options\": [\n        {\"key\": \"postgresql\", \"label\": \"PostgreSQL + JSONB\"},\n        {\"key\": \"mongodb\", \"label\": \"MongoDB\"}\n      ],\n      \"allowCustom\": true\n    }\n  ]\n}'\n\n\nJSON Fields:\n\nField\tRequired\tDescription\ntitle\tYes\tPlan title\ntag\tNo\tTag for filtering (e.g., project name)\ncontext\tNo\tBackground for reviewer\npriority\tNo\tlow, normal, high, urgent (default: normal)\nnotify\tNo\tSession to notify when complete\nagent\tNo\tAgent ID (auto-detected from CLAWDBOT_AGENT env)\nsession\tNo\tSession key (auto-detected from CLAWDBOT_SESSION env)\ndecisions\tYes\tArray of decisions\n\nDecision object:\n\nField\tRequired\tDescription\nid\tYes\tUnique ID within plan\ntitle\tYes\tDecision title\ncontext\tNo\tExplanation for reviewer\noptions\tYes\tArray of {key, label, note?}\nallowCustom\tNo\tAllow free-text answer (default: false)\ndefault\tNo\tSuggested option key\n\nReturns:\n\n{\n  \"planId\": \"abc123\",\n  \"file\": \"~/.arbiter/queue/pending/ceo-api-design-abc123.md\",\n  \"total\": 2,\n  \"status\": \"pending\"\n}\n\narbiter_status\n\nCheck the status of a decision plan.\n\nCLI: arbiter-status <plan-id> or arbiter-status --tag <tag>\n\narbiter-status abc12345\n# or\narbiter-status --tag nft-marketplace\n\n\nReturns:\n\n{\n  \"planId\": \"abc123\",\n  \"title\": \"API Design Decisions\",\n  \"status\": \"in_progress\",\n  \"total\": 3,\n  \"answered\": 1,\n  \"remaining\": 2,\n  \"decisions\": {\n    \"auth-strategy\": {\"status\": \"answered\", \"answer\": \"jwt\"},\n    \"database\": {\"status\": \"pending\", \"answer\": null},\n    \"caching\": {\"status\": \"pending\", \"answer\": null}\n  }\n}\n\narbiter_get\n\nGet answers from a completed plan.\n\nCLI: arbiter-get <plan-id> or arbiter-get --tag <tag>\n\narbiter-get abc12345\n# or\narbiter-get --tag nft-marketplace\n\n\nReturns:\n\n{\n  \"planId\": \"abc123\",\n  \"status\": \"completed\",\n  \"completedAt\": \"2026-01-30T01:45:00Z\",\n  \"answers\": {\n    \"auth-strategy\": \"jwt\",\n    \"database\": \"postgresql\",\n    \"caching\": \"redis\"\n  }\n}\n\n\nError if not complete:\n\n{\n  \"error\": \"Plan not complete\",\n  \"status\": \"in_progress\",\n  \"remaining\": 2\n}\n\narbiter_await\n\nBlock until plan is complete (with timeout).\n\narbiter-await abc12345 --timeout 3600\n\n\nPolls every 30 seconds until complete or timeout.\n\nReturns: Same as arbiter_get on completion.\n\nUsage Examples\nExample 1: Plan Review\n# Push plan decisions (single JSON argument)\nRESULT=$(arbiter-push '{\"title\":\"Clean IT i18n Plan\",\"tag\":\"clean-it\",\"priority\":\"high\",\"notify\":\"agent:swe3:main\",\"decisions\":[{\"id\":\"library\",\"title\":\"i18n Library\",\"options\":[{\"key\":\"i18next\",\"label\":\"i18next\"},{\"key\":\"formatjs\",\"label\":\"FormatJS\"}]},{\"id\":\"keys\",\"title\":\"Key Structure\",\"options\":[{\"key\":\"flat\",\"label\":\"Flat (login.button)\"},{\"key\":\"nested\",\"label\":\"Nested ({login:{button}})\"}]}]}')\n\nPLAN_ID=$(echo $RESULT | jq -r '.planId')\necho \"Pushed plan $PLAN_ID — waiting for human review\"\n\nExample 2: Check and Proceed\n# Check if decisions are ready\nSTATUS=$(arbiter-status --tag nft-marketplace)\n\nif [ \"$(echo $STATUS | jq -r '.status')\" == \"completed\" ]; then\n  ANSWERS=$(arbiter-get --tag nft-marketplace)\n  AUTH=$(echo $ANSWERS | jq -r '.answers[\"auth-strategy\"]')\n  echo \"Using auth strategy: $AUTH\"\n  # Proceed with implementation\nelse\n  echo \"Still waiting for $(echo $STATUS | jq -r '.remaining') decisions\"\nfi\n\nExample 3: Blocking Wait\n# Wait up to 1 hour for decisions\nANSWERS=$(arbiter-await abc12345 --timeout 3600)\n\nif [ $? -eq 0 ]; then\n  # Got answers, proceed\n  echo \"Decisions ready: $ANSWERS\"\nelse\n  echo \"Timeout waiting for decisions\"\nfi\n\nBest Practices\nBatch related decisions — Don't push one at a time\nProvide context — Human needs to understand tradeoffs\nUse tags — Makes filtering easy (--tag project-name)\nSet notify — So blocked agents get woken up\nUse priority sparingly — Reserve urgent for true blockers\nFile Locations\nPath\tPurpose\n~/.arbiter/queue/pending/\tPlans awaiting review\n~/.arbiter/queue/completed/\tAnswered plans (archive)\n~/.arbiter/queue/notify/\tAgent notifications\nChecking Notifications (Agent Heartbeat)\n\nIn your HEARTBEAT.md, add:\n\n## Check Arbiter Notifications\n\n1. Check if `~/.arbiter/queue/notify/` has files for my session\n2. If yes, read answers and proceed with blocked work\n3. Delete notification file after processing\n\nTroubleshooting\nIssue\tSolution\nPlan not showing in Arbiter\tCheck file is valid YAML frontmatter\nAnswers not appearing\tCheck arbiter_status, may be incomplete\nNotification not received\tEnsure --notify was set correctly\nSee Also\nArbiter Zebu Architecture\nArbiter Zebu Bot"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/5hanth/arbiter",
    "publisherUrl": "https://clawhub.ai/5hanth/arbiter",
    "owner": "5hanth",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/arbiter",
    "downloadUrl": "https://openagent3.xyz/downloads/arbiter",
    "agentUrl": "https://openagent3.xyz/skills/arbiter/agent",
    "manifestUrl": "https://openagent3.xyz/skills/arbiter/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/arbiter/agent.md"
  }
}