{"id":"a13e8fd4-85d1-42ca-9d41-9212000b04dd","entityType":"agent","slug":"clawhub-0xvespertine-pdf-report","name":"PDF Report","canonicalUrl":"https://www.xpersona.co/agent/clawhub-0xvespertine-pdf-report","canonicalPath":"/agent/clawhub-0xvespertine-pdf-report","generatedAt":"2026-10-11T15:19:51.213Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":null},"description":"Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r... Skill: PDF Report Owner: 0xvespertine Summary: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r... Tags: latest:1.0.1 Version history: v1.0.1 | 2026-04-04T18:08:01.178Z | user v1.0.1 — Security hardening + publish readiness - Chart image paths from JSON are now validated against the workspace boundary (paths o","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1741t73nrt7q2vnxcrxcxxtjh83hfew:pdf-report","sourceUrl":"https://clawhub.ai/0xvespertine/pdf-report","homepage":"https://clawhub.ai/0xvespertine/skills/pdf-report","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/0xvespertine/pdf-report","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/0xvespertine/skills/pdf-report","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":44,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":null},"stars":null,"forks":null,"downloads":1063,"packageName":null,"latestVersion":"1.0.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T12:44:38.170Z","lastCrawledAt":"2026-10-11T12:44:38.170Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T12:44:38.170Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.1","createdAt":"2026-04-04T18:08:01.178Z","changelog":"v1.0.1 — Security hardening + publish readiness - Chart image paths from JSON are now validated against the workspace boundary (paths outside are rejected) - Missing chart images produce a warning instead of silent broken images - Workspace root detection is now resilient (OPENCLAW_WORKSPACE env var > marker file walk > fallback) - Added Setup section with system deps, venv creation, and pip install - Added automatic page numbering (bottom-right: \"1 / 3\") - Documented custom template base_url behavior","fileCount":5,"zipByteSize":7032},{"version":"1.0.0","createdAt":"2026-03-23T08:54:45.930Z","changelog":"Initial release — A4 PDF reports from structured JSON via Jinja2 and WeasyPrint","fileCount":4,"zipByteSize":5046}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1741t73nrt7q2vnxcrxcxxtjh83hfew:pdf-report","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T15:19:51.213Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-0xvespertine-pdf-report/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":null},"readme":"Skill: PDF Report\n\nOwner: 0xvespertine\n\nSummary: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r...\n\nTags: latest:1.0.1\n\nVersion history:\n\nv1.0.1 | 2026-04-04T18:08:01.178Z | user\n\nv1.0.1 — Security hardening + publish readiness\n\n- Chart image paths from JSON are now validated against the workspace boundary (paths outside are rejected)\n- Missing chart images produce a warning instead of silent broken images\n- Workspace root detection is now resilient (OPENCLAW_WORKSPACE env var > marker file walk > fallback)\n- Added Setup section with system deps, venv creation, and pip install\n- Added automatic page numbering (bottom-right: \"1 / 3\")\n- Documented custom template base_url behavior\n\nv1.0.0 | 2026-03-23T08:54:45.930Z | user\n\nInitial release — A4 PDF reports from structured JSON via Jinja2 and WeasyPrint\n\nArchive index:\n\nArchive v1.0.1: 5 files, 7032 bytes\n\nFiles: scripts/render_pdf.py (8526b), skill-card.md (2073b), SKILL.md (2869b), templates/report.html (5138b), _meta.json (129b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: pdf-report\nversion: 1.0.1\ndescription: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data report, or chart-based export — from workspace data.\nmetadata: { \"openclaw\": { \"emoji\": \"PDF\", \"requires\": { \"bins\": [\"python3\"] } } }\n---\n\n# PDF Report\n\nGenerate a clean A4 PDF from structured JSON data.\n\n## Setup\n\nInstall system dependencies (WeasyPrint requires these):\n\n```bash\n# Ubuntu/Debian\nsudo apt-get install -y libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev libcairo2\n```\n\nCreate a virtual environment and install Python dependencies (one-time):\n\n```bash\npython3 -m venv ~/.openclaw/workspace/.venv_pdf\n~/.openclaw/workspace/.venv_pdf/bin/pip install weasyprint jinja2\n```\n\n## Quick start\n\n```bash\n~/.openclaw/workspace/.venv_pdf/bin/python skills/pdf-report/scripts/render_pdf.py \\\n  --input exports/report-data.json \\\n  --output exports/pdfs/report.pdf\n```\n\n## Inputs\n\n- `--input` path to a JSON file inside the workspace\n- `--output` path to the PDF output inside the workspace\n- Optional: `--template-file` custom Jinja2 template path inside the workspace\n- Optional: `--html-out` write the rendered HTML for debugging\n\n## Expected JSON shape\n\n```json\n{\n  \"title\": \"Monthly Report\",\n  \"subtitle\": \"Summary by region\",\n  \"generated_at\": \"2026-03-23 10:00\",\n  \"summary\": [\"Key point 1\", \"Key point 2\"],\n  \"sections\": [\n    {\n      \"title\": \"Sales by category\",\n      \"lead\": \"National overview\",\n      \"items\": [\"Observation 1\", \"Observation 2\"],\n      \"table\": {\n        \"headers\": [\"Category\", \"Amount\", \"Share\"],\n        \"rows\": [[\"Electronics\", \"12 450\", \"45%\"]]\n      },\n      \"charts\": [\n        {\n          \"title\": \"Distribution by category\",\n          \"src\": \"exports/charts/category.png\",\n          \"caption\": \"Source: sales database\"\n        }\n      ],\n      \"note\": \"Data as of 31/12/2025\"\n    }\n  ],\n  \"footer\": \"Company Name — Department\"\n}\n```\n\n## Notes\n\n- All file paths (CLI arguments and `charts[].src` in JSON) must stay inside the workspace. Paths outside the workspace are rejected.\n- Missing chart images produce a warning to stderr but do not block PDF generation.\n- Use `chart-mpl` first when a section needs chart images, then reference those image paths in `charts[].src`.\n- Output directories are created automatically.\n- Default template: `skills/pdf-report/templates/report.html`\n- Dedicated venv: `~/.openclaw/workspace/.venv_pdf/` (weasyprint + jinja2)\n- Pages are numbered automatically (bottom-right: \"1 / 3\").\n\n## Custom templates\n\nUse `--template-file` to provide your own Jinja2 HTML template. Note that relative asset paths inside custom templates (images, CSS) resolve from the **workspace root**, not the template's directory. Use workspace-root-relative paths for any referenced assets.\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn71mmn1vst817r9622exn54vn83fw03\",\n  \"slug\": \"pdf-report\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1775326081178\n}\n\nFile v1.0.1:skill-card.md\n\n## Description:\n\nGenerates clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint for analytical summaries, data reports, and chart-based exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[0xvespertine](https://clawhub.ai/user/0xvespertine)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and agent operators use this skill to turn workspace JSON data into formatted A4 PDF reports with summaries, sections, tables, charts, footers, and optional debug HTML.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Custom Jinja2 templates can affect rendered HTML and PDF output more broadly than ordinary report data.\n\nMitigation: Use only trusted custom templates and review template content before rendering.\n\nRisk: PDF generation and template rendering may run in an environment with access to local files or sensitive environment variables.\n\nMitigation: Run the skill in a low-privilege or isolated workspace and avoid exposing sensitive environment variables during rendering.\n\nRisk: Unpinned Python dependencies or system package installation can change host behavior over time.\n\nMitigation: Pin Python dependencies before production use and approve the sudo system package install only after reviewing the host changes.\n\n## Reference(s):\n\n\n## Skill Output:\n\n**Output Type(s):** [Files, Shell commands, Configuration instructions, Guidance]\n\n**Output Format:** [PDF file, optional HTML file, and JSON status output]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3 plus WeasyPrint and Jinja2 dependencies; all input, output, template, and chart paths are constrained to the workspace.]\n\n## Skill Version(s):\n\n1.0.1 (source: frontmatter and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.0: 4 files, 5046 bytes\n\nFiles: scripts/render_pdf.py (7299b), SKILL.md (1944b), templates/report.html (4997b), _meta.json (129b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: pdf-report\nversion: 1.0.0\ndescription: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data report, or chart-based export — from workspace data.\nmetadata: { \"openclaw\": { \"emoji\": \"PDF\", \"requires\": { \"bins\": [\"python3\"] } } }\n---\n\n# PDF Report\n\nGenerate a clean A4 PDF from structured JSON data.\n\n```bash\n~/.openclaw/workspace/.venv_pdf/bin/python skills/pdf-report/scripts/render_pdf.py \\\n  --input exports/report-data.json \\\n  --output exports/pdfs/report.pdf\n```\n\n## Inputs\n\n- `--input` path to a JSON file inside the workspace\n- `--output` path to the PDF output inside the workspace\n- Optional: `--template-file` custom Jinja2 template path inside the workspace\n- Optional: `--html-out` write the rendered HTML for debugging\n\n## Expected JSON shape\n\n```json\n{\n  \"title\": \"Monthly Report\",\n  \"subtitle\": \"Summary by region\",\n  \"generated_at\": \"2026-03-23 10:00\",\n  \"summary\": [\"Key point 1\", \"Key point 2\"],\n  \"sections\": [\n    {\n      \"title\": \"Sales by category\",\n      \"lead\": \"National overview\",\n      \"items\": [\"Observation 1\", \"Observation 2\"],\n      \"table\": {\n        \"headers\": [\"Category\", \"Amount\", \"Share\"],\n        \"rows\": [[\"Electronics\", \"12 450\", \"45%\"]]\n      },\n      \"charts\": [\n        {\n          \"title\": \"Distribution by category\",\n          \"src\": \"exports/charts/category.png\",\n          \"caption\": \"Source: sales database\"\n        }\n      ],\n      \"note\": \"Data as of 31/12/2025\"\n    }\n  ],\n  \"footer\": \"Company Name — Department\"\n}\n```\n\n## Notes\n\n- All file paths must stay inside the workspace.\n- Use `chart-mpl` first when a section needs chart images, then reference those image paths in `charts[].src`.\n- Output directories are created automatically.\n- Default template: `skills/pdf-report/templates/report.html`\n- Dedicated venv: `~/.openclaw/workspace/.venv_pdf/` (weasyprint + jinja2)\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn71mmn1vst817r9622exn54vn83fw03\",\n  \"slug\": \"pdf-report\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1774256085930\n}","readmeExcerpt":"Skill: PDF Report Owner: 0xvespertine Summary: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r... Tags: latest:1.0.1 Version history: v1.0.1 | 2026-04-04T18:08:01.178Z | user v1.0.1 — Security hardening + publish readiness - Chart image paths from JSON are now validated against the workspace boundary (paths o","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"# Ubuntu/Debian\nsudo apt-get install -y libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev libcairo2"},{"language":"bash","snippet":"python3 -m venv ~/.openclaw/workspace/.venv_pdf\n~/.openclaw/workspace/.venv_pdf/bin/pip install weasyprint jinja2"},{"language":"bash","snippet":"~/.openclaw/workspace/.venv_pdf/bin/python skills/pdf-report/scripts/render_pdf.py \\\n  --input exports/report-data.json \\\n  --output exports/pdfs/report.pdf"},{"language":"json","snippet":"{\n  \"title\": \"Monthly Report\",\n  \"subtitle\": \"Summary by region\",\n  \"generated_at\": \"2026-03-23 10:00\",\n  \"summary\": [\"Key point 1\", \"Key point 2\"],\n  \"sections\": [\n    {\n      \"title\": \"Sales by category\",\n      \"lead\": \"National overview\",\n      \"items\": [\"Observation 1\", \"Observation 2\"],\n      \"table\": {\n        \"headers\": [\"Category\", \"Amount\", \"Share\"],\n        \"rows\": [[\"Electronics\", \"12 450\", \"45%\"]]\n      },\n      \"charts\": [\n        {\n          \"title\": \"Distribution by category\",\n          \"src\": \"exports/charts/category.png\",\n          \"caption\": \"Source: sales database\"\n        }\n      ],\n      \"note\": \"Data as of 31/12/2025\"\n    }\n  ],\n  \"footer\": \"Company Name — Department\"\n}"},{"language":"bash","snippet":"~/.openclaw/workspace/.venv_pdf/bin/python skills/pdf-report/scripts/render_pdf.py \\\n  --input exports/report-data.json \\\n  --output exports/pdfs/report.pdf"},{"language":"json","snippet":"{\n  \"title\": \"Monthly Report\",\n  \"subtitle\": \"Summary by region\",\n  \"generated_at\": \"2026-03-23 10:00\",\n  \"summary\": [\"Key point 1\", \"Key point 2\"],\n  \"sections\": [\n    {\n      \"title\": \"Sales by category\",\n      \"lead\": \"National overview\",\n      \"items\": [\"Observation 1\", \"Observation 2\"],\n      \"table\": {\n        \"headers\": [\"Category\", \"Amount\", \"Share\"],\n        \"rows\": [[\"Electronics\", \"12 450\", \"45%\"]]\n      },\n      \"charts\": [\n        {\n          \"title\": \"Distribution by category\",\n          \"src\": \"exports/charts/category.png\",\n          \"caption\": \"Source: sales database\"\n        }\n      ],\n      \"note\": \"Data as of 31/12/2025\"\n    }\n  ],\n  \"footer\": \"Company Name — Department\"\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: pdf-report\nversion: 1.0.1\ndescription: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data report, or chart-based export — from workspace data.\nmetadata: { \"openclaw\": { \"emoji\": \"PDF\", \"requires\": { \"bins\": [\"python3\"] } } }\n---\n\n# PDF Report\n\nGenerate a clean A4 PDF from structured JSON data.\n\n## Setup\n\nInstall system dependencies (WeasyPrint requires these):\n\n```bash\n# Ubuntu/Debian\nsudo apt-get install -y libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev libcairo2\n```\n\nCreate a virtual environment and install Python dependencies (one-time):\n\n```bash\npython3 -m venv ~/.openclaw/workspace/.venv_pdf\n~/.openclaw/workspace/.venv_pdf/bin/pip install weasyprint jinja2\n```\n\n## Quick start\n\n```bash\n~/.openclaw/workspace/.venv_pdf/bin/python skills/pdf-report/scripts/render_pdf.py \\\n  --input exports/report-data.json \\\n  --output exports/pdfs/report.pdf\n```\n\n## Inputs\n\n- `--input` path to a JSON file inside the workspace\n- `--output` path to the PDF output inside the workspace\n- Optional: `--template-file` custom Jinja2 template path inside the workspace\n- Optional: `--html-out` write the rendered HTML for debugging\n\n## Expected JSON shape\n\n```json\n{\n  \"title\": \"Monthly Report\",\n  \"subtitle\": \"Summary by region\",\n  \"generated_at\": \"2026-03-23 10:00\",\n  \"summary\": [\"Key point 1\", \"Key point 2\"],\n  \"sections\": [\n    {\n      \"title\": \"Sales by category\",\n      \"lead\": \"National overview\",\n      \"items\": [\"Observation 1\", \"Observation 2\"],\n      \"table\": {\n        \"headers\": [\"Category\", \"Amount\", \"Share\"],\n        \"rows\": [[\"Electronics\", \"12 450\", \"45%\"]]\n      },\n      \"charts\": [\n        {\n          \"title\": \"Distribution by category\",\n          \"src\": \"exports/charts/category.png\",\n          \"caption\": \"Source: sales database\"\n        }\n      ],\n      \"note\": \"Data as of 31/12/2025\"\n    }\n  ],\n  \"footer\": \"Company Name — Department\"\n}\n```\n\n## Notes\n\n- All file paths (CLI arguments and `charts[].src` in JSON) must stay inside the workspace. Paths outside the workspace are rejected.\n- Missing chart images produce a warning to stderr but do not block PDF generation.\n- Use `chart-mpl` first when a section needs chart images, then reference those image paths in `charts[].src`.\n- Output directories are created automatically.\n- Default template: `skills/pdf-report/templates/report.html`\n- Dedicated venv: `~/.openclaw/workspace/.venv_pdf/` (weasyprint + jinja2)\n- Pages are numbered automatically (bottom-right: \"1 / 3\").\n\n## Custom templates\n\nUse `--template-file` to provide your own Jinja2 HTML template. Note that relative asset paths inside custom templates (images, CSS) resolve from the **workspace root**, not the template's directory. Use workspace-root-relative paths for any referenced assets."},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71mmn1vst817r9622exn54vn83fw03\",\n  \"slug\": \"pdf-report\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1775326081178\n}"},{"path":"skill-card.md","content":"## Description:\n\nGenerates clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint for analytical summaries, data reports, and chart-based exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[0xvespertine](https://clawhub.ai/user/0xvespertine)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers, analysts, and agent operators use this skill to turn workspace JSON data into formatted A4 PDF reports with summaries, sections, tables, charts, footers, and optional debug HTML.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Custom Jinja2 templates can affect rendered HTML and PDF output more broadly than ordinary report data.\n\nMitigation: Use only trusted custom templates and review template content before rendering.\n\nRisk: PDF generation and template rendering may run in an environment with access to local files or sensitive environment variables.\n\nMitigation: Run the skill in a low-privilege or isolated workspace and avoid exposing sensitive environment variables during rendering.\n\nRisk: Unpinned Python dependencies or system package installation can change host behavior over time.\n\nMitigation: Pin Python dependencies before production use and approve the sudo system package install only after reviewing the host changes.\n\n## Reference(s):\n\n\n## Skill Output:\n\n**Output Type(s):** [Files, Shell commands, Configuration instructions, Guidance]\n\n**Output Format:** [PDF file, optional HTML file, and JSON status output]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires python3 plus WeasyPrint and Jinja2 dependencies; all input, output, template, and chart paths are constrained to the workspace.]\n\n## Skill Version(s):\n\n1.0.1 (source: frontmatter and server release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r... Skill: PDF Report Owner: 0xvespertine Summary: Generate clean A4 PDF reports from structured JSON using Jinja2 and WeasyPrint. Use when the user needs a formatted PDF document — analytical summary, data r... Tags: latest:1.0.1 Version history: v1.0.1 | 2026-04-04T18:08:01.178Z | user v1.0.1 — Security hardening + publish readiness - Chart image paths from JSON are now validated against the workspace boundary (paths o","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":973,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T12:44:38.170Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T15:19:51.213Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}