{
  "schemaVersion": "1.0",
  "item": {
    "slug": "invoice-generator",
    "name": "Invoice Generator",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/tmigone/invoice-generator",
    "canonicalUrl": "https://clawhub.ai/tmigone/invoice-generator",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/invoice-generator",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=invoice-generator",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "package-lock.json",
      "package.json",
      "references/data-schema.md",
      "scripts/generate.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. 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/invoice-generator"
    },
    "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/invoice-generator",
    "agentPageUrl": "https://openagent3.xyz/skills/invoice-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/invoice-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/invoice-generator/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": "Invoice Generator",
        "body": "Generate PDF invoices from structured JSON data."
      },
      {
        "title": "Setup",
        "body": "Install Node.js dependencies:\n\ncd invoice-generator && npm install\n\nSet INVOICE_DIR environment variable (or in skills.entries.invoice-generator.env):\n\nexport INVOICE_DIR=\"/path/to/your/invoices\"\n\nThis creates the directory structure:\n\n$INVOICE_DIR/\n├── configs/    # Optional: saved invoice configs\n└── invoices/   # Generated PDF output"
      },
      {
        "title": "Usage",
        "body": "# From stdin (on-the-fly)\ncat invoice-data.json | {baseDir}/scripts/generate.sh\n\n# From a full file path\n{baseDir}/scripts/generate.sh /path/to/invoice-data.json\n\n# From a saved config (looks in $INVOICE_DIR/configs/)\n{baseDir}/scripts/generate.sh client-template\n# Loads: $INVOICE_DIR/configs/client-template.json\n\n# Output goes to: $INVOICE_DIR/invoices/invoice-{number}.pdf (auto-versions if exists)"
      },
      {
        "title": "Input Data Format",
        "body": "The JSON input must contain these fields:\n\n{\n  \"company\": {\n    \"name\": \"Your Company\",\n    \"address\": \"123 Main St\",\n    \"cityStateZip\": \"City, State, 12345\",\n    \"country\": \"Country\"\n  },\n  \"client\": {\n    \"name\": \"Client Name\",\n    \"address\": \"456 Client Ave\",\n    \"cityStateZip\": \"City, State, 67890\",\n    \"country\": \"Country\",\n    \"taxId\": \"TAX123\"\n  },\n  \"invoice\": {\n    \"number\": \"INV-2025.01\",\n    \"date\": \"Jan 15 2025\",\n    \"dueDate\": \"Jan 30 2025\"\n  },\n  \"items\": [\n    {\n      \"description\": \"Service description\",\n      \"rate\": \"1000.00\",\n      \"currency\": \"USD\"\n    }\n  ],\n  \"totals\": {\n    \"currency\": \"USD\",\n    \"total\": \"1,000.00\"\n  }\n}\n\nSee references/data-schema.md for complete field documentation."
      },
      {
        "title": "Output",
        "body": "The script outputs the path to the generated PDF file on success:\n\n$INVOICE_DIR/invoices/invoice-INV-2025.01.pdf\n# If that filename already exists, the script will write:\n# $INVOICE_DIR/invoices/invoice-INV-2025.01-2.pdf (then -3, etc.)"
      },
      {
        "title": "Error Handling",
        "body": "Exits with code 1 if JSON is invalid or missing required fields\nExits with code 2 if weasyprint fails to generate PDF\nError messages are written to stderr"
      }
    ],
    "body": "Invoice Generator\n\nGenerate PDF invoices from structured JSON data.\n\nSetup\nInstall Node.js dependencies:\ncd invoice-generator && npm install\n\nSet INVOICE_DIR environment variable (or in skills.entries.invoice-generator.env):\nexport INVOICE_DIR=\"/path/to/your/invoices\"\n\n\nThis creates the directory structure:\n\n$INVOICE_DIR/\n├── configs/    # Optional: saved invoice configs\n└── invoices/   # Generated PDF output\n\nUsage\n# From stdin (on-the-fly)\ncat invoice-data.json | {baseDir}/scripts/generate.sh\n\n# From a full file path\n{baseDir}/scripts/generate.sh /path/to/invoice-data.json\n\n# From a saved config (looks in $INVOICE_DIR/configs/)\n{baseDir}/scripts/generate.sh client-template\n# Loads: $INVOICE_DIR/configs/client-template.json\n\n# Output goes to: $INVOICE_DIR/invoices/invoice-{number}.pdf (auto-versions if exists)\n\nInput Data Format\n\nThe JSON input must contain these fields:\n\n{\n  \"company\": {\n    \"name\": \"Your Company\",\n    \"address\": \"123 Main St\",\n    \"cityStateZip\": \"City, State, 12345\",\n    \"country\": \"Country\"\n  },\n  \"client\": {\n    \"name\": \"Client Name\",\n    \"address\": \"456 Client Ave\",\n    \"cityStateZip\": \"City, State, 67890\",\n    \"country\": \"Country\",\n    \"taxId\": \"TAX123\"\n  },\n  \"invoice\": {\n    \"number\": \"INV-2025.01\",\n    \"date\": \"Jan 15 2025\",\n    \"dueDate\": \"Jan 30 2025\"\n  },\n  \"items\": [\n    {\n      \"description\": \"Service description\",\n      \"rate\": \"1000.00\",\n      \"currency\": \"USD\"\n    }\n  ],\n  \"totals\": {\n    \"currency\": \"USD\",\n    \"total\": \"1,000.00\"\n  }\n}\n\n\nSee references/data-schema.md for complete field documentation.\n\nOutput\n\nThe script outputs the path to the generated PDF file on success:\n\n$INVOICE_DIR/invoices/invoice-INV-2025.01.pdf\n# If that filename already exists, the script will write:\n# $INVOICE_DIR/invoices/invoice-INV-2025.01-2.pdf (then -3, etc.)\n\nError Handling\nExits with code 1 if JSON is invalid or missing required fields\nExits with code 2 if weasyprint fails to generate PDF\nError messages are written to stderr"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tmigone/invoice-generator",
    "publisherUrl": "https://clawhub.ai/tmigone/invoice-generator",
    "owner": "tmigone",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/invoice-generator",
    "downloadUrl": "https://openagent3.xyz/downloads/invoice-generator",
    "agentUrl": "https://openagent3.xyz/skills/invoice-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/invoice-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/invoice-generator/agent.md"
  }
}