{
  "schema": "cap-registry.v0",
  "updated_at": "2026-04-30T23:18:28.000Z",
  "packages": [
    {
      "id": "lightningnode/voltage-sandbox",
      "name": "Voltage Sandbox CLI",
      "version": "0.1.8",
      "kind": "local-tool",
      "summary": "Guide Codex through connecting to an existing Voltage sandbox node or creating a new MutinyNet Lightning node.",
      "description": "Agent-friendly CLI with a trusted tool boundary for Voltage sandbox Lightning nodes: discover existing nodes, keep default state under ~/.cap, collect credentials safely through terminal or macOS GUI prompts, prompt for or generate LND seed phrases, store seed phrases in macOS Keychain by default on macOS, decrypt Voltage macaroon backups in memory, create new MutinyNet nodes as ephemeral, fund/test liquidity, and report status.",
      "keywords": [
        "voltage",
        "lightning",
        "lnd",
        "mutinynet",
        "sandbox",
        "bitcoin",
        "node"
      ],
      "capabilityCard": {
        "kind": "cli-tool",
        "bestFor": [
          "create a new MutinyNet Lightning sandbox node on Voltage",
          "set up a Lightning testnet-style node for agent-driven tests",
          "connect to or inspect an existing Voltage sandbox LND node",
          "verify Lightning sandbox node readiness and payment readiness"
        ],
        "safeTrials": [
          {
            "command": "voltage-sandbox brief --json",
            "writes": [],
            "network": [],
            "description": "Return the embedded runbook, caveats, and expected state paths."
          },
          {
            "command": "voltage-sandbox doctor --json",
            "writes": [],
            "network": [],
            "description": "Check local prerequisites and missing credential names without live Voltage calls."
          },
          {
            "command": "voltage-sandbox credentials --check --json",
            "writes": [],
            "network": [],
            "description": "Report whether required credentials are present without printing secret values."
          }
        ],
        "permissions": {
          "filesystem": [
            "cap-state:read",
            "cap-state:write",
            "cap-secrets:read-presence",
            "cap-secrets:write-after-human-entry"
          ],
          "network": [
            "api.voltage.cloud",
            "selected Voltage LND REST endpoint",
            "mutinynet faucet services"
          ],
          "secrets": [
            "voltage-api-key",
            "voltage-organization-id",
            "voltage-node-password",
            "lnd-admin-macaroon",
            "lnd-seed-phrase"
          ],
          "env": [
            "VOLTAGE_API_KEY",
            "VOLTAGE_ORG_ID",
            "VOLTAGE_NODE_PASSWORD",
            "VOLTAGE_CREDENTIAL_STORE",
            "VOLTAGE_CREDENTIALS_FILE",
            "VOLTAGE_SEED_STORE",
            "VOLTAGE_SEED_PHRASE",
            "VOLTAGE_SEED_PHRASE_FILE",
            "LND_SEED_PHRASE",
            "LND_SEED_PHRASE_FILE",
            "LND_MACAROON_HEX",
            "LND_MACAROON_PATH"
          ],
          "spend": []
        },
        "agentInterface": {
          "commands": [
            "brief",
            "report",
            "doctor",
            "credentials",
            "setup",
            "fund",
            "test"
          ],
          "mcpTools": [
            "voltage_sandbox_brief",
            "voltage_sandbox_report",
            "voltage_sandbox_doctor",
            "voltage_sandbox_credentials_check",
            "voltage_sandbox_setup_dry_run"
          ],
          "skill": "plugins/voltage-sandbox/skills/voltage-sandbox/SKILL.md",
          "rawCliOnly": false,
          "preferred": "mcp-wrapper",
          "current": "codex-plugin-mcp",
          "structuredOutput": true
        }
      },
      "review": {
        "schema": "cap-review.v0",
        "reviewed_at": "2026-04-30T23:18:28.000Z",
        "status": "approved",
        "tier": "verified-runtime",
        "publisher": {
          "verified": true,
          "identity": "github:lightningnode",
          "method": "repo-owner"
        },
        "artifact": {
          "digest_present": true,
          "digest_verified": true,
          "digest": "5ed36a9e443a14b5962e096d1407d6389aa2c18b2af3b667bcb8cff76ed9b93b"
        },
        "provenance": {
          "source": "repo-local build-public-cli bundle",
          "signature_verified": false
        },
        "sbom": {
          "available": false
        },
        "vulnerabilities": {
          "critical": 0,
          "high": 0,
          "medium": 0,
          "low": 0
        },
        "dynamic_analysis": {
          "safe_trials_declared": true,
          "safe_trials_expected": [
            "voltage-sandbox brief --json",
            "voltage-sandbox doctor --json",
            "voltage-sandbox credentials --check --json"
          ],
          "sandbox": "cap ephemeral home"
        },
        "agent_interface": {
          "has_skill": true,
          "has_mcp_tools": true,
          "outputs_structured": true,
          "raw_cli_only": false
        },
        "permissions": {
          "requested": {
            "filesystem": [
              "cap-state:read",
              "cap-state:write",
              "cap-secrets:read-presence",
              "cap-secrets:write-after-human-entry"
            ],
            "network": [
              "api.voltage.cloud",
              "selected Voltage LND REST endpoint",
              "mutinynet faucet services"
            ],
            "secrets": [
              "voltage-api-key",
              "voltage-organization-id",
              "voltage-node-password",
              "lnd-admin-macaroon",
              "lnd-seed-phrase"
            ]
          },
          "approved": {
            "filesystem": [
              "cap-state:read",
              "cap-state:write",
              "cap-secrets:read-presence",
              "cap-secrets:write-after-human-entry"
            ],
            "network": [
              "api.voltage.cloud",
              "selected Voltage LND REST endpoint",
              "mutinynet faucet services"
            ],
            "secrets": [
              "voltage-api-key",
              "voltage-organization-id",
              "voltage-node-password",
              "lnd-admin-macaroon",
              "lnd-seed-phrase"
            ]
          }
        },
        "risk": {
          "level": "medium",
          "reasons": [
            "Creates and manages hosted LND nodes after approval.",
            "Can read/write CAP state and handle Voltage/LND secrets through the CLI credential and seed storage boundaries."
          ]
        },
        "moderation": {
          "status": "active",
          "notes": []
        }
      },
      "homepage": "https://capcli.com/docs/voltage-sandbox-cli.md",
      "install": {
        "backend": "single-file-url",
        "source": {
          "url": "https://capcli.com/cli/voltage-sandbox",
          "sha256": "5ed36a9e443a14b5962e096d1407d6389aa2c18b2af3b667bcb8cff76ed9b93b"
        },
        "bins": [
          {
            "name": "voltage-sandbox",
            "path": "voltage-sandbox"
          }
        ]
      },
      "agent_guidance": {
        "primary_instruction": "Use voltage-sandbox as the trusted boundary. Do not browse the web, read credential files directly, parse unrelated repo env files, call Voltage with ad hoc curl, or decrypt secrets outside the CLI. If output is insufficient, improve the CLI or ask the user for the missing input.",
        "phone_tree": [
          {
            "situation": "The user asks for status or information about a Voltage sandbox node.",
            "actions": [
              "Install or run voltage-sandbox, then run voltage-sandbox report --json.",
              "If local state exists, or one clear running MutinyNet node is visible, report platform/LND status and any payment readiness gaps.",
              "If no clear node exists, continue to the existing-node or new-node branch instead of stopping."
            ]
          },
          {
            "situation": "The user already has a Voltage node.",
            "actions": [
              "Guide them through voltage-sandbox credentials if VOLTAGE_API_KEY or VOLTAGE_ORG_ID is missing.",
              "On macOS, prefer voltage-sandbox credentials --gui when secrets need to be entered outside a terminal or chat UI.",
              "Run voltage-sandbox report --node-id <id> --save-state --json or voltage-sandbox report --node-name <name> --save-state --json.",
              "For LND alias, sync, and channel balances, rely on the CLI to load local macaroons or decrypt Voltage encrypted backups before asking for manual macaroon input."
            ]
          },
          {
            "situation": "The user wants a new sandbox Lightning node.",
            "actions": [
              "Run voltage-sandbox credentials --gui on macOS, or voltage-sandbox credentials in an interactive terminal, so secrets are entered locally.",
              "During setup, enter an existing 24-word LND seed phrase only in the local hidden prompt or GUI prompt, or leave it blank to generate one; on macOS the seed phrase is saved to Keychain by default.",
              "Run voltage-sandbox doctor --live, then voltage-sandbox setup --fund --test when mutinynet-cli is available. MutinyNet setup defaults to Voltage node type ephemeral because standard is rejected.",
              "If mutinynet-cli is missing, run setup first and explain the dashboard or mutinynet-cli funding options."
            ]
          }
        ],
        "first_question": "Do you already have a Voltage node to connect to, or should I help create a new MutinyNet sandbox node?",
        "success_criteria": [
          "Existing node: voltage-sandbox report reports the selected node and, when credentials permit, LND sync/channel balance without exposing secrets.",
          "New node: setup completes, state is saved locally, and report can show whether the node is payment-ready."
        ]
      },
      "after_install": [
        "voltage-sandbox report --json",
        "voltage-sandbox brief",
        "voltage-sandbox credentials --gui",
        "voltage-sandbox credentials",
        "voltage-sandbox report --node-id <existing_node_id> --save-state --json",
        "voltage-sandbox setup --fund --test"
      ]
    }
  ]
}
