{"id":"5ecfb170-1799-419c-99ae-e343789d6767","entityType":"agent","slug":"clawhub-zhuo-yoyowz-local-document-ai-openvino","name":"Private Document AI with OpenVINO","canonicalUrl":"https://www.xpersona.co/agent/clawhub-zhuo-yoyowz-local-document-ai-openvino","canonicalPath":"/agent/clawhub-zhuo-yoyowz-local-document-ai-openvino","generatedAt":"2026-10-11T03:58:30.626Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T00:19:55.284Z","emptyReason":null},"description":"Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc... Skill: Private Document AI with OpenVINO Owner: zhuo-yoyowz Summary: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc... Tags: ai-pc:0.4.1, document-ai:0.4.1, fastapi:0.4.1, invoice:0.4.1, latest:0.4.1, latest openvino document-ai:0.1.2, latest openvino document-ai ocr invoice notebook:0.1.4, local-ai:0.4.1, l","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.2K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1793aef4h4fwmpc33fnt9fg998602k3:local-document-ai-openvino","sourceUrl":"https://clawhub.ai/zhuo-yoyowz/local-document-ai-openvino","homepage":"https://clawhub.ai/zhuo-yoyowz/skills/local-document-ai-openvino","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/zhuo-yoyowz/local-document-ai-openvino","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/zhuo-yoyowz/skills/local-document-ai-openvino","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":62,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T00:19:55.284Z","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-11T00:19:55.284Z","emptyReason":null},"stars":null,"forks":null,"downloads":1221,"packageName":null,"latestVersion":"0.4.1","tractionLabel":"1.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T00:19:55.270Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T00:19:55.284Z","lastCrawledAt":"2026-10-11T00:19:55.270Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T00:19:55.270Z","lastVerifiedAt":null,"highlights":[{"version":"0.4.1","createdAt":"2026-07-20T06:55:01.244Z","changelog":"Publish clean 0.4.1 bundle with default auto local service mode, HTTP/FastAPI parser, stdlib IPC fallback, direct CLI fallback, uv-first installer, and one-command invoice demo.","fileCount":27,"zipByteSize":87529},{"version":"0.4.0","createdAt":"2026-07-20T05:02:57.590Z","changelog":"Add app-like local service mode: auto-starting HTTP/FastAPI parser with stdlib IPC and direct CLI fallbacks, uv-first installer, one-command invoice demo scripts, and improved docs for user-defined invoice field extraction.","fileCount":30,"zipByteSize":91387},{"version":"0.2.1","createdAt":"2026-06-25T05:46:47.133Z","changelog":"Fix SKILL.md frontmatter metadata so ClawHub can parse the MinerU/OpenVINO summary correctly; package contents remain the 0.2.0 MinerU runtime and custom-field extraction update.","fileCount":27,"zipByteSize":80280},{"version":"0.2.0","createdAt":"2026-06-25T05:39:50.097Z","changelog":"Upgrade document parsing to MinerU 2.5 with OpenVINO GenAI, add lightweight local runtime setup, and support custom invoice key-field extraction via --fields.","fileCount":27,"zipByteSize":80235},{"version":"0.1.4","createdAt":"2026-05-08T09:58:05.772Z","changelog":"Reduced published attack surface by shipping a CLI-first bundle and removing runtime compatibility shims from diagnostics.","fileCount":24,"zipByteSize":72394},{"version":"0.1.3","createdAt":"2026-05-08T09:51:18.125Z","changelog":"Clearer quick start, better invoice demos, and diagram-to-notebook support","fileCount":32,"zipByteSize":92712},{"version":"0.1.2","createdAt":"2026-05-03T08:22:13.833Z","changelog":"Harden the local UI file preview path handling, restrict UI file access to approved local folders, remove raw path preview URLs, and block custom interpreter/script override keys in the wrapper config.","fileCount":23,"zipByteSize":76261},{"version":"0.1.1","createdAt":"2026-05-03T08:15:33.436Z","changelog":"Remove non-essential screen/demo helpers, stop auto-installing remote OCR wheel by default, and clarify safety guidance for dependencies, generated code, and artifact handling.","fileCount":23,"zipByteSize":75523}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1793aef4h4fwmpc33fnt9fg998602k3:local-document-ai-openvino","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","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-zhuo-yoyowz-local-document-ai-openvino/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/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-11T03:58:30.623Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-zhuo-yoyowz-local-document-ai-openvino/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-11T00:19:55.284Z","emptyReason":null},"readme":"Skill: Private Document AI with OpenVINO\n\nOwner: zhuo-yoyowz\n\nSummary: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc...\n\nTags: ai-pc:0.4.1, document-ai:0.4.1, fastapi:0.4.1, invoice:0.4.1, latest:0.4.1, latest openvino document-ai:0.1.2, latest openvino document-ai ocr invoice notebook:0.1.4, local-ai:0.4.1, local-service:0.4.1, mineru:0.4.1, ocr:0.4.1, openvino:0.4.1\n\nVersion history:\n\nv0.4.1 | 2026-07-20T06:55:01.244Z | user\n\nPublish clean 0.4.1 bundle with default auto local service mode, HTTP/FastAPI parser, stdlib IPC fallback, direct CLI fallback, uv-first installer, and one-command invoice demo.\n\nv0.4.0 | 2026-07-20T05:02:57.590Z | user\n\nAdd app-like local service mode: auto-starting HTTP/FastAPI parser with stdlib IPC and direct CLI fallbacks, uv-first installer, one-command invoice demo scripts, and improved docs for user-defined invoice field extraction.\n\nv0.2.1 | 2026-06-25T05:46:47.133Z | user\n\nFix SKILL.md frontmatter metadata so ClawHub can parse the MinerU/OpenVINO summary correctly; package contents remain the 0.2.0 MinerU runtime and custom-field extraction update.\n\nv0.2.0 | 2026-06-25T05:39:50.097Z | user\n\nUpgrade document parsing to MinerU 2.5 with OpenVINO GenAI, add lightweight local runtime setup, and support custom invoice key-field extraction via --fields.\n\nv0.1.4 | 2026-05-08T09:58:05.772Z | user\n\nReduced published attack surface by shipping a CLI-first bundle and removing runtime compatibility shims from diagnostics.\n\nv0.1.3 | 2026-05-08T09:51:18.125Z | user\n\nClearer quick start, better invoice demos, and diagram-to-notebook support\n\nv0.1.2 | 2026-05-03T08:22:13.833Z | user\n\nHarden the local UI file preview path handling, restrict UI file access to approved local folders, remove raw path preview URLs, and block custom interpreter/script override keys in the wrapper config.\n\nv0.1.1 | 2026-05-03T08:15:33.436Z | user\n\nRemove non-essential screen/demo helpers, stop auto-installing remote OCR wheel by default, and clarify safety guidance for dependencies, generated code, and artifact handling.\n\nv0.1.0 | 2026-05-03T07:54:38.820Z | user\n\nInitial public release\n\nArchive index:\n\nArchive v0.4.1: 27 files, 87529 bytes\n\nFiles: assets/modelscope-skill-icon.svg (1455b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (243b), references/mode_guide.md (2802b), references/output_contracts.md (2218b), references/schema.md (4201b), requirements.txt (506b), scripts/_local_vendor.py (1199b), scripts/check_env.py (9602b), scripts/data_enrichment.py (50639b), scripts/http_parse_server.py (4203b), scripts/install_local_runtime.py (2018b), scripts/mineru_openvino_backend.py (8524b), scripts/parse_client.py (12481b), scripts/parse_document.py (32772b), scripts/persistent_parse_server.py (8789b), scripts/render_result_report.py (57626b), scripts/run_skill.py (19475b), scripts/smoke_test.py (4308b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (8115b), scripts/utils.py (9861b), skill-card.md (2756b), SKILL.md (16924b), _meta.json (145b)\n\nFile v0.4.1:SKILL.md\n\n---\nname: local-document-ai-openvino\ndescription: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a local service, and output structured JSON/Markdown with user-defined invoice fields.\n---\n\n# Private Document AI with OpenVINO\n\nTurn local PDFs, invoices, screenshots, and diagrams into one of two useful outcomes:\n\n1. `to-data`: classify the document and extract structured fields, tables, and JSON, including user-requested key fields.\n2. `to-code`: turn screenshots, forms, and architecture diagrams into code or Jupyter notebook scaffolds.\n\nEverything runs locally and is built for Intel CPU/GPU acceleration with OpenVINO GenAI.\nThe default device is `CPU` for workshop stability. Set `MINERU_OPENVINO_DEVICE=GPU` or `AUTO` only after validating the target AI PC.\n\nThe default user experience is app-like:\n\n- the first call auto-starts a local service\n- HTTP/FastAPI service is preferred when available\n- the standard-library IPC service is used as a fallback\n- direct CLI parsing remains available with `--no-server`\n- the model stays resident after warmup so later calls avoid repeat model loading\n\nThe default runtime path in this release is:\n\n- MinerU 2.5 Pro\n- preconverted OpenVINO INT4 model bundle\n- local PDF rendering with `pypdfium2`\n- no local model export step\n\n## Why install this skill\n\nInstall this when you want one local workflow for:\n\n- invoice and receipt extraction\n- private PDF understanding\n- table and key-value extraction\n- architecture diagram to notebook generation\n- screenshot to HTML/React scaffold generation\n\nThis skill is especially good for demos because it already includes:\n\n- medical invoice `to-data` flows\n- restaurant invoice `to-data` flows\n- custom invoice field extraction such as invoice number, date, seller, and amount due\n- architecture diagram `to-code -> jupyter-notebook` flows\n- local HTML reports for easy review and screenshots\n\n## 30-second start\n\nCheck the environment:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nInstall with the fastest available local installer path:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File \"{baseDir}/scripts/install.ps1\"\n```\n\nWarm up the local document AI service:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\n```\n\nOr run directly from the CLI. Server mode is automatic by default:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\"\n```\n\nFor invoice demos with custom key fields:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nFor repeated workshop demos, prefer the persistent local server mode:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nOne-command invoice demo:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File \"{baseDir}/scripts/demo_invoice.ps1\"\n```\n\n## Example prompts\n\nUse prompts like these in OpenClaw:\n\n```text\nUse $local-document-ai-openvino to parse this local PDF and give me a structured report.\n```\n\n```text\nUse $local-document-ai-openvino to extract invoice fields, tables, and key-value pairs from this medical invoice.\n```\n\n```text\nUse $local-document-ai-openvino to classify this receipt and return normalized JSON.\n```\n\n```text\nUse $local-document-ai-openvino to extract only these invoice fields from this file: invoice_number, invoice_date, total_amount, vendor_name. Return a structured JSON result with just those requested fields.\n```\n\n```text\nUse $local-document-ai-openvino to extract these custom fields from this invoice: buyer_tax_id, seller_tax_id, amount_due, check_code. Save the full parse artifacts, but highlight the requested fields in the final structured output.\n```\n\n```text\nUse $local-document-ai-openvino to turn this architecture diagram into a Jupyter notebook scaffold.\n```\n\n```text\nUse $local-document-ai-openvino to convert this UI screenshot into an HTML scaffold.\n```\n\n## What you get\n\nTypical outputs include:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/structured_record.json`\n- `task_output/normalized.json`\n- `task_output/requested_fields.json`\n- `task_output/requested_fields_record.json`\n- `task_output/notebook.ipynb`\n- `code_preview.html`\n\n## Best demo paths\n\nIf you are evaluating the skill for the first time, start here:\n\n1. run `--warmup-server` once to start the persistent local parser and preload the model\n2. `to-data` on an invoice PDF; local service mode is automatic\n3. review `result_report.html`\n4. inspect `structured_record.json`\n5. rerun with `--fields` and inspect `requested_fields_record.json`\n6. then try `to-code` with a diagram image and target `jupyter-notebook`\n\n## Persistent local server mode\n\nUse server mode when the same machine will parse multiple PDFs/images. This is the default path.\n\nWhy this helps:\n\n1. The first request loads and compiles the MinerU/OpenVINO GenAI runtime once.\n2. Later agent calls send lightweight local IPC requests to the resident process.\n3. Model weights stay in the process memory instead of being moved repeatedly.\n4. The HTTP service layer makes future Web UI, desktop UI, and multi-agent integrations easier.\n5. The standard-library IPC server remains as a fallback when HTTP dependencies are unavailable.\n6. The normal CLI path remains available for one-off runs and debugging with `--no-server`.\n\nWarm up the server before a hands-on session:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\n```\n\nInspect the server:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --server-status\n```\n\nRun through the resident server:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nForce a specific local service transport if needed:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --server-kind http --server-status\npython \"{baseDir}/scripts/run_skill.py\" --server-kind ipc --server-status\n```\n\nDisable service mode for debugging:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --no-server --mode parse --file \"/absolute/path/to/file.pdf\"\n```\n\nRelease memory after the workshop:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --shutdown-server\n```\n\nServer mode uses these implementation files:\n\n- `{baseDir}/scripts/parse_client.py`\n- `{baseDir}/scripts/http_parse_server.py`\n- `{baseDir}/scripts/persistent_parse_server.py`\n\nThe server listens only on `127.0.0.1` loopback by default and does not bind to external network interfaces.\nIf the default port is occupied, set `LOCAL_DOCUMENT_AI_SERVER_PORT` before starting the server.\nFor HTTP service mode, set `LOCAL_DOCUMENT_AI_HTTP_PORT` if port `47274` is occupied.\n\n## Custom key-field extraction\n\nAfter the skill is installed, users can ask for a custom field list at call time.\nThis is the recommended pattern for invoice demos.\n\nUse the `fields` parameter with `to-data`:\n\n- CLI: `--fields \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- config JSON: `\"fields\": \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- slash-command style: `fields=invoice_number,invoice_date,total_amount,vendor_name`\n\nThe skill will:\n\n1. parse the full document locally with MinerU on OpenVINO\n2. keep the standard `kv_pairs`, `entities`, `tables`, and traceability artifacts\n3. resolve the requested field names to canonical keys when possible\n4. write a focused structured output for only those requested fields\n\nThe two demo-friendly outputs are:\n\n- `task_output/requested_fields.json`\n  This includes each requested field, the matched canonical key, whether it was found, the primary match, and all matches.\n- `task_output/requested_fields_record.json`\n  This is the compact final record keyed by the user-requested field names.\n\nRecommended invoice demo field names:\n\n- `invoice_number`\n- `invoice_code`\n- `check_code`\n- `invoice_date`\n- `buyer_tax_id`\n- `seller_tax_id`\n- `vendor_name`\n- `customer_name`\n- `subtotal`\n- `tax_amount`\n- `total_amount`\n- `amount_due`\n\nCommon aliases are also supported when they can be normalized to canonical keys, for example:\n\n- `seller`\n- `buyer`\n- `invoice no`\n- `invoice date`\n- `total`\n- `amount due`\n\n## Core pipeline\n\nUse this skill as a local document-to-action pipeline:\n\n1. Parse the document into a canonical structured representation.\n2. Optionally continue into `to-data` or `to-code`.\n3. Save outputs into a predictable artifact folder with traceability.\n\n## Read only if needed\n\nLoad these references when you need the schema or output contracts:\n\n- `{baseDir}/references/schema.md`\n- `{baseDir}/references/mode_guide.md`\n- `{baseDir}/references/output_contracts.md`\n\n## Primary entrypoint\n\nUse this published entrypoint:\n\n- CLI orchestrator: `{baseDir}/scripts/run_skill.py`\n- recommended default path: `{baseDir}/scripts/run_skill.py --mode to-data --file ...`\n- one-command invoice demo: `{baseDir}/scripts/demo_invoice.ps1`\n\nDo not call these implementation scripts directly from the skill:\n\n- `parse_document.py`\n- `parse_client.py`\n- `persistent_parse_server.py`\n- `transform_doc_to_data.py`\n- `transform_doc_to_code.py`\n\n## Local readiness\n\nCheck the environment before processing real documents:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nFor workshops, the simplest setup is installing into a skill-local `.vendor` directory.\nThe installer uses `uv pip` when `uv` is available and falls back to `pip`.\nThe entry scripts auto-detect the skill-local `.vendor`, so you do not need to edit `PYTHONPATH`:\n\n```bash\npython \"{baseDir}/scripts/install_local_runtime.py\"\n```\n\nIf you prefer, a normal virtual environment also works:\n\n```bash\npython -m pip install -r \"{baseDir}/requirements.txt\"\n```\n\nDownload the preconverted MinerU OpenVINO model bundle into the skill-local `models/` folder, or point the skill at it with an environment variable:\n\n```bash\nset MINERU_OPENVINO_MODEL_DIR=C:\\absolute\\path\\to\\MinerU2.5-Pro-2604-1.2B-int4-ov\n```\n\nFor the most stable hands-on setup, keep the default CPU path. To test acceleration on a validated Intel AI PC:\n\n```bash\nset MINERU_OPENVINO_DEVICE=GPU\n```\n\nRecommended model bundle:\n\n- `https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov`\n\nWorkshop-friendly download example:\n\n```bash\ngit clone --depth 1 https://www.modelscope.cn/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov.git \"{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov\"\n```\n\nRun a quick orchestration smoke test:\n\n```bash\npython \"{baseDir}/scripts/smoke_test.py\"\n```\n\nModel assets are discovered from:\n\n- `MINERU_OPENVINO_MODEL_DIR`\n- `MINERU_MODEL_DIR`\n- `{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov/`\n- `{baseDir}/models/mineru2.5-int4-ov/`\n\nPrefer using a predownloaded model bundle for workshops. This skill does not require local export or automatic model download.\n\n## Supported modes\n\n### `parse`\n\nUse when the user wants the structured parse only.\n\nOutputs:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- extracted layout, tables, or figures when available\n\n### `to-data`\n\nUse when the user wants structured extraction, normalization, or document classification.\n\nTypical outputs under `task_output/`:\n\n- `entities.json`\n- `kv_pairs.json`\n- `table_index.json`\n- `normalized.json`\n- `structured_record.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `traceability.json`\n\n### `to-code`\n\nUse when the user wants implementation-oriented output from the parse result.\n\nSupported targets:\n\n- `react`\n- `html-css`\n- `json-schema`\n- `jupyter-notebook`\n\nTypical outputs under `task_output/`:\n\n- `component_map.json`\n- `field_schema.json`\n- `ui_blueprint.json`\n- `notes.md`\n- `traceability.json`\n- target-specific artifacts such as `app.jsx`, `index.html`, `styles.css`, `schema.json`, `notebook.ipynb`, or `notebook_plan.json`\n\nTreat all generated code and notebooks as drafts. Review them before running, publishing, or connecting them to real systems.\n\n## Published package scope\n\nThe published ClawHub bundle is intentionally CLI-first.\n\n- main workflow: `scripts/run_skill.py`\n- diagnostics: `scripts/check_env.py`\n- smoke verification: `scripts/smoke_test.py`\n\nDeveloper-only local UI helpers are kept out of the public release bundle.\n\n## Pipeline rules\n\nAlways follow these rules:\n\n1. Prefer local execution.\n2. Always parse first into `parsed.json`.\n3. Generate downstream artifacts from `parsed.json`, not raw OCR text alone.\n4. Preserve page numbers, reading order, block types, and source anchors when possible.\n5. Write traceability for downstream outputs.\n6. Mark low-confidence regions or assumptions explicitly.\n7. Do not silently drop tables, figures, formulas, charts, or key-value regions.\n8. Save outputs into one artifact folder per run.\n9. For confidential documents, prefer an explicit private `--out` directory and remove artifacts after review.\n\n## Output contract\n\nDefault output folder:\n\n`./artifacts/<document_stem>/`\n\nExpected top-level outputs:\n\n- `effective_config.json`\n- `run_report.json`\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/`\n\n`to-code` runs may also emit:\n\n- `code_preview.html`\n\n## CLI examples\n\n### Parse\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode parse \\\n  --file \"/absolute/path/to/report.pdf\" \\\n  --out \"/absolute/path/to/artifacts/report_parse\"\n```\n\n### To-data\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\"\n```\n\n### To-data with custom fields\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\" \\\n  --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\n### To-code\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/ui_mockup.png\" \\\n  --out \"/absolute/path/to/artifacts/ui_code\" \\\n  --target \"react\" \\\n  --title \"Generated App\"\n```\n\n### To-code notebook target\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/architecture_diagram.png\" \\\n  --out \"/absolute/path/to/artifacts/notebook_code\" \\\n  --target \"jupyter-notebook\" \\\n  --title \"OpenVINO Notebook\"\n```\n\n## Slash-command examples\n\n```text\n/skill local-document-ai-openvino parse file=./docs/report.pdf\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs fields=invoice_number,invoice_date,total_amount,vendor_name\n```\n\n```text\n/skill local-document-ai-openvino to-code file=./mockups/architecture.png target=jupyter-notebook\n```\n\n## Optional local demo UI\n\nStart the local UI when the user wants an interactive demo page:\n\n```bash\npython \"{baseDir}/scripts/serve_skill_ui.py\"\n```\n\nThe UI lets the user:\n\n- preview a local file\n- choose `parse`, `to-data`, or `to-code`\n- choose the `to-code` target\n- run the pipeline and inspect the generated local HTML reports\n\nThe bundled UI only allows preview/run access for local files under the skill directory and common user content folders such as Downloads, Documents, Desktop, and Pictures.\n\n## Failure behavior\n\nIf a run fails:\n\n- state which stage failed\n- do not claim outputs were created if they were not\n- prefer writing `error.json` with failure details\n- recommend `parse` first when the downstream request is ambiguous\n- surface stderr or a concise failure summary when available\n\n## Safety notes\n\n- Use a virtual environment for dependency installation.\n- Review and approve model downloads only when you explicitly intend to.\n- Keep outputs in a private local folder when documents are sensitive.\n- Review generated code and notebooks before execution.\n- Delete artifacts when they are no longer needed.\n- The wrapper always uses the bundled local scripts and the current Python interpreter. It does not allow custom interpreter or script-directory overrides.\n\n## Short reminder\n\nPresent this skill as a local document-understanding workflow with downstream actions and customizable field extraction, not as a plain OCR wrapper.\n\nFile v0.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn70rgyfb422qnxmr4ryhz1k698601ww\",\n  \"slug\": \"local-document-ai-openvino\",\n  \"version\": \"0.4.1\",\n  \"publishedAt\": 1784530501244\n}\n\nFile v0.4.1:references/mode_guide.md\n\n# Mode Guide\n\nThis file defines how each implemented mode should behave.\n\n## Shared Rules\n\nAlways:\n\n1. Parse first.\n2. Write `parsed.json`.\n3. Read from `parsed.json` for downstream work.\n4. Save final outputs under `task_output/`.\n5. Save a source map or traceability file for downstream modes.\n\nDo not:\n\n- generate directly from raw OCR text when `parsed.json` is available\n- invent facts not supported by the document\n- hide uncertainty or warnings that MinerU OpenVINO inference was not used\n\n## Mode: `parse`\n\n### Goal\n\nCreate the canonical structured representation only.\n\n### Inputs\n\n- `file`\n- optional `out`\n\n### Outputs\n\n- `parsed.json`\n- `parsed.md`\n- `tables/`\n- `figures/`\n\n### Return Summary\n\nInclude:\n\n- file processed\n- page count\n- counts of headings, paragraphs, tables, formulas, figures, charts if available\n- output folder path\n- warnings if any\n\n## Mode: `to-code`\n\n### Goal\n\nTurn a document into code-oriented artifacts.\n\n### Best-Fit Inputs\n\n- UI mockups\n- screenshots\n- forms\n- product specs\n- brochures\n- workflow documents\n\n### Allowed Outputs\n\n- `component_map.json`\n- `field_schema.json`\n- `app.jsx`\n- `index.html`\n- `styles.css`\n- `notes.md`\n- `traceability.json`\n\n### Behavior\n\n- infer sections and components from parsed structure\n- preserve labels, fields, buttons, lists, and tables\n- use placeholders when business rules are not explicit\n- record assumptions in `notes.md` and `traceability.json`\n\n### Good Examples\n\n- brochure image to landing page scaffold\n- form screenshot to React form skeleton\n- admin spec PDF to HTML + JSON field schema\n\n## Mode: `to-data`\n\n### Goal\n\nExtract machine-readable data for automation.\n\n### Best-Fit Inputs\n\n- invoices\n- reports\n- forms\n- schedules\n- tables\n- structured business documents\n\n### Allowed Outputs\n\n- `entities.json`\n- `kv_pairs.json`\n- `normalized.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `tables.csv`\n- `table_index.json`\n- `traceability.json`\n\n### Behavior\n\n- keep original text and normalized values when useful\n- preserve source block references for each record\n- separate extraction from interpretation\n- when the user provides a custom field list, generate a focused structured output for only those requested fields\n\n### Good Examples\n\n- invoice PDF to normalized invoice JSON\n- invoice PDF to a custom JSON record containing only `invoice_number`, `invoice_date`, `total_amount`, and `vendor_name`\n- annual report to CSV tables + entity summary\n- application form to field-value JSON\n\n## Mode Selection Hints\n\nPrefer:\n\n- `parse` when the user mainly wants structured OCR output\n- `to-code` when the user wants implementation artifacts\n- `to-data` when the user wants extraction/normalization\n\nIf unsure:\n\n- default to `parse`\n- then explain which downstream modes are available next\n\nFile v0.4.1:references/output_contracts.md\n\n# Output Contracts\n\nThis file defines the folder layout and file contracts.\n\n## Default folder layout\n\n```text\nartifacts/<document_stem>/\n├── parsed.json\n├── parsed.md\n├── traceability.json\n├── tables/\n├── figures/\n└── task_output/\n```\n\nIf the user passes `out=...`, use that directory instead.\n\n## Parse outputs\n\n### `parsed.json`\nRequired for every successful run.\n\n### `parsed.md`\nRequired for every successful run.\nPurpose:\n- human-readable rendering of the parse result\n\n### `tables/`\nOptional.\nWrite extracted CSVs or table assets here.\n\n### `figures/`\nOptional.\nWrite extracted figures here.\n\n---\n\n## Downstream outputs\n\n### `task_output/`\nRequired for non-parse modes.\n\nExamples:\n- `task_output/app.jsx`\n- `task_output/index.html`\n- `task_output/entities.json`\n- `task_output/slide_outline.md`\n\n### `traceability.json`\nRequired for non-parse modes.\n\nPurpose:\n- map generated artifacts back to source page/block IDs\n- record assumptions or low-confidence derivations\n\nExample:\n```json\n{\n  \"artifact\": \"task_output/app.jsx\",\n  \"mappings\": [\n    {\n      \"generated_unit_id\": \"component.signup_email_field\",\n      \"generated_text\": \"Email input field with label and helper text\",\n      \"source_refs\": [\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b12\"},\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b13\"}\n      ],\n      \"assumption\": \"Validation rule was not explicit in source.\"\n    }\n  ]\n}\n```\n\n## Failure contract\n\nIf a run fails:\n- do not create empty success artifacts\n- optionally write `error.json` with:\n  - stage\n  - message\n  - input file\n  - mode\n  - timestamp\n\nExample:\n```json\n{\n  \"stage\": \"parse\",\n  \"message\": \"Unsupported file type\",\n  \"input_file\": \"./docs/foo.xyz\",\n  \"mode\": \"parse\",\n  \"timestamp\": \"2026-04-08T16:00:00Z\"\n}\n```\n\n## Naming conventions\n\n- use lowercase snake_case for filenames\n- use stable IDs for pages, blocks, tables, and figures\n- use relative paths inside JSON when files live inside the same artifact folder\n\n## Quality notes\n\n- prefer explicit omission over silent loss\n- if tables or formulas are detected but not reconstructed, note that in `parse_info.warnings`\n- if output is partially inferred, record it in `traceability.json`\n\nFile v0.4.1:references/schema.md\n\n# Canonical Document Schema\n\nThis file defines the stable intermediate representation used by this skill.\n\n## Purpose\n\nAll downstream modes must consume the canonical schema instead of raw document text.\n\nBenefits:\n- stable contract between parse and transform stages\n- better grounding\n- traceability from outputs back to source blocks\n- easier testing and future model replacement\n\n## Top-level structure\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"document_id\": \"string\",\n  \"source\": {},\n  \"parse_info\": {},\n  \"pages\": [],\n  \"tables\": [],\n  \"figures\": [],\n  \"entities\": [],\n  \"outputs\": {}\n}\n```\n\n## Field definitions\n\n### `schema_version`\nVersion of this schema.\nType: `string`\n\n### `document_id`\nStable ID for the current document run.\nRecommended format:\n`<file_stem>-<short_hash>`\n\n### `source`\nInformation about the original input.\n\n```json\n{\n  \"input_path\": \"string\",\n  \"input_type\": \"pdf|image\",\n  \"filename\": \"string\",\n  \"sha256\": \"string|null\"\n}\n```\n\n### `parse_info`\nInformation about the parser run.\n\n```json\n{\n  \"engine\": \"local-document-ai-openvino\",\n  \"engine_version\": \"string\",\n  \"mode\": \"parse|to-code|to-data\",\n  \"created_at\": \"ISO-8601 string\",\n  \"warnings\": [\"string\"],\n  \"confidence_note\": \"string|null\"\n}\n```\n\n### `pages`\nOrdered list of parsed pages.\n\n```json\n[\n  {\n    \"page_id\": \"page_1\",\n    \"page_index\": 1,\n    \"width\": 2480,\n    \"height\": 3508,\n    \"blocks\": []\n  }\n]\n```\n\n### `blocks`\nOrdered list of page blocks.\n\n```json\n{\n  \"block_id\": \"p1_b1\",\n  \"type\": \"heading|paragraph|list|table|formula|chart|figure|seal|kv_pair|footer|header|caption|unknown\",\n  \"bbox\": [0, 0, 100, 50],\n  \"reading_order\": 1,\n  \"text\": \"string\",\n  \"markdown\": \"string|null\",\n  \"latex\": \"string|null\",\n  \"html\": \"string|null\",\n  \"confidence\": 0.0,\n  \"attributes\": {\n    \"heading_level\": 1,\n    \"language\": \"en\",\n    \"is_rotated\": false\n  },\n  \"relations\": {\n    \"parent_block_id\": null,\n    \"caption_for\": null,\n    \"table_id\": null,\n    \"figure_id\": null\n  }\n}\n```\n\n#### Block rules\n- `page_id + block_id` must be unique\n- `reading_order` must be monotonic within a page\n- `type` should be as specific as possible\n- `text` is plain normalized text\n- `markdown` is optional rendered text\n- `latex` is only for formulas\n- `html` is optional for table/structured fragments\n\n### `tables`\nNormalized structured tables.\n\n```json\n[\n  {\n    \"table_id\": \"t1\",\n    \"page_id\": \"page_2\",\n    \"bbox\": [10, 10, 200, 150],\n    \"caption\": \"Quarterly Revenue\",\n    \"headers\": [\"Quarter\", \"Revenue\"],\n    \"rows\": [\n      [\"Q1\", \"$1M\"],\n      [\"Q2\", \"$1.2M\"]\n    ],\n    \"csv_path\": \"tables/t1.csv\",\n    \"source_block_ids\": [\"p2_b8\"]\n  }\n]\n```\n\n### `figures`\nSaved figure assets.\n\n```json\n[\n  {\n    \"figure_id\": \"f1\",\n    \"page_id\": \"page_3\",\n    \"bbox\": [20, 20, 300, 200],\n    \"caption\": \"Architecture Diagram\",\n    \"asset_path\": \"figures/f1.png\",\n    \"source_block_ids\": [\"p3_b4\"]\n  }\n]\n```\n\n### `entities`\nOptional normalized entities.\n\n```json\n[\n  {\n    \"entity_id\": \"e1\",\n    \"type\": \"invoice_number|date|person|organization|amount|email|phone|custom\",\n    \"value\": \"INV-1001\",\n    \"normalized_value\": \"INV-1001\",\n    \"page_id\": \"page_1\",\n    \"source_block_ids\": [\"p1_b6\"],\n    \"confidence\": 0.96\n  }\n]\n```\n\n### `outputs`\nArtifacts written during parse or downstream generation.\n\n```json\n{\n  \"parsed_markdown_path\": \"parsed.md\",\n  \"task_outputs\": [\n    {\n      \"type\": \"react_scaffold|html_scaffold|normalized_json\",\n      \"path\": \"task_output/output.ext\",\n      \"source_map_path\": \"task_output/source_map.json\"\n    }\n  ]\n}\n```\n\n## Minimum parse requirements\n\nEvery successful parse must produce:\n- `schema_version`\n- `document_id`\n- `source`\n- `parse_info`\n- at least one `page`\n- `outputs.parsed_markdown_path`\n\n## Minimum grounding requirements\n\nEvery downstream output must preserve:\n- `page_id`\n- `block_id` references for supporting source regions\n- assumptions where source evidence is incomplete\n\n## Recommended normalization rules\n\n- normalize whitespace\n- preserve line breaks in Markdown where they affect meaning\n- do not merge unrelated columns into one paragraph\n- do not flatten tables into plain text if a structured table can be recovered\n- mark low-confidence or omitted content explicitly\n\nFile v0.4.1:skill-card.md\n\n## Description:\n\nPrivate local document AI for Intel hardware that parses PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI and outputs structured JSON, Markdown, and user-defined invoice fields.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[zhuo-yoyowz](https://clawhub.ai/user/zhuo-yoyowz)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and document-automation teams use this skill to parse local PDFs, invoices, receipts, screenshots, and diagrams into grounded artifacts, then derive structured records or draft code and notebook scaffolds while keeping document processing local.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The persistent HTTP service is unauthenticated.\n\nMitigation: Keep it bound to 127.0.0.1, prefer --server-kind ipc or --no-server where possible, and shut it down after use.\n\nRisk: Local document paths and generated artifacts may expose sensitive content on shared machines.\n\nMitigation: Install and run only on a trusted single-user machine, write outputs to private directories, and delete sensitive artifacts after review.\n\nRisk: Mutable dependency or model setup can change runtime behavior.\n\nMitigation: Use a virtual environment and pin model and dependency versions before using the skill in repeatable workflows.\n\nRisk: Generated notebooks or code may include remote-code cells or unsafe assumptions.\n\nMitigation: Review generated notebooks and code before execution, publishing, or connecting them to real systems, and remove trust_remote_code=True unless required.\n\n## Reference(s):\n\n- [Mode Guide](references/mode_guide.md)\n- [Output Contracts](references/output_contracts.md)\n- [Canonical Document Schema](references/schema.md)\n- [MinerU 2.5 Pro OpenVINO INT4 Model Bundle](https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov)\n- [ClawHub Skill Page](https://clawhub.ai/zhuo-yoyowz/skills/local-document-ai-openvino)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance]\n\n**Output Format:** [JSON, Markdown, HTML reports, Jupyter notebooks, generated code files, and CLI guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Writes per-run artifact folders with parsed.json, parsed.md, result_report.html, task_output files, and traceability where downstream outputs are generated.]\n\n## Skill Version(s):\n\n0.4.1 (source: server release evidence)\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\nFile v0.4.1:configs/parse_test.json\n\n{\n  \"mode\": \"parse\",\n  \"file\": \"./test_inputs/ov_invoice.png\",\n  \"out\": \"./artifacts/parse_manifest_test\",\n  \"debug\": false\n}\n\nFile v0.4.1:configs/to_code_notebook_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_notebook_manifest_test\",\n  \"target\": \"jupyter-notebook\",\n  \"title\": \"OpenVINO Notebook\",\n  \"debug\": false\n}\n\nFile v0.4.1:configs/to_code_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_html_manifest_test\",\n  \"target\": \"html-css\",\n  \"title\": \"OpenVINO Notebook Diagram\",\n  \"debug\": false\n}\n\nFile v0.4.1:configs/to_data_test.json\n\n{\n  \"mode\": \"to-data\",\n  \"file\": \"./test_inputs/invoice.pdf\",\n  \"out\": \"./artifacts/invoice_data_test\",\n  \"extract\": \"tables,entities,kv_pairs\",\n  \"fields\": \"invoice_number,invoice_date,total_amount,vendor_name,amount_due\",\n  \"debug\": false\n}\n\nFile v0.4.1:requirements.txt\n\n# Minimal runtime for the MinerU 2.5 OpenVINO workflow used by this skill.\n# The skill assumes you download a preconverted OV bundle such as:\n# snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov\n\nopenvino-genai>=2026.1.0,<2027\nmineru-vl-utils>=0.2.7\npypdfium2\nPillow\n\n# Local service layer for the default app-like experience.\nfastapi>=0.115,<1\nuvicorn>=0.30,<1\n\n# Optional local demo UI\n# gradio>=4.36,<6\n\n# Optional smoke-only fallbacks if you want richer non-MinerU diagnostics.\n# PyMuPDF>=1.26.0\n# pypdf>=5.0.0\n\nArchive v0.4.0: 30 files, 91387 bytes\n\nFiles: agents/openai.yaml (591b), assets/modelscope-skill-icon.svg (1455b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (243b), FILE_SUMMARY.md (3165b), references/mode_guide.md (2802b), references/output_contracts.md (2218b), references/schema.md (4201b), requirements.txt (506b), scripts/_local_vendor.py (1199b), scripts/check_env.py (9602b), scripts/data_enrichment.py (50639b), scripts/http_parse_server.py (4203b), scripts/install_local_runtime.py (2018b), scripts/mineru_openvino_backend.py (8524b), scripts/parse_client.py (12481b), scripts/parse_document.py (32772b), scripts/persistent_parse_server.py (8789b), scripts/render_result_report.py (57626b), scripts/run_skill.py (19475b), scripts/smoke_test.py (4308b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (8115b), scripts/utils.py (9861b), skill-card.md (2741b), SKILL.md (16924b), TEST_CHECKLIST.md (5040b), _meta.json (145b)\n\nFile v0.4.0:SKILL.md\n\n---\nname: local-document-ai-openvino\ndescription: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a local service, and output structured JSON/Markdown with user-defined invoice fields.\n---\n\n# Private Document AI with OpenVINO\n\nTurn local PDFs, invoices, screenshots, and diagrams into one of two useful outcomes:\n\n1. `to-data`: classify the document and extract structured fields, tables, and JSON, including user-requested key fields.\n2. `to-code`: turn screenshots, forms, and architecture diagrams into code or Jupyter notebook scaffolds.\n\nEverything runs locally and is built for Intel CPU/GPU acceleration with OpenVINO GenAI.\nThe default device is `CPU` for workshop stability. Set `MINERU_OPENVINO_DEVICE=GPU` or `AUTO` only after validating the target AI PC.\n\nThe default user experience is app-like:\n\n- the first call auto-starts a local service\n- HTTP/FastAPI service is preferred when available\n- the standard-library IPC service is used as a fallback\n- direct CLI parsing remains available with `--no-server`\n- the model stays resident after warmup so later calls avoid repeat model loading\n\nThe default runtime path in this release is:\n\n- MinerU 2.5 Pro\n- preconverted OpenVINO INT4 model bundle\n- local PDF rendering with `pypdfium2`\n- no local model export step\n\n## Why install this skill\n\nInstall this when you want one local workflow for:\n\n- invoice and receipt extraction\n- private PDF understanding\n- table and key-value extraction\n- architecture diagram to notebook generation\n- screenshot to HTML/React scaffold generation\n\nThis skill is especially good for demos because it already includes:\n\n- medical invoice `to-data` flows\n- restaurant invoice `to-data` flows\n- custom invoice field extraction such as invoice number, date, seller, and amount due\n- architecture diagram `to-code -> jupyter-notebook` flows\n- local HTML reports for easy review and screenshots\n\n## 30-second start\n\nCheck the environment:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nInstall with the fastest available local installer path:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File \"{baseDir}/scripts/install.ps1\"\n```\n\nWarm up the local document AI service:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\n```\n\nOr run directly from the CLI. Server mode is automatic by default:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\"\n```\n\nFor invoice demos with custom key fields:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nFor repeated workshop demos, prefer the persistent local server mode:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nOne-command invoice demo:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File \"{baseDir}/scripts/demo_invoice.ps1\"\n```\n\n## Example prompts\n\nUse prompts like these in OpenClaw:\n\n```text\nUse $local-document-ai-openvino to parse this local PDF and give me a structured report.\n```\n\n```text\nUse $local-document-ai-openvino to extract invoice fields, tables, and key-value pairs from this medical invoice.\n```\n\n```text\nUse $local-document-ai-openvino to classify this receipt and return normalized JSON.\n```\n\n```text\nUse $local-document-ai-openvino to extract only these invoice fields from this file: invoice_number, invoice_date, total_amount, vendor_name. Return a structured JSON result with just those requested fields.\n```\n\n```text\nUse $local-document-ai-openvino to extract these custom fields from this invoice: buyer_tax_id, seller_tax_id, amount_due, check_code. Save the full parse artifacts, but highlight the requested fields in the final structured output.\n```\n\n```text\nUse $local-document-ai-openvino to turn this architecture diagram into a Jupyter notebook scaffold.\n```\n\n```text\nUse $local-document-ai-openvino to convert this UI screenshot into an HTML scaffold.\n```\n\n## What you get\n\nTypical outputs include:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/structured_record.json`\n- `task_output/normalized.json`\n- `task_output/requested_fields.json`\n- `task_output/requested_fields_record.json`\n- `task_output/notebook.ipynb`\n- `code_preview.html`\n\n## Best demo paths\n\nIf you are evaluating the skill for the first time, start here:\n\n1. run `--warmup-server` once to start the persistent local parser and preload the model\n2. `to-data` on an invoice PDF; local service mode is automatic\n3. review `result_report.html`\n4. inspect `structured_record.json`\n5. rerun with `--fields` and inspect `requested_fields_record.json`\n6. then try `to-code` with a diagram image and target `jupyter-notebook`\n\n## Persistent local server mode\n\nUse server mode when the same machine will parse multiple PDFs/images. This is the default path.\n\nWhy this helps:\n\n1. The first request loads and compiles the MinerU/OpenVINO GenAI runtime once.\n2. Later agent calls send lightweight local IPC requests to the resident process.\n3. Model weights stay in the process memory instead of being moved repeatedly.\n4. The HTTP service layer makes future Web UI, desktop UI, and multi-agent integrations easier.\n5. The standard-library IPC server remains as a fallback when HTTP dependencies are unavailable.\n6. The normal CLI path remains available for one-off runs and debugging with `--no-server`.\n\nWarm up the server before a hands-on session:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\n```\n\nInspect the server:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --server-status\n```\n\nRun through the resident server:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nForce a specific local service transport if needed:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --server-kind http --server-status\npython \"{baseDir}/scripts/run_skill.py\" --server-kind ipc --server-status\n```\n\nDisable service mode for debugging:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --no-server --mode parse --file \"/absolute/path/to/file.pdf\"\n```\n\nRelease memory after the workshop:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --shutdown-server\n```\n\nServer mode uses these implementation files:\n\n- `{baseDir}/scripts/parse_client.py`\n- `{baseDir}/scripts/http_parse_server.py`\n- `{baseDir}/scripts/persistent_parse_server.py`\n\nThe server listens only on `127.0.0.1` loopback by default and does not bind to external network interfaces.\nIf the default port is occupied, set `LOCAL_DOCUMENT_AI_SERVER_PORT` before starting the server.\nFor HTTP service mode, set `LOCAL_DOCUMENT_AI_HTTP_PORT` if port `47274` is occupied.\n\n## Custom key-field extraction\n\nAfter the skill is installed, users can ask for a custom field list at call time.\nThis is the recommended pattern for invoice demos.\n\nUse the `fields` parameter with `to-data`:\n\n- CLI: `--fields \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- config JSON: `\"fields\": \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- slash-command style: `fields=invoice_number,invoice_date,total_amount,vendor_name`\n\nThe skill will:\n\n1. parse the full document locally with MinerU on OpenVINO\n2. keep the standard `kv_pairs`, `entities`, `tables`, and traceability artifacts\n3. resolve the requested field names to canonical keys when possible\n4. write a focused structured output for only those requested fields\n\nThe two demo-friendly outputs are:\n\n- `task_output/requested_fields.json`\n  This includes each requested field, the matched canonical key, whether it was found, the primary match, and all matches.\n- `task_output/requested_fields_record.json`\n  This is the compact final record keyed by the user-requested field names.\n\nRecommended invoice demo field names:\n\n- `invoice_number`\n- `invoice_code`\n- `check_code`\n- `invoice_date`\n- `buyer_tax_id`\n- `seller_tax_id`\n- `vendor_name`\n- `customer_name`\n- `subtotal`\n- `tax_amount`\n- `total_amount`\n- `amount_due`\n\nCommon aliases are also supported when they can be normalized to canonical keys, for example:\n\n- `seller`\n- `buyer`\n- `invoice no`\n- `invoice date`\n- `total`\n- `amount due`\n\n## Core pipeline\n\nUse this skill as a local document-to-action pipeline:\n\n1. Parse the document into a canonical structured representation.\n2. Optionally continue into `to-data` or `to-code`.\n3. Save outputs into a predictable artifact folder with traceability.\n\n## Read only if needed\n\nLoad these references when you need the schema or output contracts:\n\n- `{baseDir}/references/schema.md`\n- `{baseDir}/references/mode_guide.md`\n- `{baseDir}/references/output_contracts.md`\n\n## Primary entrypoint\n\nUse this published entrypoint:\n\n- CLI orchestrator: `{baseDir}/scripts/run_skill.py`\n- recommended default path: `{baseDir}/scripts/run_skill.py --mode to-data --file ...`\n- one-command invoice demo: `{baseDir}/scripts/demo_invoice.ps1`\n\nDo not call these implementation scripts directly from the skill:\n\n- `parse_document.py`\n- `parse_client.py`\n- `persistent_parse_server.py`\n- `transform_doc_to_data.py`\n- `transform_doc_to_code.py`\n\n## Local readiness\n\nCheck the environment before processing real documents:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nFor workshops, the simplest setup is installing into a skill-local `.vendor` directory.\nThe installer uses `uv pip` when `uv` is available and falls back to `pip`.\nThe entry scripts auto-detect the skill-local `.vendor`, so you do not need to edit `PYTHONPATH`:\n\n```bash\npython \"{baseDir}/scripts/install_local_runtime.py\"\n```\n\nIf you prefer, a normal virtual environment also works:\n\n```bash\npython -m pip install -r \"{baseDir}/requirements.txt\"\n```\n\nDownload the preconverted MinerU OpenVINO model bundle into the skill-local `models/` folder, or point the skill at it with an environment variable:\n\n```bash\nset MINERU_OPENVINO_MODEL_DIR=C:\\absolute\\path\\to\\MinerU2.5-Pro-2604-1.2B-int4-ov\n```\n\nFor the most stable hands-on setup, keep the default CPU path. To test acceleration on a validated Intel AI PC:\n\n```bash\nset MINERU_OPENVINO_DEVICE=GPU\n```\n\nRecommended model bundle:\n\n- `https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov`\n\nWorkshop-friendly download example:\n\n```bash\ngit clone --depth 1 https://www.modelscope.cn/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov.git \"{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov\"\n```\n\nRun a quick orchestration smoke test:\n\n```bash\npython \"{baseDir}/scripts/smoke_test.py\"\n```\n\nModel assets are discovered from:\n\n- `MINERU_OPENVINO_MODEL_DIR`\n- `MINERU_MODEL_DIR`\n- `{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov/`\n- `{baseDir}/models/mineru2.5-int4-ov/`\n\nPrefer using a predownloaded model bundle for workshops. This skill does not require local export or automatic model download.\n\n## Supported modes\n\n### `parse`\n\nUse when the user wants the structured parse only.\n\nOutputs:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- extracted layout, tables, or figures when available\n\n### `to-data`\n\nUse when the user wants structured extraction, normalization, or document classification.\n\nTypical outputs under `task_output/`:\n\n- `entities.json`\n- `kv_pairs.json`\n- `table_index.json`\n- `normalized.json`\n- `structured_record.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `traceability.json`\n\n### `to-code`\n\nUse when the user wants implementation-oriented output from the parse result.\n\nSupported targets:\n\n- `react`\n- `html-css`\n- `json-schema`\n- `jupyter-notebook`\n\nTypical outputs under `task_output/`:\n\n- `component_map.json`\n- `field_schema.json`\n- `ui_blueprint.json`\n- `notes.md`\n- `traceability.json`\n- target-specific artifacts such as `app.jsx`, `index.html`, `styles.css`, `schema.json`, `notebook.ipynb`, or `notebook_plan.json`\n\nTreat all generated code and notebooks as drafts. Review them before running, publishing, or connecting them to real systems.\n\n## Published package scope\n\nThe published ClawHub bundle is intentionally CLI-first.\n\n- main workflow: `scripts/run_skill.py`\n- diagnostics: `scripts/check_env.py`\n- smoke verification: `scripts/smoke_test.py`\n\nDeveloper-only local UI helpers are kept out of the public release bundle.\n\n## Pipeline rules\n\nAlways follow these rules:\n\n1. Prefer local execution.\n2. Always parse first into `parsed.json`.\n3. Generate downstream artifacts from `parsed.json`, not raw OCR text alone.\n4. Preserve page numbers, reading order, block types, and source anchors when possible.\n5. Write traceability for downstream outputs.\n6. Mark low-confidence regions or assumptions explicitly.\n7. Do not silently drop tables, figures, formulas, charts, or key-value regions.\n8. Save outputs into one artifact folder per run.\n9. For confidential documents, prefer an explicit private `--out` directory and remove artifacts after review.\n\n## Output contract\n\nDefault output folder:\n\n`./artifacts/<document_stem>/`\n\nExpected top-level outputs:\n\n- `effective_config.json`\n- `run_report.json`\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/`\n\n`to-code` runs may also emit:\n\n- `code_preview.html`\n\n## CLI examples\n\n### Parse\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode parse \\\n  --file \"/absolute/path/to/report.pdf\" \\\n  --out \"/absolute/path/to/artifacts/report_parse\"\n```\n\n### To-data\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\"\n```\n\n### To-data with custom fields\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\" \\\n  --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\n### To-code\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/ui_mockup.png\" \\\n  --out \"/absolute/path/to/artifacts/ui_code\" \\\n  --target \"react\" \\\n  --title \"Generated App\"\n```\n\n### To-code notebook target\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/architecture_diagram.png\" \\\n  --out \"/absolute/path/to/artifacts/notebook_code\" \\\n  --target \"jupyter-notebook\" \\\n  --title \"OpenVINO Notebook\"\n```\n\n## Slash-command examples\n\n```text\n/skill local-document-ai-openvino parse file=./docs/report.pdf\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs fields=invoice_number,invoice_date,total_amount,vendor_name\n```\n\n```text\n/skill local-document-ai-openvino to-code file=./mockups/architecture.png target=jupyter-notebook\n```\n\n## Optional local demo UI\n\nStart the local UI when the user wants an interactive demo page:\n\n```bash\npython \"{baseDir}/scripts/serve_skill_ui.py\"\n```\n\nThe UI lets the user:\n\n- preview a local file\n- choose `parse`, `to-data`, or `to-code`\n- choose the `to-code` target\n- run the pipeline and inspect the generated local HTML reports\n\nThe bundled UI only allows preview/run access for local files under the skill directory and common user content folders such as Downloads, Documents, Desktop, and Pictures.\n\n## Failure behavior\n\nIf a run fails:\n\n- state which stage failed\n- do not claim outputs were created if they were not\n- prefer writing `error.json` with failure details\n- recommend `parse` first when the downstream request is ambiguous\n- surface stderr or a concise failure summary when available\n\n## Safety notes\n\n- Use a virtual environment for dependency installation.\n- Review and approve model downloads only when you explicitly intend to.\n- Keep outputs in a private local folder when documents are sensitive.\n- Review generated code and notebooks before execution.\n- Delete artifacts when they are no longer needed.\n- The wrapper always uses the bundled local scripts and the current Python interpreter. It does not allow custom interpreter or script-directory overrides.\n\n## Short reminder\n\nPresent this skill as a local document-understanding workflow with downstream actions and customizable field extraction, not as a plain OCR wrapper.\n\nFile v0.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn70rgyfb422qnxmr4ryhz1k698601ww\",\n  \"slug\": \"local-document-ai-openvino\",\n  \"version\": \"0.4.0\",\n  \"publishedAt\": 1784523777590\n}\n\nFile v0.4.0:references/mode_guide.md\n\n# Mode Guide\n\nThis file defines how each implemented mode should behave.\n\n## Shared Rules\n\nAlways:\n\n1. Parse first.\n2. Write `parsed.json`.\n3. Read from `parsed.json` for downstream work.\n4. Save final outputs under `task_output/`.\n5. Save a source map or traceability file for downstream modes.\n\nDo not:\n\n- generate directly from raw OCR text when `parsed.json` is available\n- invent facts not supported by the document\n- hide uncertainty or warnings that MinerU OpenVINO inference was not used\n\n## Mode: `parse`\n\n### Goal\n\nCreate the canonical structured representation only.\n\n### Inputs\n\n- `file`\n- optional `out`\n\n### Outputs\n\n- `parsed.json`\n- `parsed.md`\n- `tables/`\n- `figures/`\n\n### Return Summary\n\nInclude:\n\n- file processed\n- page count\n- counts of headings, paragraphs, tables, formulas, figures, charts if available\n- output folder path\n- warnings if any\n\n## Mode: `to-code`\n\n### Goal\n\nTurn a document into code-oriented artifacts.\n\n### Best-Fit Inputs\n\n- UI mockups\n- screenshots\n- forms\n- product specs\n- brochures\n- workflow documents\n\n### Allowed Outputs\n\n- `component_map.json`\n- `field_schema.json`\n- `app.jsx`\n- `index.html`\n- `styles.css`\n- `notes.md`\n- `traceability.json`\n\n### Behavior\n\n- infer sections and components from parsed structure\n- preserve labels, fields, buttons, lists, and tables\n- use placeholders when business rules are not explicit\n- record assumptions in `notes.md` and `traceability.json`\n\n### Good Examples\n\n- brochure image to landing page scaffold\n- form screenshot to React form skeleton\n- admin spec PDF to HTML + JSON field schema\n\n## Mode: `to-data`\n\n### Goal\n\nExtract machine-readable data for automation.\n\n### Best-Fit Inputs\n\n- invoices\n- reports\n- forms\n- schedules\n- tables\n- structured business documents\n\n### Allowed Outputs\n\n- `entities.json`\n- `kv_pairs.json`\n- `normalized.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `tables.csv`\n- `table_index.json`\n- `traceability.json`\n\n### Behavior\n\n- keep original text and normalized values when useful\n- preserve source block references for each record\n- separate extraction from interpretation\n- when the user provides a custom field list, generate a focused structured output for only those requested fields\n\n### Good Examples\n\n- invoice PDF to normalized invoice JSON\n- invoice PDF to a custom JSON record containing only `invoice_number`, `invoice_date`, `total_amount`, and `vendor_name`\n- annual report to CSV tables + entity summary\n- application form to field-value JSON\n\n## Mode Selection Hints\n\nPrefer:\n\n- `parse` when the user mainly wants structured OCR output\n- `to-code` when the user wants implementation artifacts\n- `to-data` when the user wants extraction/normalization\n\nIf unsure:\n\n- default to `parse`\n- then explain which downstream modes are available next\n\nFile v0.4.0:references/output_contracts.md\n\n# Output Contracts\n\nThis file defines the folder layout and file contracts.\n\n## Default folder layout\n\n```text\nartifacts/<document_stem>/\n├── parsed.json\n├── parsed.md\n├── traceability.json\n├── tables/\n├── figures/\n└── task_output/\n```\n\nIf the user passes `out=...`, use that directory instead.\n\n## Parse outputs\n\n### `parsed.json`\nRequired for every successful run.\n\n### `parsed.md`\nRequired for every successful run.\nPurpose:\n- human-readable rendering of the parse result\n\n### `tables/`\nOptional.\nWrite extracted CSVs or table assets here.\n\n### `figures/`\nOptional.\nWrite extracted figures here.\n\n---\n\n## Downstream outputs\n\n### `task_output/`\nRequired for non-parse modes.\n\nExamples:\n- `task_output/app.jsx`\n- `task_output/index.html`\n- `task_output/entities.json`\n- `task_output/slide_outline.md`\n\n### `traceability.json`\nRequired for non-parse modes.\n\nPurpose:\n- map generated artifacts back to source page/block IDs\n- record assumptions or low-confidence derivations\n\nExample:\n```json\n{\n  \"artifact\": \"task_output/app.jsx\",\n  \"mappings\": [\n    {\n      \"generated_unit_id\": \"component.signup_email_field\",\n      \"generated_text\": \"Email input field with label and helper text\",\n      \"source_refs\": [\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b12\"},\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b13\"}\n      ],\n      \"assumption\": \"Validation rule was not explicit in source.\"\n    }\n  ]\n}\n```\n\n## Failure contract\n\nIf a run fails:\n- do not create empty success artifacts\n- optionally write `error.json` with:\n  - stage\n  - message\n  - input file\n  - mode\n  - timestamp\n\nExample:\n```json\n{\n  \"stage\": \"parse\",\n  \"message\": \"Unsupported file type\",\n  \"input_file\": \"./docs/foo.xyz\",\n  \"mode\": \"parse\",\n  \"timestamp\": \"2026-04-08T16:00:00Z\"\n}\n```\n\n## Naming conventions\n\n- use lowercase snake_case for filenames\n- use stable IDs for pages, blocks, tables, and figures\n- use relative paths inside JSON when files live inside the same artifact folder\n\n## Quality notes\n\n- prefer explicit omission over silent loss\n- if tables or formulas are detected but not reconstructed, note that in `parse_info.warnings`\n- if output is partially inferred, record it in `traceability.json`\n\nFile v0.4.0:references/schema.md\n\n# Canonical Document Schema\n\nThis file defines the stable intermediate representation used by this skill.\n\n## Purpose\n\nAll downstream modes must consume the canonical schema instead of raw document text.\n\nBenefits:\n- stable contract between parse and transform stages\n- better grounding\n- traceability from outputs back to source blocks\n- easier testing and future model replacement\n\n## Top-level structure\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"document_id\": \"string\",\n  \"source\": {},\n  \"parse_info\": {},\n  \"pages\": [],\n  \"tables\": [],\n  \"figures\": [],\n  \"entities\": [],\n  \"outputs\": {}\n}\n```\n\n## Field definitions\n\n### `schema_version`\nVersion of this schema.\nType: `string`\n\n### `document_id`\nStable ID for the current document run.\nRecommended format:\n`<file_stem>-<short_hash>`\n\n### `source`\nInformation about the original input.\n\n```json\n{\n  \"input_path\": \"string\",\n  \"input_type\": \"pdf|image\",\n  \"filename\": \"string\",\n  \"sha256\": \"string|null\"\n}\n```\n\n### `parse_info`\nInformation about the parser run.\n\n```json\n{\n  \"engine\": \"local-document-ai-openvino\",\n  \"engine_version\": \"string\",\n  \"mode\": \"parse|to-code|to-data\",\n  \"created_at\": \"ISO-8601 string\",\n  \"warnings\": [\"string\"],\n  \"confidence_note\": \"string|null\"\n}\n```\n\n### `pages`\nOrdered list of parsed pages.\n\n```json\n[\n  {\n    \"page_id\": \"page_1\",\n    \"page_index\": 1,\n    \"width\": 2480,\n    \"height\": 3508,\n    \"blocks\": []\n  }\n]\n```\n\n### `blocks`\nOrdered list of page blocks.\n\n```json\n{\n  \"block_id\": \"p1_b1\",\n  \"type\": \"heading|paragraph|list|table|formula|chart|figure|seal|kv_pair|footer|header|caption|unknown\",\n  \"bbox\": [0, 0, 100, 50],\n  \"reading_order\": 1,\n  \"text\": \"string\",\n  \"markdown\": \"string|null\",\n  \"latex\": \"string|null\",\n  \"html\": \"string|null\",\n  \"confidence\": 0.0,\n  \"attributes\": {\n    \"heading_level\": 1,\n    \"language\": \"en\",\n    \"is_rotated\": false\n  },\n  \"relations\": {\n    \"parent_block_id\": null,\n    \"caption_for\": null,\n    \"table_id\": null,\n    \"figure_id\": null\n  }\n}\n```\n\n#### Block rules\n- `page_id + block_id` must be unique\n- `reading_order` must be monotonic within a page\n- `type` should be as specific as possible\n- `text` is plain normalized text\n- `markdown` is optional rendered text\n- `latex` is only for formulas\n- `html` is optional for table/structured fragments\n\n### `tables`\nNormalized structured tables.\n\n```json\n[\n  {\n    \"table_id\": \"t1\",\n    \"page_id\": \"page_2\",\n    \"bbox\": [10, 10, 200, 150],\n    \"caption\": \"Quarterly Revenue\",\n    \"headers\": [\"Quarter\", \"Revenue\"],\n    \"rows\": [\n      [\"Q1\", \"$1M\"],\n      [\"Q2\", \"$1.2M\"]\n    ],\n    \"csv_path\": \"tables/t1.csv\",\n    \"source_block_ids\": [\"p2_b8\"]\n  }\n]\n```\n\n### `figures`\nSaved figure assets.\n\n```json\n[\n  {\n    \"figure_id\": \"f1\",\n    \"page_id\": \"page_3\",\n    \"bbox\": [20, 20, 300, 200],\n    \"caption\": \"Architecture Diagram\",\n    \"asset_path\": \"figures/f1.png\",\n    \"source_block_ids\": [\"p3_b4\"]\n  }\n]\n```\n\n### `entities`\nOptional normalized entities.\n\n```json\n[\n  {\n    \"entity_id\": \"e1\",\n    \"type\": \"invoice_number|date|person|organization|amount|email|phone|custom\",\n    \"value\": \"INV-1001\",\n    \"normalized_value\": \"INV-1001\",\n    \"page_id\": \"page_1\",\n    \"source_block_ids\": [\"p1_b6\"],\n    \"confidence\": 0.96\n  }\n]\n```\n\n### `outputs`\nArtifacts written during parse or downstream generation.\n\n```json\n{\n  \"parsed_markdown_path\": \"parsed.md\",\n  \"task_outputs\": [\n    {\n      \"type\": \"react_scaffold|html_scaffold|normalized_json\",\n      \"path\": \"task_output/output.ext\",\n      \"source_map_path\": \"task_output/source_map.json\"\n    }\n  ]\n}\n```\n\n## Minimum parse requirements\n\nEvery successful parse must produce:\n- `schema_version`\n- `document_id`\n- `source`\n- `parse_info`\n- at least one `page`\n- `outputs.parsed_markdown_path`\n\n## Minimum grounding requirements\n\nEvery downstream output must preserve:\n- `page_id`\n- `block_id` references for supporting source regions\n- assumptions where source evidence is incomplete\n\n## Recommended normalization rules\n\n- normalize whitespace\n- preserve line breaks in Markdown where they affect meaning\n- do not merge unrelated columns into one paragraph\n- do not flatten tables into plain text if a structured table can be recovered\n- mark low-confidence or omitted content explicitly\n\nFile v0.4.0:FILE_SUMMARY.md\n\n# File Summary\n\nThis skill package is organized around one orchestrator and three user-facing modes:\n\n- `parse`\n- `to-data`\n- `to-code`\n\n## Top level\n\n- `SKILL.md`\n  - Main skill definition and invocation guidance.\n\n- `requirements.txt`\n  - Base Python dependencies for the local parser and wrapper scripts.\n  - Does not auto-install the third-party PaddleOCR-VL OpenVINO wheel.\n\n- `FILE_SUMMARY.md`\n  - This file.\n\n- `TEST_CHECKLIST.md`\n  - Validation checklist for publish readiness.\n\n## Agents metadata\n\n- `agents/openai.yaml`\n  - UI metadata for skill chips, skill lists, and default invocation prompt.\n\n## References\n\n- `references/schema.md`\n  - Canonical structured parse schema used between parse and downstream transforms.\n\n- `references/mode_guide.md`\n  - Mode behaviors and output expectations.\n\n- `references/output_contracts.md`\n  - Artifact folder layout and output file contracts.\n\n## Example configs\n\n- `configs/parse_test.json`\n  - Example manifest for `parse`.\n\n- `configs/to_data_test.json`\n  - Example manifest for `to-data`.\n\n- `configs/to_code_test.json`\n  - Example manifest for `to-code` with `html-css`.\n\n- `configs/to_code_notebook_test.json`\n  - Example manifest for `to-code` with `jupyter-notebook`.\n\n## Core scripts\n\n- `scripts/run_skill.py`\n  - Main orchestrator.\n  - Parses first, then dispatches into `to-data` or `to-code`.\n  - Writes `effective_config.json` and `run_report.json`.\n  - Uses the current Python interpreter and bundled scripts only; interpreter/script path overrides are not supported.\n\n- `scripts/parse_document.py`\n  - Parse-stage CLI entry.\n  - Handles PDF or image inputs and normalizes outputs into the canonical schema.\n\n- `scripts/transform_doc_to_data.py`\n  - Downstream structured extraction entrypoint for `to-data`.\n\n- `scripts/data_enrichment.py`\n  - Heuristics and normalization for invoice classification, field extraction, table grouping, and structured summaries.\n\n- `scripts/transform_doc_to_code.py`\n  - Downstream generation entrypoint for `to-code`.\n  - Supports `react`, `html-css`, `json-schema`, and `jupyter-notebook`.\n\n- `scripts/render_result_report.py`\n  - Generates `result_report.html`.\n  - Renders layout, text, tables, JSON, and code/notebook previews depending on mode.\n\n- `scripts/serve_skill_ui.py`\n  - Optional local demo UI.\n  - Lets a user choose a file, select `parse` / `to-data` / `to-code`, and inspect generated reports.\n  - Restricts preview/run access to approved local content folders instead of arbitrary filesystem paths.\n\n## Validation and support scripts\n\n- `scripts/check_env.py`\n  - Checks Python dependencies, OpenVINO runtime, and model asset discovery.\n\n- `scripts/smoke_test.py`\n  - Runs wrapper-level smoke validation.\n\n- `scripts/utils.py`\n  - Shared helpers for JSON I/O, artifact layout, parsing subprocess output, slug generation, and error handling.\n\n## Notes\n\n- Verified sample artifacts live under `artifacts/`.\n- `test_inputs/openvino_notebook_architecture.png` is the current recommended `to-code` sample.\n- `test_inputs/ov_invoice.png`, `test_inputs/invoice.pdf`, and related invoice fixtures are the current recommended `parse` / `to-data` samples.\n\nFile v0.4.0:skill-card.md\n\n## Description: <br>\nPrivate local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a local service, and output structured JSON/Markdown with user-defined invoice fields. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhuo-yoyowz](https://clawhub.ai/user/zhuo-yoyowz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and automation users use this skill to parse local PDFs, invoices, screenshots, and diagrams into structured document artifacts, normalized records, Markdown reports, or draft code and notebook scaffolds while keeping processing on local Intel hardware. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Sensitive document contents are parsed and written to local artifact folders. <br>\nMitigation: Use a private output directory for sensitive runs and delete generated artifacts after review. <br>\nRisk: The skill can keep a persistent local parsing service running. <br>\nMitigation: Keep the service bound to 127.0.0.1, do not expose it to a network, and shut it down when the session is complete. <br>\nRisk: The skill may generate HTML, React code, or notebooks from document inputs. <br>\nMitigation: Review generated code, HTML, and notebooks before opening, executing, publishing, or connecting them to real systems. <br>\nRisk: Dependency resolution may vary across environments. <br>\nMitigation: Pin dependencies before using the skill in controlled or production-like environments. <br>\n\n\n## Reference(s): <br>\n- [Canonical Document Schema](artifact/references/schema.md) <br>\n- [Mode Guide](artifact/references/mode_guide.md) <br>\n- [Output Contracts](artifact/references/output_contracts.md) <br>\n- [MinerU 2.5 OpenVINO Model Bundle](https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance plus local artifact files such as JSON, Markdown, HTML reports, notebooks, and draft code] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Outputs are written to local artifact folders and may include traceability records for downstream transformations.] <br>\n\n## Skill Version(s): <br>\n0.4.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nFile v0.4.0:TEST_CHECKLIST.md\n\n# Test Checklist\n\nUse this checklist before treating the skill as publish-ready.\n\n## Goal\n\nConfirm that:\n\n1. `run_skill.py` is the only required orchestration entrypoint.\n2. `parse`, `to-data`, and `to-code` all work end to end.\n3. Result reports are generated consistently.\n4. Optional local UI works for interactive demos.\n5. The skill metadata and folder structure are valid.\n\n## Recommended sample files\n\n- `test_inputs/ov_invoice.png`\n  - Fast image sample for `parse`\n- `test_inputs/invoice.pdf`\n  - PDF sample for `to-data`\n- `test_inputs/openvino_notebook_architecture.png`\n  - Diagram sample for `to-code`\n\nAvoid `test_inputs/signup_form.png` for release validation. It is only a placeholder fixture.\n\n## 1. Validate skill metadata\n\n```bash\npython \"C:/Users/intel/.codex/skills/.system/skill-creator/scripts/quick_validate.py\" .\n```\n\nExpected result:\n\n- validation exits with code `0`\n- `SKILL.md` frontmatter is accepted\n- `agents/openai.yaml` is accepted\n\n## 2. Environment check\n\nCreate and activate a virtual environment first when preparing a clean machine.\n\n```bash\npython scripts/check_env.py\n```\n\nExpected result:\n\n- Python dependencies detected\n- OpenVINO runtime detected\n- PaddleOCR-VL OpenVINO package detected\n- model directories discovered or clearly reported as missing\n\n## 3. Parse mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode parse \\\n  --file ./test_inputs/ov_invoice.png \\\n  --out ./artifacts/release_parse_test\n```\n\nExpected files:\n\n- `artifacts/release_parse_test/effective_config.json`\n- `artifacts/release_parse_test/run_report.json`\n- `artifacts/release_parse_test/parsed.json`\n- `artifacts/release_parse_test/parsed.md`\n- `artifacts/release_parse_test/result_report.html`\n\nInspect:\n\n- `parsed.json` contains pages and blocks\n- `parsed.md` is readable\n- `result_report.html` opens locally\n- if the document is sensitive, verify the output location is a private local folder\n\n## 4. To-data mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode to-data \\\n  --file ./test_inputs/invoice.pdf \\\n  --out ./artifacts/release_todata_test \\\n  --extract tables,entities,kv_pairs\n```\n\nExpected files:\n\n- `artifacts/release_todata_test/result_report.html`\n- `artifacts/release_todata_test/task_output/normalized.json`\n- `artifacts/release_todata_test/task_output/traceability.json`\n- one or more of:\n  - `entities.json`\n  - `kv_pairs.json`\n  - `table_index.json`\n  - `structured_record.json`\n\nInspect:\n\n- document classification exists in normalized output\n- invoice-like inputs produce invoice-oriented fields\n- report shows layout, text, structured output, and table view when tables exist\n- review persisted artifacts before sharing them outside the machine\n\n## 5. To-code mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode to-code \\\n  --file ./test_inputs/openvino_notebook_architecture.png \\\n  --out ./artifacts/release_tocode_test \\\n  --target jupyter-notebook \\\n  --title \"OpenVINO Notebook\"\n```\n\nExpected files:\n\n- `artifacts/release_tocode_test/result_report.html`\n- `artifacts/release_tocode_test/code_preview.html`\n- `artifacts/release_tocode_test/task_output/notebook.ipynb`\n- `artifacts/release_tocode_test/task_output/notebook_plan.json`\n- `artifacts/release_tocode_test/task_output/traceability.json`\n\nInspect:\n\n- notebook file opens in Jupyter\n- `result_report.html` shows source, parse, generated app/code, and JSON views\n- `code_preview.html` renders notebook cells in a browser-friendly way\n- review generated code and notebook cells before running them\n\n## 6. Config-file flow\n\n```bash\npython scripts/run_skill.py --config-file ./configs/parse_test.json\npython scripts/run_skill.py --config-file ./configs/to_data_test.json\npython scripts/run_skill.py --config-file ./configs/to_code_notebook_test.json\n```\n\nExpected result:\n\n- each manifest resolves correctly\n- artifact folder matches config file output path\n\n## 7. Local UI flow\n\nStart the UI:\n\n```bash\npython scripts/serve_skill_ui.py\n```\n\nOpen:\n\n```text\nhttp://127.0.0.1:8765\n```\n\nCheck:\n\n- file preview works for images and PDFs\n- mode picker shows `parse`, `to-data`, and `to-code`\n- `to-code` exposes target selection\n- successful runs load `result_report.html` in the embedded viewer\n- `Open Code Preview` is enabled only for `to-code` runs that generated `code_preview.html`\n- files outside the approved local content folders are rejected by the UI\n\n## 8. Failure behavior\n\nMissing input:\n\n```bash\npython scripts/run_skill.py --mode parse --file ./test_inputs/does_not_exist.pdf\n```\n\nExpected result:\n\n- non-zero exit code\n- stderr contains JSON with `\"ok\": false`\n- fallback error artifact contains `error.json`\n\n## 9. Publish readiness\n\nTreat the skill as ready for ClawHub-style publishing when all of these are true:\n\n- `quick_validate.py` passes\n- core sample runs pass for `parse`, `to-data`, and `to-code`\n- `result_report.html` renders for all modes\n- `code_preview.html` renders for `to-code`\n- `agents/openai.yaml` exists and matches the skill purpose\n- `SKILL.md` examples match the actual supported targets and scripts\n\nFile v0.4.0:configs/parse_test.json\n\n{\n  \"mode\": \"parse\",\n  \"file\": \"./test_inputs/ov_invoice.png\",\n  \"out\": \"./artifacts/parse_manifest_test\",\n  \"debug\": false\n}\n\nFile v0.4.0:configs/to_code_notebook_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_notebook_manifest_test\",\n  \"target\": \"jupyter-notebook\",\n  \"title\": \"OpenVINO Notebook\",\n  \"debug\": false\n}\n\nFile v0.4.0:configs/to_code_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_html_manifest_test\",\n  \"target\": \"html-css\",\n  \"title\": \"OpenVINO Notebook Diagram\",\n  \"debug\": false\n}\n\nFile v0.4.0:configs/to_data_test.json\n\n{\n  \"mode\": \"to-data\",\n  \"file\": \"./test_inputs/invoice.pdf\",\n  \"out\": \"./artifacts/invoice_data_test\",\n  \"extract\": \"tables,entities,kv_pairs\",\n  \"fields\": \"invoice_number,invoice_date,total_amount,vendor_name,amount_due\",\n  \"debug\": false\n}\n\nArchive v0.2.1: 27 files, 80280 bytes\n\nFiles: agents/openai.yaml (591b), assets/modelscope-skill-icon.svg (1455b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (243b), FILE_SUMMARY.md (3165b), references/mode_guide.md (2802b), references/output_contracts.md (2218b), references/schema.md (4201b), requirements.txt (411b), scripts/_local_vendor.py (1199b), scripts/check_env.py (8194b), scripts/data_enrichment.py (50639b), scripts/install_local_runtime.py (1539b), scripts/mineru_openvino_backend.py (8449b), scripts/parse_document.py (29629b), scripts/render_result_report.py (57626b), scripts/run_skill.py (14709b), scripts/smoke_test.py (4308b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (8115b), scripts/utils.py (9861b), skill-card.md (2902b), SKILL.md (13029b), TEST_CHECKLIST.md (5040b), _meta.json (145b)\n\nFile v0.2.1:SKILL.md\n\n---\nname: local-document-ai-openvino\ndescription: Private document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams locally with MinerU 2.5 on OpenVINO GenAI, then turn them into structured data or executable notebook/code scaffolds. Supports custom key-field extraction for invoice demos, with clear quick-start commands and example prompts.\n---\n\n# Private Document AI with OpenVINO\n\nTurn local PDFs, invoices, screenshots, and diagrams into one of two useful outcomes:\n\n1. `to-data`: classify the document and extract structured fields, tables, and JSON, including user-requested key fields.\n2. `to-code`: turn screenshots, forms, and architecture diagrams into code or Jupyter notebook scaffolds.\n\nEverything runs locally and is built for Intel CPU/GPU acceleration with OpenVINO GenAI.\n\nThe default runtime path in this release is:\n\n- MinerU 2.5 Pro\n- preconverted OpenVINO INT4 model bundle\n- local PDF rendering with `pypdfium2`\n- no local model export step\n\n## Why install this skill\n\nInstall this when you want one local workflow for:\n\n- invoice and receipt extraction\n- private PDF understanding\n- table and key-value extraction\n- architecture diagram to notebook generation\n- screenshot to HTML/React scaffold generation\n\nThis skill is especially good for demos because it already includes:\n\n- medical invoice `to-data` flows\n- restaurant invoice `to-data` flows\n- custom invoice field extraction such as invoice number, date, seller, and amount due\n- architecture diagram `to-code -> jupyter-notebook` flows\n- local HTML reports for easy review and screenshots\n\n## 30-second start\n\nCheck the environment:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nOr run directly from the CLI:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\"\n```\n\nFor invoice demos with custom key fields:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\n## Example prompts\n\nUse prompts like these in OpenClaw:\n\n```text\nUse $local-document-ai-openvino to parse this local PDF and give me a structured report.\n```\n\n```text\nUse $local-document-ai-openvino to extract invoice fields, tables, and key-value pairs from this medical invoice.\n```\n\n```text\nUse $local-document-ai-openvino to classify this receipt and return normalized JSON.\n```\n\n```text\nUse $local-document-ai-openvino to extract only these invoice fields from this file: invoice_number, invoice_date, total_amount, vendor_name. Return a structured JSON result with just those requested fields.\n```\n\n```text\nUse $local-document-ai-openvino to extract these custom fields from this invoice: buyer_tax_id, seller_tax_id, amount_due, check_code. Save the full parse artifacts, but highlight the requested fields in the final structured output.\n```\n\n```text\nUse $local-document-ai-openvino to turn this architecture diagram into a Jupyter notebook scaffold.\n```\n\n```text\nUse $local-document-ai-openvino to convert this UI screenshot into an HTML scaffold.\n```\n\n## What you get\n\nTypical outputs include:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/structured_record.json`\n- `task_output/normalized.json`\n- `task_output/requested_fields.json`\n- `task_output/requested_fields_record.json`\n- `task_output/notebook.ipynb`\n- `code_preview.html`\n\n## Best demo paths\n\nIf you are evaluating the skill for the first time, start here:\n\n1. `to-data` on an invoice PDF\n2. review `result_report.html`\n3. inspect `structured_record.json`\n4. rerun with `--fields` and inspect `requested_fields_record.json`\n5. then try `to-code` with a diagram image and target `jupyter-notebook`\n\n## Custom key-field extraction\n\nAfter the skill is installed, users can ask for a custom field list at call time.\nThis is the recommended pattern for invoice demos.\n\nUse the `fields` parameter with `to-data`:\n\n- CLI: `--fields \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- config JSON: `\"fields\": \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- slash-command style: `fields=invoice_number,invoice_date,total_amount,vendor_name`\n\nThe skill will:\n\n1. parse the full document locally with MinerU on OpenVINO\n2. keep the standard `kv_pairs`, `entities`, `tables`, and traceability artifacts\n3. resolve the requested field names to canonical keys when possible\n4. write a focused structured output for only those requested fields\n\nThe two demo-friendly outputs are:\n\n- `task_output/requested_fields.json`\n  This includes each requested field, the matched canonical key, whether it was found, the primary match, and all matches.\n- `task_output/requested_fields_record.json`\n  This is the compact final record keyed by the user-requested field names.\n\nRecommended invoice demo field names:\n\n- `invoice_number`\n- `invoice_code`\n- `check_code`\n- `invoice_date`\n- `buyer_tax_id`\n- `seller_tax_id`\n- `vendor_name`\n- `customer_name`\n- `subtotal`\n- `tax_amount`\n- `total_amount`\n- `amount_due`\n\nCommon aliases are also supported when they can be normalized to canonical keys, for example:\n\n- `seller`\n- `buyer`\n- `invoice no`\n- `invoice date`\n- `total`\n- `amount due`\n\n## Core pipeline\n\nUse this skill as a local document-to-action pipeline:\n\n1. Parse the document into a canonical structured representation.\n2. Optionally continue into `to-data` or `to-code`.\n3. Save outputs into a predictable artifact folder with traceability.\n\n## Read only if needed\n\nLoad these references when you need the schema or output contracts:\n\n- `{baseDir}/references/schema.md`\n- `{baseDir}/references/mode_guide.md`\n- `{baseDir}/references/output_contracts.md`\n\n## Primary entrypoint\n\nUse this published entrypoint:\n\n- CLI orchestrator: `{baseDir}/scripts/run_skill.py`\n\nDo not call these implementation scripts directly from the skill:\n\n- `parse_document.py`\n- `transform_doc_to_data.py`\n- `transform_doc_to_code.py`\n\n## Local readiness\n\nCheck the environment before processing real documents:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nFor workshops, the simplest setup is installing into a skill-local `.vendor` directory.\nThe entry scripts auto-detect it, so you do not need to edit `PYTHONPATH`:\n\n```bash\npython \"{baseDir}/scripts/install_local_runtime.py\"\n```\n\nIf you prefer, a normal virtual environment also works:\n\n```bash\npython -m pip install -r \"{baseDir}/requirements.txt\"\n```\n\nDownload the preconverted MinerU OpenVINO model bundle into the skill-local `models/` folder, or point the skill at it with an environment variable:\n\n```bash\nset MINERU_OPENVINO_MODEL_DIR=C:\\absolute\\path\\to\\MinerU2.5-Pro-2604-1.2B-int4-ov\n```\n\nRecommended model bundle:\n\n- `https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov`\n\nWorkshop-friendly download example:\n\n```bash\ngit clone --depth 1 https://www.modelscope.cn/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov.git \"{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov\"\n```\n\nRun a quick orchestration smoke test:\n\n```bash\npython \"{baseDir}/scripts/smoke_test.py\"\n```\n\nModel assets are discovered from:\n\n- `MINERU_OPENVINO_MODEL_DIR`\n- `MINERU_MODEL_DIR`\n- `{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov/`\n- `{baseDir}/models/mineru2.5-int4-ov/`\n\nPrefer using a predownloaded model bundle for workshops. This skill does not require local export or automatic model download.\n\n## Supported modes\n\n### `parse`\n\nUse when the user wants the structured parse only.\n\nOutputs:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- extracted layout, tables, or figures when available\n\n### `to-data`\n\nUse when the user wants structured extraction, normalization, or document classification.\n\nTypical outputs under `task_output/`:\n\n- `entities.json`\n- `kv_pairs.json`\n- `table_index.json`\n- `normalized.json`\n- `structured_record.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `traceability.json`\n\n### `to-code`\n\nUse when the user wants implementation-oriented output from the parse result.\n\nSupported targets:\n\n- `react`\n- `html-css`\n- `json-schema`\n- `jupyter-notebook`\n\nTypical outputs under `task_output/`:\n\n- `component_map.json`\n- `field_schema.json`\n- `ui_blueprint.json`\n- `notes.md`\n- `traceability.json`\n- target-specific artifacts such as `app.jsx`, `index.html`, `styles.css`, `schema.json`, `notebook.ipynb`, or `notebook_plan.json`\n\nTreat all generated code and notebooks as drafts. Review them before running, publishing, or connecting them to real systems.\n\n## Published package scope\n\nThe published ClawHub bundle is intentionally CLI-first.\n\n- main workflow: `scripts/run_skill.py`\n- diagnostics: `scripts/check_env.py`\n- smoke verification: `scripts/smoke_test.py`\n\nDeveloper-only local UI helpers are kept out of the public release bundle.\n\n## Pipeline rules\n\nAlways follow these rules:\n\n1. Prefer local execution.\n2. Always parse first into `parsed.json`.\n3. Generate downstream artifacts from `parsed.json`, not raw OCR text alone.\n4. Preserve page numbers, reading order, block types, and source anchors when possible.\n5. Write traceability for downstream outputs.\n6. Mark low-confidence regions or assumptions explicitly.\n7. Do not silently drop tables, figures, formulas, charts, or key-value regions.\n8. Save outputs into one artifact folder per run.\n9. For confidential documents, prefer an explicit private `--out` directory and remove artifacts after review.\n\n## Output contract\n\nDefault output folder:\n\n`./artifacts/<document_stem>/`\n\nExpected top-level outputs:\n\n- `effective_config.json`\n- `run_report.json`\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/`\n\n`to-code` runs may also emit:\n\n- `code_preview.html`\n\n## CLI examples\n\n### Parse\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode parse \\\n  --file \"/absolute/path/to/report.pdf\" \\\n  --out \"/absolute/path/to/artifacts/report_parse\"\n```\n\n### To-data\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\"\n```\n\n### To-data with custom fields\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\" \\\n  --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\n### To-code\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/ui_mockup.png\" \\\n  --out \"/absolute/path/to/artifacts/ui_code\" \\\n  --target \"react\" \\\n  --title \"Generated App\"\n```\n\n### To-code notebook target\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/architecture_diagram.png\" \\\n  --out \"/absolute/path/to/artifacts/notebook_code\" \\\n  --target \"jupyter-notebook\" \\\n  --title \"OpenVINO Notebook\"\n```\n\n## Slash-command examples\n\n```text\n/skill local-document-ai-openvino parse file=./docs/report.pdf\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs fields=invoice_number,invoice_date,total_amount,vendor_name\n```\n\n```text\n/skill local-document-ai-openvino to-code file=./mockups/architecture.png target=jupyter-notebook\n```\n\n## Optional local demo UI\n\nStart the local UI when the user wants an interactive demo page:\n\n```bash\npython \"{baseDir}/scripts/serve_skill_ui.py\"\n```\n\nThe UI lets the user:\n\n- preview a local file\n- choose `parse`, `to-data`, or `to-code`\n- choose the `to-code` target\n- run the pipeline and inspect the generated local HTML reports\n\nThe bundled UI only allows preview/run access for local files under the skill directory and common user content folders such as Downloads, Documents, Desktop, and Pictures.\n\n## Failure behavior\n\nIf a run fails:\n\n- state which stage failed\n- do not claim outputs were created if they were not\n- prefer writing `error.json` with failure details\n- recommend `parse` first when the downstream request is ambiguous\n- surface stderr or a concise failure summary when available\n\n## Safety notes\n\n- Use a virtual environment for dependency installation.\n- Review and approve model downloads only when you explicitly intend to.\n- Keep outputs in a private local folder when documents are sensitive.\n- Review generated code and notebooks before execution.\n- Delete artifacts when they are no longer needed.\n- The wrapper always uses the bundled local scripts and the current Python interpreter. It does not allow custom interpreter or script-directory overrides.\n\n## Short reminder\n\nPresent this skill as a local document-understanding workflow with downstream actions and customizable field extraction, not as a plain OCR wrapper.\n\nFile v0.2.1:_meta.json\n\n{\n  \"ownerId\": \"kn70rgyfb422qnxmr4ryhz1k698601ww\",\n  \"slug\": \"local-document-ai-openvino\",\n  \"version\": \"0.2.1\",\n  \"publishedAt\": 1782366407133\n}\n\nFile v0.2.1:references/mode_guide.md\n\n# Mode Guide\n\nThis file defines how each implemented mode should behave.\n\n## Shared Rules\n\nAlways:\n\n1. Parse first.\n2. Write `parsed.json`.\n3. Read from `parsed.json` for downstream work.\n4. Save final outputs under `task_output/`.\n5. Save a source map or traceability file for downstream modes.\n\nDo not:\n\n- generate directly from raw OCR text when `parsed.json` is available\n- invent facts not supported by the document\n- hide uncertainty or warnings that MinerU OpenVINO inference was not used\n\n## Mode: `parse`\n\n### Goal\n\nCreate the canonical structured representation only.\n\n### Inputs\n\n- `file`\n- optional `out`\n\n### Outputs\n\n- `parsed.json`\n- `parsed.md`\n- `tables/`\n- `figures/`\n\n### Return Summary\n\nInclude:\n\n- file processed\n- page count\n- counts of headings, paragraphs, tables, formulas, figures, charts if available\n- output folder path\n- warnings if any\n\n## Mode: `to-code`\n\n### Goal\n\nTurn a document into code-oriented artifacts.\n\n### Best-Fit Inputs\n\n- UI mockups\n- screenshots\n- forms\n- product specs\n- brochures\n- workflow documents\n\n### Allowed Outputs\n\n- `component_map.json`\n- `field_schema.json`\n- `app.jsx`\n- `index.html`\n- `styles.css`\n- `notes.md`\n- `traceability.json`\n\n### Behavior\n\n- infer sections and components from parsed structure\n- preserve labels, fields, buttons, lists, and tables\n- use placeholders when business rules are not explicit\n- record assumptions in `notes.md` and `traceability.json`\n\n### Good Examples\n\n- brochure image to landing page scaffold\n- form screenshot to React form skeleton\n- admin spec PDF to HTML + JSON field schema\n\n## Mode: `to-data`\n\n### Goal\n\nExtract machine-readable data for automation.\n\n### Best-Fit Inputs\n\n- invoices\n- reports\n- forms\n- schedules\n- tables\n- structured business documents\n\n### Allowed Outputs\n\n- `entities.json`\n- `kv_pairs.json`\n- `normalized.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `tables.csv`\n- `table_index.json`\n- `traceability.json`\n\n### Behavior\n\n- keep original text and normalized values when useful\n- preserve source block references for each record\n- separate extraction from interpretation\n- when the user provides a custom field list, generate a focused structured output for only those requested fields\n\n### Good Examples\n\n- invoice PDF to normalized invoice JSON\n- invoice PDF to a custom JSON record containing only `invoice_number`, `invoice_date`, `total_amount`, and `vendor_name`\n- annual report to CSV tables + entity summary\n- application form to field-value JSON\n\n## Mode Selection Hints\n\nPrefer:\n\n- `parse` when the user mainly wants structured OCR output\n- `to-code` when the user wants implementation artifacts\n- `to-data` when the user wants extraction/normalization\n\nIf unsure:\n\n- default to `parse`\n- then explain which downstream modes are available next\n\nFile v0.2.1:references/output_contracts.md\n\n# Output Contracts\n\nThis file defines the folder layout and file contracts.\n\n## Default folder layout\n\n```text\nartifacts/<document_stem>/\n├── parsed.json\n├── parsed.md\n├── traceability.json\n├── tables/\n├── figures/\n└── task_output/\n```\n\nIf the user passes `out=...`, use that directory instead.\n\n## Parse outputs\n\n### `parsed.json`\nRequired for every successful run.\n\n### `parsed.md`\nRequired for every successful run.\nPurpose:\n- human-readable rendering of the parse result\n\n### `tables/`\nOptional.\nWrite extracted CSVs or table assets here.\n\n### `figures/`\nOptional.\nWrite extracted figures here.\n\n---\n\n## Downstream outputs\n\n### `task_output/`\nRequired for non-parse modes.\n\nExamples:\n- `task_output/app.jsx`\n- `task_output/index.html`\n- `task_output/entities.json`\n- `task_output/slide_outline.md`\n\n### `traceability.json`\nRequired for non-parse modes.\n\nPurpose:\n- map generated artifacts back to source page/block IDs\n- record assumptions or low-confidence derivations\n\nExample:\n```json\n{\n  \"artifact\": \"task_output/app.jsx\",\n  \"mappings\": [\n    {\n      \"generated_unit_id\": \"component.signup_email_field\",\n      \"generated_text\": \"Email input field with label and helper text\",\n      \"source_refs\": [\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b12\"},\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b13\"}\n      ],\n      \"assumption\": \"Validation rule was not explicit in source.\"\n    }\n  ]\n}\n```\n\n## Failure contract\n\nIf a run fails:\n- do not create empty success artifacts\n- optionally write `error.json` with:\n  - stage\n  - message\n  - input file\n  - mode\n  - timestamp\n\nExample:\n```json\n{\n  \"stage\": \"parse\",\n  \"message\": \"Unsupported file type\",\n  \"input_file\": \"./docs/foo.xyz\",\n  \"mode\": \"parse\",\n  \"timestamp\": \"2026-04-08T16:00:00Z\"\n}\n```\n\n## Naming conventions\n\n- use lowercase snake_case for filenames\n- use stable IDs for pages, blocks, tables, and figures\n- use relative paths inside JSON when files live inside the same artifact folder\n\n## Quality notes\n\n- prefer explicit omission over silent loss\n- if tables or formulas are detected but not reconstructed, note that in `parse_info.warnings`\n- if output is partially inferred, record it in `traceability.json`\n\nFile v0.2.1:references/schema.md\n\n# Canonical Document Schema\n\nThis file defines the stable intermediate representation used by this skill.\n\n## Purpose\n\nAll downstream modes must consume the canonical schema instead of raw document text.\n\nBenefits:\n- stable contract between parse and transform stages\n- better grounding\n- traceability from outputs back to source blocks\n- easier testing and future model replacement\n\n## Top-level structure\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"document_id\": \"string\",\n  \"source\": {},\n  \"parse_info\": {},\n  \"pages\": [],\n  \"tables\": [],\n  \"figures\": [],\n  \"entities\": [],\n  \"outputs\": {}\n}\n```\n\n## Field definitions\n\n### `schema_version`\nVersion of this schema.\nType: `string`\n\n### `document_id`\nStable ID for the current document run.\nRecommended format:\n`<file_stem>-<short_hash>`\n\n### `source`\nInformation about the original input.\n\n```json\n{\n  \"input_path\": \"string\",\n  \"input_type\": \"pdf|image\",\n  \"filename\": \"string\",\n  \"sha256\": \"string|null\"\n}\n```\n\n### `parse_info`\nInformation about the parser run.\n\n```json\n{\n  \"engine\": \"local-document-ai-openvino\",\n  \"engine_version\": \"string\",\n  \"mode\": \"parse|to-code|to-data\",\n  \"created_at\": \"ISO-8601 string\",\n  \"warnings\": [\"string\"],\n  \"confidence_note\": \"string|null\"\n}\n```\n\n### `pages`\nOrdered list of parsed pages.\n\n```json\n[\n  {\n    \"page_id\": \"page_1\",\n    \"page_index\": 1,\n    \"width\": 2480,\n    \"height\": 3508,\n    \"blocks\": []\n  }\n]\n```\n\n### `blocks`\nOrdered list of page blocks.\n\n```json\n{\n  \"block_id\": \"p1_b1\",\n  \"type\": \"heading|paragraph|list|table|formula|chart|figure|seal|kv_pair|footer|header|caption|unknown\",\n  \"bbox\": [0, 0, 100, 50],\n  \"reading_order\": 1,\n  \"text\": \"string\",\n  \"markdown\": \"string|null\",\n  \"latex\": \"string|null\",\n  \"html\": \"string|null\",\n  \"confidence\": 0.0,\n  \"attributes\": {\n    \"heading_level\": 1,\n    \"language\": \"en\",\n    \"is_rotated\": false\n  },\n  \"relations\": {\n    \"parent_block_id\": null,\n    \"caption_for\": null,\n    \"table_id\": null,\n    \"figure_id\": null\n  }\n}\n```\n\n#### Block rules\n- `page_id + block_id` must be unique\n- `reading_order` must be monotonic within a page\n- `type` should be as specific as possible\n- `text` is plain normalized text\n- `markdown` is optional rendered text\n- `latex` is only for formulas\n- `html` is optional for table/structured fragments\n\n### `tables`\nNormalized structured tables.\n\n```json\n[\n  {\n    \"table_id\": \"t1\",\n    \"page_id\": \"page_2\",\n    \"bbox\": [10, 10, 200, 150],\n    \"caption\": \"Quarterly Revenue\",\n    \"headers\": [\"Quarter\", \"Revenue\"],\n    \"rows\": [\n      [\"Q1\", \"$1M\"],\n      [\"Q2\", \"$1.2M\"]\n    ],\n    \"csv_path\": \"tables/t1.csv\",\n    \"source_block_ids\": [\"p2_b8\"]\n  }\n]\n```\n\n### `figures`\nSaved figure assets.\n\n```json\n[\n  {\n    \"figure_id\": \"f1\",\n    \"page_id\": \"page_3\",\n    \"bbox\": [20, 20, 300, 200],\n    \"caption\": \"Architecture Diagram\",\n    \"asset_path\": \"figures/f1.png\",\n    \"source_block_ids\": [\"p3_b4\"]\n  }\n]\n```\n\n### `entities`\nOptional normalized entities.\n\n```json\n[\n  {\n    \"entity_id\": \"e1\",\n    \"type\": \"invoice_number|date|person|organization|amount|email|phone|custom\",\n    \"value\": \"INV-1001\",\n    \"normalized_value\": \"INV-1001\",\n    \"page_id\": \"page_1\",\n    \"source_block_ids\": [\"p1_b6\"],\n    \"confidence\": 0.96\n  }\n]\n```\n\n### `outputs`\nArtifacts written during parse or downstream generation.\n\n```json\n{\n  \"parsed_markdown_path\": \"parsed.md\",\n  \"task_outputs\": [\n    {\n      \"type\": \"react_scaffold|html_scaffold|normalized_json\",\n      \"path\": \"task_output/output.ext\",\n      \"source_map_path\": \"task_output/source_map.json\"\n    }\n  ]\n}\n```\n\n## Minimum parse requirements\n\nEvery successful parse must produce:\n- `schema_version`\n- `document_id`\n- `source`\n- `parse_info`\n- at least one `page`\n- `outputs.parsed_markdown_path`\n\n## Minimum grounding requirements\n\nEvery downstream output must preserve:\n- `page_id`\n- `block_id` references for supporting source regions\n- assumptions where source evidence is incomplete\n\n## Recommended normalization rules\n\n- normalize whitespace\n- preserve line breaks in Markdown where they affect meaning\n- do not merge unrelated columns into one paragraph\n- do not flatten tables into plain text if a structured table can be recovered\n- mark low-confidence or omitted content explicitly\n\nFile v0.2.1:FILE_SUMMARY.md\n\n# File Summary\n\nThis skill package is organized around one orchestrator and three user-facing modes:\n\n- `parse`\n- `to-data`\n- `to-code`\n\n## Top level\n\n- `SKILL.md`\n  - Main skill definition and invocation guidance.\n\n- `requirements.txt`\n  - Base Python dependencies for the local parser and wrapper scripts.\n  - Does not auto-install the third-party PaddleOCR-VL OpenVINO wheel.\n\n- `FILE_SUMMARY.md`\n  - This file.\n\n- `TEST_CHECKLIST.md`\n  - Validation checklist for publish readiness.\n\n## Agents metadata\n\n- `agents/openai.yaml`\n  - UI metadata for skill chips, skill lists, and default invocation prompt.\n\n## References\n\n- `references/schema.md`\n  - Canonical structured parse schema used between parse and downstream transforms.\n\n- `references/mode_guide.md`\n  - Mode behaviors and output expectations.\n\n- `references/output_contracts.md`\n  - Artifact folder layout and output file contracts.\n\n## Example configs\n\n- `configs/parse_test.json`\n  - Example manifest for `parse`.\n\n- `configs/to_data_test.json`\n  - Example manifest for `to-data`.\n\n- `configs/to_code_test.json`\n  - Example manifest for `to-code` with `html-css`.\n\n- `configs/to_code_notebook_test.json`\n  - Example manifest for `to-code` with `jupyter-notebook`.\n\n## Core scripts\n\n- `scripts/run_skill.py`\n  - Main orchestrator.\n  - Parses first, then dispatches into `to-data` or `to-code`.\n  - Writes `effective_config.json` and `run_report.json`.\n  - Uses the current Python interpreter and bundled scripts only; interpreter/script path overrides are not supported.\n\n- `scripts/parse_document.py`\n  - Parse-stage CLI entry.\n  - Handles PDF or image inputs and normalizes outputs into the canonical schema.\n\n- `scripts/transform_doc_to_data.py`\n  - Downstream structured extraction entrypoint for `to-data`.\n\n- `scripts/data_enrichment.py`\n  - Heuristics and normalization for invoice classification, field extraction, table grouping, and structured summaries.\n\n- `scripts/transform_doc_to_code.py`\n  - Downstream generation entrypoint for `to-code`.\n  - Supports `react`, `html-css`, `json-schema`, and `jupyter-notebook`.\n\n- `scripts/render_result_report.py`\n  - Generates `result_report.html`.\n  - Renders layout, text, tables, JSON, and code/notebook previews depending on mode.\n\n- `scripts/serve_skill_ui.py`\n  - Optional local demo UI.\n  - Lets a user choose a file, select `parse` / `to-data` / `to-code`, and inspect generated reports.\n  - Restricts preview/run access to approved local content folders instead of arbitrary filesystem paths.\n\n## Validation and support scripts\n\n- `scripts/check_env.py`\n  - Checks Python dependencies, OpenVINO runtime, and model asset discovery.\n\n- `scripts/smoke_test.py`\n  - Runs wrapper-level smoke validation.\n\n- `scripts/utils.py`\n  - Shared helpers for JSON I/O, artifact layout, parsing subprocess output, slug generation, and error handling.\n\n## Notes\n\n- Verified sample artifacts live under `artifacts/`.\n- `test_inputs/openvino_notebook_architecture.png` is the current recommended `to-code` sample.\n- `test_inputs/ov_invoice.png`, `test_inputs/invoice.pdf`, and related invoice fixtures are the current recommended `parse` / `to-data` samples.\n\nFile v0.2.1:skill-card.md\n\n## Description: <br>\nPrivate document AI for Intel hardware that parses PDFs, invoices, screenshots, and diagrams locally with MinerU 2.5 on OpenVINO GenAI, then turns them into structured data or executable notebook and code scaffolds. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhuo-yoyowz](https://clawhub.ai/user/zhuo-yoyowz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to process private local documents into structured extraction artifacts, reports, and draft implementation assets. It is suited for invoice and receipt extraction, document classification, table and key-value extraction, and screenshot or diagram conversion into code or notebook scaffolds. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill writes full parsed document artifacts to disk, which can expose sensitive document contents if output folders are shared or retained longer than needed. <br>\nMitigation: Use private local output directories for confidential documents and delete generated artifacts after review. <br>\nRisk: Generated Jupyter notebooks or code scaffolds may include runnable remote-model code or unsafe assumptions. <br>\nMitigation: Inspect generated code and notebook cells before execution, especially model download steps and any trust_remote_code=True usage. <br>\nRisk: The security verdict is suspicious because notebook output can create runnable remote-model code with insufficient warning. <br>\nMitigation: Review dependencies and generated execution paths before production use, and pin or audit dependencies for managed deployments. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/zhuo-yoyowz/skills/local-document-ai-openvino) <br>\n- [MinerU OpenVINO model bundle](https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov) <br>\n- [Mode guide](references/mode_guide.md) <br>\n- [Output contracts](references/output_contracts.md) <br>\n- [Structured parse schema](references/schema.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Markdown guidance plus local files such as JSON, Markdown, HTML reports, code scaffolds, and Jupyter notebooks] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Writes parse and downstream artifacts to a local output folder with traceability files when downstream modes are used.] <br>\n\n## Skill Version(s): <br>\n0.2.1 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nFile v0.2.1:TEST_CHECKLIST.md\n\n# Test Checklist\n\nUse this checklist before treating the skill as publish-ready.\n\n## Goal\n\nConfirm that:\n\n1. `run_skill.py` is the only required orchestration entrypoint.\n2. `parse`, `to-data`, and `to-code` all work end to end.\n3. Result reports are generated consistently.\n4. Optional local UI works for interactive demos.\n5. The skill metadata and folder structure are valid.\n\n## Recommended sample files\n\n- `test_inputs/ov_invoice.png`\n  - Fast image sample for `parse`\n- `test_inputs/invoice.pdf`\n  - PDF sample for `to-data`\n- `test_inputs/openvino_notebook_architecture.png`\n  - Diagram sample for `to-code`\n\nAvoid `test_inputs/signup_form.png` for release validation. It is only a placeholder fixture.\n\n## 1. Validate skill metadata\n\n```bash\npython \"C:/Users/intel/.codex/skills/.system/skill-creator/scripts/quick_validate.py\" .\n```\n\nExpected result:\n\n- validation exits with code `0`\n- `SKILL.md` frontmatter is accepted\n- `agents/openai.yaml` is accepted\n\n## 2. Environment check\n\nCreate and activate a virtual environment first when preparing a clean machine.\n\n```bash\npython scripts/check_env.py\n```\n\nExpected result:\n\n- Python dependencies detected\n- OpenVINO runtime detected\n- PaddleOCR-VL OpenVINO package detected\n- model directories discovered or clearly reported as missing\n\n## 3. Parse mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode parse \\\n  --file ./test_inputs/ov_invoice.png \\\n  --out ./artifacts/release_parse_test\n```\n\nExpected files:\n\n- `artifacts/release_parse_test/effective_config.json`\n- `artifacts/release_parse_test/run_report.json`\n- `artifacts/release_parse_test/parsed.json`\n- `artifacts/release_parse_test/parsed.md`\n- `artifacts/release_parse_test/result_report.html`\n\nInspect:\n\n- `parsed.json` contains pages and blocks\n- `parsed.md` is readable\n- `result_report.html` opens locally\n- if the document is sensitive, verify the output location is a private local folder\n\n## 4. To-data mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode to-data \\\n  --file ./test_inputs/invoice.pdf \\\n  --out ./artifacts/release_todata_test \\\n  --extract tables,entities,kv_pairs\n```\n\nExpected files:\n\n- `artifacts/release_todata_test/result_report.html`\n- `artifacts/release_todata_test/task_output/normalized.json`\n- `artifacts/release_todata_test/task_output/traceability.json`\n- one or more of:\n  - `entities.json`\n  - `kv_pairs.json`\n  - `table_index.json`\n  - `structured_record.json`\n\nInspect:\n\n- document classification exists in normalized output\n- invoice-like inputs produce invoice-oriented fields\n- report shows layout, text, structured output, and table view when tables exist\n- review persisted artifacts before sharing them outside the machine\n\n## 5. To-code mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode to-code \\\n  --file ./test_inputs/openvino_notebook_architecture.png \\\n  --out ./artifacts/release_tocode_test \\\n  --target jupyter-notebook \\\n  --title \"OpenVINO Notebook\"\n```\n\nExpected files:\n\n- `artifacts/release_tocode_test/result_report.html`\n- `artifacts/release_tocode_test/code_preview.html`\n- `artifacts/release_tocode_test/task_output/notebook.ipynb`\n- `artifacts/release_tocode_test/task_output/notebook_plan.json`\n- `artifacts/release_tocode_test/task_output/traceability.json`\n\nInspect:\n\n- notebook file opens in Jupyter\n- `result_report.html` shows source, parse, generated app/code, and JSON views\n- `code_preview.html` renders notebook cells in a browser-friendly way\n- review generated code and notebook cells before running them\n\n## 6. Config-file flow\n\n```bash\npython scripts/run_skill.py --config-file ./configs/parse_test.json\npython scripts/run_skill.py --config-file ./configs/to_data_test.json\npython scripts/run_skill.py --config-file ./configs/to_code_notebook_test.json\n```\n\nExpected result:\n\n- each manifest resolves correctly\n- artifact folder matches config file output path\n\n## 7. Local UI flow\n\nStart the UI:\n\n```bash\npython scripts/serve_skill_ui.py\n```\n\nOpen:\n\n```text\nhttp://127.0.0.1:8765\n```\n\nCheck:\n\n- file preview works for images and PDFs\n- mode picker shows `parse`, `to-data`, and `to-code`\n- `to-code` exposes target selection\n- successful runs load `result_report.html` in the embedded viewer\n- `Open Code Preview` is enabled only for `to-code` runs that generated `code_preview.html`\n- files outside the approved local content folders are rejected by the UI\n\n## 8. Failure behavior\n\nMissing input:\n\n```bash\npython scripts/run_skill.py --mode parse --file ./test_inputs/does_not_exist.pdf\n```\n\nExpected result:\n\n- non-zero exit code\n- stderr contains JSON with `\"ok\": false`\n- fallback error artifact contains `error.json`\n\n## 9. Publish readiness\n\nTreat the skill as ready for ClawHub-style publishing when all of these are true:\n\n- `quick_validate.py` passes\n- core sample runs pass for `parse`, `to-data`, and `to-code`\n- `result_report.html` renders for all modes\n- `code_preview.html` renders for `to-code`\n- `agents/openai.yaml` exists and matches the skill purpose\n- `SKILL.md` examples match the actual supported targets and scripts\n\nFile v0.2.1:configs/parse_test.json\n\n{\n  \"mode\": \"parse\",\n  \"file\": \"./test_inputs/ov_invoice.png\",\n  \"out\": \"./artifacts/parse_manifest_test\",\n  \"debug\": false\n}\n\nFile v0.2.1:configs/to_code_notebook_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_notebook_manifest_test\",\n  \"target\": \"jupyter-notebook\",\n  \"title\": \"OpenVINO Notebook\",\n  \"debug\": false\n}\n\nFile v0.2.1:configs/to_code_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_html_manifest_test\",\n  \"target\": \"html-css\",\n  \"title\": \"OpenVINO Notebook Diagram\",\n  \"debug\": false\n}\n\nFile v0.2.1:configs/to_data_test.json\n\n{\n  \"mode\": \"to-data\",\n  \"file\": \"./test_inputs/invoice.pdf\",\n  \"out\": \"./artifacts/invoice_data_test\",\n  \"extract\": \"tables,entities,kv_pairs\",\n  \"fields\": \"invoice_number,invoice_date,total_amount,vendor_name,amount_due\",\n  \"debug\": false\n}\n\nArchive v0.2.0: 27 files, 80235 bytes\n\nFiles: agents/openai.yaml (591b), assets/modelscope-skill-icon.svg (1455b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (243b), FILE_SUMMARY.md (3165b), references/mode_guide.md (2802b), references/output_contracts.md (2218b), references/schema.md (4201b), requirements.txt (411b), scripts/_local_vendor.py (1199b), scripts/check_env.py (8194b), scripts/data_enrichment.py (50639b), scripts/install_local_runtime.py (1539b), scripts/mineru_openvino_backend.py (8449b), scripts/parse_document.py (29629b), scripts/render_result_report.py (57626b), scripts/run_skill.py (14709b), scripts/smoke_test.py (4308b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (8115b), scripts/utils.py (9861b), skill-card.md (2760b), SKILL.md (13025b), TEST_CHECKLIST.md (5040b), _meta.json (145b)\n\nFile v0.2.0:SKILL.md\n\nname: local-document-ai-openvino\ndescription: Private document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams locally with MinerU 2.5 on OpenVINO GenAI, then turn them into structured data or executable notebook/code scaffolds. Supports custom key-field extraction for invoice demos, with clear quick-start commands and example prompts.\n---\n\n# Private Document AI with OpenVINO\n\nTurn local PDFs, invoices, screenshots, and diagrams into one of two useful outcomes:\n\n1. `to-data`: classify the document and extract structured fields, tables, and JSON, including user-requested key fields.\n2. `to-code`: turn screenshots, forms, and architecture diagrams into code or Jupyter notebook scaffolds.\n\nEverything runs locally and is built for Intel CPU/GPU acceleration with OpenVINO GenAI.\n\nThe default runtime path in this release is:\n\n- MinerU 2.5 Pro\n- preconverted OpenVINO INT4 model bundle\n- local PDF rendering with `pypdfium2`\n- no local model export step\n\n## Why install this skill\n\nInstall this when you want one local workflow for:\n\n- invoice and receipt extraction\n- private PDF understanding\n- table and key-value extraction\n- architecture diagram to notebook generation\n- screenshot to HTML/React scaffold generation\n\nThis skill is especially good for demos because it already includes:\n\n- medical invoice `to-data` flows\n- restaurant invoice `to-data` flows\n- custom invoice field extraction such as invoice number, date, seller, and amount due\n- architecture diagram `to-code -> jupyter-notebook` flows\n- local HTML reports for easy review and screenshots\n\n## 30-second start\n\nCheck the environment:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nOr run directly from the CLI:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\"\n```\n\nFor invoice demos with custom key fields:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\n## Example prompts\n\nUse prompts like these in OpenClaw:\n\n```text\nUse $local-document-ai-openvino to parse this local PDF and give me a structured report.\n```\n\n```text\nUse $local-document-ai-openvino to extract invoice fields, tables, and key-value pairs from this medical invoice.\n```\n\n```text\nUse $local-document-ai-openvino to classify this receipt and return normalized JSON.\n```\n\n```text\nUse $local-document-ai-openvino to extract only these invoice fields from this file: invoice_number, invoice_date, total_amount, vendor_name. Return a structured JSON result with just those requested fields.\n```\n\n```text\nUse $local-document-ai-openvino to extract these custom fields from this invoice: buyer_tax_id, seller_tax_id, amount_due, check_code. Save the full parse artifacts, but highlight the requested fields in the final structured output.\n```\n\n```text\nUse $local-document-ai-openvino to turn this architecture diagram into a Jupyter notebook scaffold.\n```\n\n```text\nUse $local-document-ai-openvino to convert this UI screenshot into an HTML scaffold.\n```\n\n## What you get\n\nTypical outputs include:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/structured_record.json`\n- `task_output/normalized.json`\n- `task_output/requested_fields.json`\n- `task_output/requested_fields_record.json`\n- `task_output/notebook.ipynb`\n- `code_preview.html`\n\n## Best demo paths\n\nIf you are evaluating the skill for the first time, start here:\n\n1. `to-data` on an invoice PDF\n2. review `result_report.html`\n3. inspect `structured_record.json`\n4. rerun with `--fields` and inspect `requested_fields_record.json`\n5. then try `to-code` with a diagram image and target `jupyter-notebook`\n\n## Custom key-field extraction\n\nAfter the skill is installed, users can ask for a custom field list at call time.\nThis is the recommended pattern for invoice demos.\n\nUse the `fields` parameter with `to-data`:\n\n- CLI: `--fields \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- config JSON: `\"fields\": \"invoice_number,invoice_date,total_amount,vendor_name\"`\n- slash-command style: `fields=invoice_number,invoice_date,total_amount,vendor_name`\n\nThe skill will:\n\n1. parse the full document locally with MinerU on OpenVINO\n2. keep the standard `kv_pairs`, `entities`, `tables`, and traceability artifacts\n3. resolve the requested field names to canonical keys when possible\n4. write a focused structured output for only those requested fields\n\nThe two demo-friendly outputs are:\n\n- `task_output/requested_fields.json`\n  This includes each requested field, the matched canonical key, whether it was found, the primary match, and all matches.\n- `task_output/requested_fields_record.json`\n  This is the compact final record keyed by the user-requested field names.\n\nRecommended invoice demo field names:\n\n- `invoice_number`\n- `invoice_code`\n- `check_code`\n- `invoice_date`\n- `buyer_tax_id`\n- `seller_tax_id`\n- `vendor_name`\n- `customer_name`\n- `subtotal`\n- `tax_amount`\n- `total_amount`\n- `amount_due`\n\nCommon aliases are also supported when they can be normalized to canonical keys, for example:\n\n- `seller`\n- `buyer`\n- `invoice no`\n- `invoice date`\n- `total`\n- `amount due`\n\n## Core pipeline\n\nUse this skill as a local document-to-action pipeline:\n\n1. Parse the document into a canonical structured representation.\n2. Optionally continue into `to-data` or `to-code`.\n3. Save outputs into a predictable artifact folder with traceability.\n\n## Read only if needed\n\nLoad these references when you need the schema or output contracts:\n\n- `{baseDir}/references/schema.md`\n- `{baseDir}/references/mode_guide.md`\n- `{baseDir}/references/output_contracts.md`\n\n## Primary entrypoint\n\nUse this published entrypoint:\n\n- CLI orchestrator: `{baseDir}/scripts/run_skill.py`\n\nDo not call these implementation scripts directly from the skill:\n\n- `parse_document.py`\n- `transform_doc_to_data.py`\n- `transform_doc_to_code.py`\n\n## Local readiness\n\nCheck the environment before processing real documents:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nFor workshops, the simplest setup is installing into a skill-local `.vendor` directory.\nThe entry scripts auto-detect it, so you do not need to edit `PYTHONPATH`:\n\n```bash\npython \"{baseDir}/scripts/install_local_runtime.py\"\n```\n\nIf you prefer, a normal virtual environment also works:\n\n```bash\npython -m pip install -r \"{baseDir}/requirements.txt\"\n```\n\nDownload the preconverted MinerU OpenVINO model bundle into the skill-local `models/` folder, or point the skill at it with an environment variable:\n\n```bash\nset MINERU_OPENVINO_MODEL_DIR=C:\\absolute\\path\\to\\MinerU2.5-Pro-2604-1.2B-int4-ov\n```\n\nRecommended model bundle:\n\n- `https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov`\n\nWorkshop-friendly download example:\n\n```bash\ngit clone --depth 1 https://www.modelscope.cn/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov.git \"{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov\"\n```\n\nRun a quick orchestration smoke test:\n\n```bash\npython \"{baseDir}/scripts/smoke_test.py\"\n```\n\nModel assets are discovered from:\n\n- `MINERU_OPENVINO_MODEL_DIR`\n- `MINERU_MODEL_DIR`\n- `{baseDir}/models/MinerU2.5-Pro-2604-1.2B-int4-ov/`\n- `{baseDir}/models/mineru2.5-int4-ov/`\n\nPrefer using a predownloaded model bundle for workshops. This skill does not require local export or automatic model download.\n\n## Supported modes\n\n### `parse`\n\nUse when the user wants the structured parse only.\n\nOutputs:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- extracted layout, tables, or figures when available\n\n### `to-data`\n\nUse when the user wants structured extraction, normalization, or document classification.\n\nTypical outputs under `task_output/`:\n\n- `entities.json`\n- `kv_pairs.json`\n- `table_index.json`\n- `normalized.json`\n- `structured_record.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `traceability.json`\n\n### `to-code`\n\nUse when the user wants implementation-oriented output from the parse result.\n\nSupported targets:\n\n- `react`\n- `html-css`\n- `json-schema`\n- `jupyter-notebook`\n\nTypical outputs under `task_output/`:\n\n- `component_map.json`\n- `field_schema.json`\n- `ui_blueprint.json`\n- `notes.md`\n- `traceability.json`\n- target-specific artifacts such as `app.jsx`, `index.html`, `styles.css`, `schema.json`, `notebook.ipynb`, or `notebook_plan.json`\n\nTreat all generated code and notebooks as drafts. Review them before running, publishing, or connecting them to real systems.\n\n## Published package scope\n\nThe published ClawHub bundle is intentionally CLI-first.\n\n- main workflow: `scripts/run_skill.py`\n- diagnostics: `scripts/check_env.py`\n- smoke verification: `scripts/smoke_test.py`\n\nDeveloper-only local UI helpers are kept out of the public release bundle.\n\n## Pipeline rules\n\nAlways follow these rules:\n\n1. Prefer local execution.\n2. Always parse first into `parsed.json`.\n3. Generate downstream artifacts from `parsed.json`, not raw OCR text alone.\n4. Preserve page numbers, reading order, block types, and source anchors when possible.\n5. Write traceability for downstream outputs.\n6. Mark low-confidence regions or assumptions explicitly.\n7. Do not silently drop tables, figures, formulas, charts, or key-value regions.\n8. Save outputs into one artifact folder per run.\n9. For confidential documents, prefer an explicit private `--out` directory and remove artifacts after review.\n\n## Output contract\n\nDefault output folder:\n\n`./artifacts/<document_stem>/`\n\nExpected top-level outputs:\n\n- `effective_config.json`\n- `run_report.json`\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/`\n\n`to-code` runs may also emit:\n\n- `code_preview.html`\n\n## CLI examples\n\n### Parse\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode parse \\\n  --file \"/absolute/path/to/report.pdf\" \\\n  --out \"/absolute/path/to/artifacts/report_parse\"\n```\n\n### To-data\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\"\n```\n\n### To-data with custom fields\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-data \\\n  --file \"/absolute/path/to/invoice.pdf\" \\\n  --out \"/absolute/path/to/artifacts/invoice_data\" \\\n  --extract \"tables,entities,kv_pairs\" \\\n  --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\n### To-code\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/ui_mockup.png\" \\\n  --out \"/absolute/path/to/artifacts/ui_code\" \\\n  --target \"react\" \\\n  --title \"Generated App\"\n```\n\n### To-code notebook target\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" \\\n  --mode to-code \\\n  --file \"/absolute/path/to/architecture_diagram.png\" \\\n  --out \"/absolute/path/to/artifacts/notebook_code\" \\\n  --target \"jupyter-notebook\" \\\n  --title \"OpenVINO Notebook\"\n```\n\n## Slash-command examples\n\n```text\n/skill local-document-ai-openvino parse file=./docs/report.pdf\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs\n```\n\n```text\n/skill local-document-ai-openvino to-data file=./docs/invoice.pdf extract=tables,entities,kv_pairs fields=invoice_number,invoice_date,total_amount,vendor_name\n```\n\n```text\n/skill local-document-ai-openvino to-code file=./mockups/architecture.png target=jupyter-notebook\n```\n\n## Optional local demo UI\n\nStart the local UI when the user wants an interactive demo page:\n\n```bash\npython \"{baseDir}/scripts/serve_skill_ui.py\"\n```\n\nThe UI lets the user:\n\n- preview a local file\n- choose `parse`, `to-data`, or `to-code`\n- choose the `to-code` target\n- run the pipeline and inspect the generated local HTML reports\n\nThe bundled UI only allows preview/run access for local files under the skill directory and common user content folders such as Downloads, Documents, Desktop, and Pictures.\n\n## Failure behavior\n\nIf a run fails:\n\n- state which stage failed\n- do not claim outputs were created if they were not\n- prefer writing `error.json` with failure details\n- recommend `parse` first when the downstream request is ambiguous\n- surface stderr or a concise failure summary when available\n\n## Safety notes\n\n- Use a virtual environment for dependency installation.\n- Review and approve model downloads only when you explicitly intend to.\n- Keep outputs in a private local folder when documents are sensitive.\n- Review generated code and notebooks before execution.\n- Delete artifacts when they are no longer needed.\n- The wrapper always uses the bundled local scripts and the current Python interpreter. It does not allow custom interpreter or script-directory overrides.\n\n## Short reminder\n\nPresent this skill as a local document-understanding workflow with downstream actions and customizable field extraction, not as a plain OCR wrapper.\n\nFile v0.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn70rgyfb422qnxmr4ryhz1k698601ww\",\n  \"slug\": \"local-document-ai-openvino\",\n  \"version\": \"0.2.0\",\n  \"publishedAt\": 1782365990097\n}\n\nFile v0.2.0:references/mode_guide.md\n\n# Mode Guide\n\nThis file defines how each implemented mode should behave.\n\n## Shared Rules\n\nAlways:\n\n1. Parse first.\n2. Write `parsed.json`.\n3. Read from `parsed.json` for downstream work.\n4. Save final outputs under `task_output/`.\n5. Save a source map or traceability file for downstream modes.\n\nDo not:\n\n- generate directly from raw OCR text when `parsed.json` is available\n- invent facts not supported by the document\n- hide uncertainty or warnings that MinerU OpenVINO inference was not used\n\n## Mode: `parse`\n\n### Goal\n\nCreate the canonical structured representation only.\n\n### Inputs\n\n- `file`\n- optional `out`\n\n### Outputs\n\n- `parsed.json`\n- `parsed.md`\n- `tables/`\n- `figures/`\n\n### Return Summary\n\nInclude:\n\n- file processed\n- page count\n- counts of headings, paragraphs, tables, formulas, figures, charts if available\n- output folder path\n- warnings if any\n\n## Mode: `to-code`\n\n### Goal\n\nTurn a document into code-oriented artifacts.\n\n### Best-Fit Inputs\n\n- UI mockups\n- screenshots\n- forms\n- product specs\n- brochures\n- workflow documents\n\n### Allowed Outputs\n\n- `component_map.json`\n- `field_schema.json`\n- `app.jsx`\n- `index.html`\n- `styles.css`\n- `notes.md`\n- `traceability.json`\n\n### Behavior\n\n- infer sections and components from parsed structure\n- preserve labels, fields, buttons, lists, and tables\n- use placeholders when business rules are not explicit\n- record assumptions in `notes.md` and `traceability.json`\n\n### Good Examples\n\n- brochure image to landing page scaffold\n- form screenshot to React form skeleton\n- admin spec PDF to HTML + JSON field schema\n\n## Mode: `to-data`\n\n### Goal\n\nExtract machine-readable data for automation.\n\n### Best-Fit Inputs\n\n- invoices\n- reports\n- forms\n- schedules\n- tables\n- structured business documents\n\n### Allowed Outputs\n\n- `entities.json`\n- `kv_pairs.json`\n- `normalized.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `tables.csv`\n- `table_index.json`\n- `traceability.json`\n\n### Behavior\n\n- keep original text and normalized values when useful\n- preserve source block references for each record\n- separate extraction from interpretation\n- when the user provides a custom field list, generate a focused structured output for only those requested fields\n\n### Good Examples\n\n- invoice PDF to normalized invoice JSON\n- invoice PDF to a custom JSON record containing only `invoice_number`, `invoice_date`, `total_amount`, and `vendor_name`\n- annual report to CSV tables + entity summary\n- application form to field-value JSON\n\n## Mode Selection Hints\n\nPrefer:\n\n- `parse` when the user mainly wants structured OCR output\n- `to-code` when the user wants implementation artifacts\n- `to-data` when the user wants extraction/normalization\n\nIf unsure:\n\n- default to `parse`\n- then explain which downstream modes are available next\n\nFile v0.2.0:references/output_contracts.md\n\n# Output Contracts\n\nThis file defines the folder layout and file contracts.\n\n## Default folder layout\n\n```text\nartifacts/<document_stem>/\n├── parsed.json\n├── parsed.md\n├── traceability.json\n├── tables/\n├── figures/\n└── task_output/\n```\n\nIf the user passes `out=...`, use that directory instead.\n\n## Parse outputs\n\n### `parsed.json`\nRequired for every successful run.\n\n### `parsed.md`\nRequired for every successful run.\nPurpose:\n- human-readable rendering of the parse result\n\n### `tables/`\nOptional.\nWrite extracted CSVs or table assets here.\n\n### `figures/`\nOptional.\nWrite extracted figures here.\n\n---\n\n## Downstream outputs\n\n### `task_output/`\nRequired for non-parse modes.\n\nExamples:\n- `task_output/app.jsx`\n- `task_output/index.html`\n- `task_output/entities.json`\n- `task_output/slide_outline.md`\n\n### `traceability.json`\nRequired for non-parse modes.\n\nPurpose:\n- map generated artifacts back to source page/block IDs\n- record assumptions or low-confidence derivations\n\nExample:\n```json\n{\n  \"artifact\": \"task_output/app.jsx\",\n  \"mappings\": [\n    {\n      \"generated_unit_id\": \"component.signup_email_field\",\n      \"generated_text\": \"Email input field with label and helper text\",\n      \"source_refs\": [\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b12\"},\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b13\"}\n      ],\n      \"assumption\": \"Validation rule was not explicit in source.\"\n    }\n  ]\n}\n```\n\n## Failure contract\n\nIf a run fails:\n- do not create empty success artifacts\n- optionally write `error.json` with:\n  - stage\n  - message\n  - input file\n  - mode\n  - timestamp\n\nExample:\n```json\n{\n  \"stage\": \"parse\",\n  \"message\": \"Unsupported file type\",\n  \"input_file\": \"./docs/foo.xyz\",\n  \"mode\": \"parse\",\n  \"timestamp\": \"2026-04-08T16:00:00Z\"\n}\n```\n\n## Naming conventions\n\n- use lowercase snake_case for filenames\n- use stable IDs for pages, blocks, tables, and figures\n- use relative paths inside JSON when files live inside the same artifact folder\n\n## Quality notes\n\n- prefer explicit omission over silent loss\n- if tables or formulas are detected but not reconstructed, note that in `parse_info.warnings`\n- if output is partially inferred, record it in `traceability.json`\n\nFile v0.2.0:references/schema.md\n\n# Canonical Document Schema\n\nThis file defines the stable intermediate representation used by this skill.\n\n## Purpose\n\nAll downstream modes must consume the canonical schema instead of raw document text.\n\nBenefits:\n- stable contract between parse and transform stages\n- better grounding\n- traceability from outputs back to source blocks\n- easier testing and future model replacement\n\n## Top-level structure\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"document_id\": \"string\",\n  \"source\": {},\n  \"parse_info\": {},\n  \"pages\": [],\n  \"tables\": [],\n  \"figures\": [],\n  \"entities\": [],\n  \"outputs\": {}\n}\n```\n\n## Field definitions\n\n### `schema_version`\nVersion of this schema.\nType: `string`\n\n### `document_id`\nStable ID for the current document run.\nRecommended format:\n`<file_stem>-<short_hash>`\n\n### `source`\nInformation about the original input.\n\n```json\n{\n  \"input_path\": \"string\",\n  \"input_type\": \"pdf|image\",\n  \"filename\": \"string\",\n  \"sha256\": \"string|null\"\n}\n```\n\n### `parse_info`\nInformation about the parser run.\n\n```json\n{\n  \"engine\": \"local-document-ai-openvino\",\n  \"engine_version\": \"string\",\n  \"mode\": \"parse|to-code|to-data\",\n  \"created_at\": \"ISO-8601 string\",\n  \"warnings\": [\"string\"],\n  \"confidence_note\": \"string|null\"\n}\n```\n\n### `pages`\nOrdered list of parsed pages.\n\n```json\n[\n  {\n    \"page_id\": \"page_1\",\n    \"page_index\": 1,\n    \"width\": 2480,\n    \"height\": 3508,\n    \"blocks\": []\n  }\n]\n```\n\n### `blocks`\nOrdered list of page blocks.\n\n```json\n{\n  \"block_id\": \"p1_b1\",\n  \"type\": \"heading|paragraph|list|table|formula|chart|figure|seal|kv_pair|footer|header|caption|unknown\",\n  \"bbox\": [0, 0, 100, 50],\n  \"reading_order\": 1,\n  \"text\": \"string\",\n  \"markdown\": \"string|null\",\n  \"latex\": \"string|null\",\n  \"html\": \"string|null\",\n  \"confidence\": 0.0,\n  \"attributes\": {\n    \"heading_level\": 1,\n    \"language\": \"en\",\n    \"is_rotated\": false\n  },\n  \"relations\": {\n    \"parent_block_id\": null,\n    \"caption_for\": null,\n    \"table_id\": null,\n    \"figure_id\": null\n  }\n}\n```\n\n#### Block rules\n- `page_id + block_id` must be unique\n- `reading_order` must be monotonic within a page\n- `type` should be as specific as possible\n- `text` is plain normalized text\n- `markdown` is optional rendered text\n- `latex` is only for formulas\n- `html` is optional for table/structured fragments\n\n### `tables`\nNormalized structured tables.\n\n```json\n[\n  {\n    \"table_id\": \"t1\",\n    \"page_id\": \"page_2\",\n    \"bbox\": [10, 10, 200, 150],\n    \"caption\": \"Quarterly Revenue\",\n    \"headers\": [\"Quarter\", \"Revenue\"],\n    \"rows\": [\n      [\"Q1\", \"$1M\"],\n      [\"Q2\", \"$1.2M\"]\n    ],\n    \"csv_path\": \"tables/t1.csv\",\n    \"source_block_ids\": [\"p2_b8\"]\n  }\n]\n```\n\n### `figures`\nSaved figure assets.\n\n```json\n[\n  {\n    \"figure_id\": \"f1\",\n    \"page_id\": \"page_3\",\n    \"bbox\": [20, 20, 300, 200],\n    \"caption\": \"Architecture Diagram\",\n    \"asset_path\": \"figures/f1.png\",\n    \"source_block_ids\": [\"p3_b4\"]\n  }\n]\n```\n\n### `entities`\nOptional normalized entities.\n\n```json\n[\n  {\n    \"entity_id\": \"e1\",\n    \"type\": \"invoice_number|date|person|organization|amount|email|phone|custom\",\n    \"value\": \"INV-1001\",\n    \"normalized_value\": \"INV-1001\",\n    \"page_id\": \"page_1\",\n    \"source_block_ids\": [\"p1_b6\"],\n    \"confidence\": 0.96\n  }\n]\n```\n\n### `outputs`\nArtifacts written during parse or downstream generation.\n\n```json\n{\n  \"parsed_markdown_path\": \"parsed.md\",\n  \"task_outputs\": [\n    {\n      \"type\": \"react_scaffold|html_scaffold|normalized_json\",\n      \"path\": \"task_output/output.ext\",\n      \"source_map_path\": \"task_output/source_map.json\"\n    }\n  ]\n}\n```\n\n## Minimum parse requirements\n\nEvery successful parse must produce:\n- `schema_version`\n- `document_id`\n- `source`\n- `parse_info`\n- at least one `page`\n- `outputs.parsed_markdown_path`\n\n## Minimum grounding requirements\n\nEvery downstream output must preserve:\n- `page_id`\n- `block_id` references for supporting source regions\n- assumptions where source evidence is incomplete\n\n## Recommended normalization rules\n\n- normalize whitespace\n- preserve line breaks in Markdown where they affect meaning\n- do not merge unrelated columns into one paragraph\n- do not flatten tables into plain text if a structured table can be recovered\n- mark low-confidence or omitted content explicitly\n\nFile v0.2.0:FILE_SUMMARY.md\n\n# File Summary\n\nThis skill package is organized around one orchestrator and three user-facing modes:\n\n- `parse`\n- `to-data`\n- `to-code`\n\n## Top level\n\n- `SKILL.md`\n  - Main skill definition and invocation guidance.\n\n- `requirements.txt`\n  - Base Python dependencies for the local parser and wrapper scripts.\n  - Does not auto-install the third-party PaddleOCR-VL OpenVINO wheel.\n\n- `FILE_SUMMARY.md`\n  - This file.\n\n- `TEST_CHECKLIST.md`\n  - Validation checklist for publish readiness.\n\n## Agents metadata\n\n- `agents/openai.yaml`\n  - UI metadata for skill chips, skill lists, and default invocation prompt.\n\n## References\n\n- `references/schema.md`\n  - Canonical structured parse schema used between parse and downstream transforms.\n\n- `references/mode_guide.md`\n  - Mode behaviors and output expectations.\n\n- `references/output_contracts.md`\n  - Artifact folder layout and output file contracts.\n\n## Example configs\n\n- `configs/parse_test.json`\n  - Example manifest for `parse`.\n\n- `configs/to_data_test.json`\n  - Example manifest for `to-data`.\n\n- `configs/to_code_test.json`\n  - Example manifest for `to-code` with `html-css`.\n\n- `configs/to_code_notebook_test.json`\n  - Example manifest for `to-code` with `jupyter-notebook`.\n\n## Core scripts\n\n- `scripts/run_skill.py`\n  - Main orchestrator.\n  - Parses first, then dispatches into `to-data` or `to-code`.\n  - Writes `effective_config.json` and `run_report.json`.\n  - Uses the current Python interpreter and bundled scripts only; interpreter/script path overrides are not supported.\n\n- `scripts/parse_document.py`\n  - Parse-stage CLI entry.\n  - Handles PDF or image inputs and normalizes outputs into the canonical schema.\n\n- `scripts/transform_doc_to_data.py`\n  - Downstream structured extraction entrypoint for `to-data`.\n\n- `scripts/data_enrichment.py`\n  - Heuristics and normalization for invoice classification, field extraction, table grouping, and structured summaries.\n\n- `scripts/transform_doc_to_code.py`\n  - Downstream generation entrypoint for `to-code`.\n  - Supports `react`, `html-css`, `json-schema`, and `jupyter-notebook`.\n\n- `scripts/render_result_report.py`\n  - Generates `result_report.html`.\n  - Renders layout, text, tables, JSON, and code/notebook previews depending on mode.\n\n- `scripts/serve_skill_ui.py`\n  - Optional local demo UI.\n  - Lets a user choose a file, select `parse` / `to-data` / `to-code`, and inspect generated reports.\n  - Restricts preview/run access to approved local content folders instead of arbitrary filesystem paths.\n\n## Validation and support scripts\n\n- `scripts/check_env.py`\n  - Checks Python dependencies, OpenVINO runtime, and model asset discovery.\n\n- `scripts/smoke_test.py`\n  - Runs wrapper-level smoke validation.\n\n- `scripts/utils.py`\n  - Shared helpers for JSON I/O, artifact layout, parsing subprocess output, slug generation, and error handling.\n\n## Notes\n\n- Verified sample artifacts live under `artifacts/`.\n- `test_inputs/openvino_notebook_architecture.png` is the current recommended `to-code` sample.\n- `test_inputs/ov_invoice.png`, `test_inputs/invoice.pdf`, and related invoice fixtures are the current recommended `parse` / `to-data` samples.\n\nFile v0.2.0:skill-card.md\n\n## Description: <br>\nPrivate document AI for Intel hardware that parses local PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, then produces structured data or notebook and code scaffolds. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[zhuo-yoyowz](https://clawhub.ai/user/zhuo-yoyowz) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers, analysts, and demo builders use this skill to process private local documents into parse artifacts, normalized JSON records, extracted tables, requested invoice fields, and draft implementation assets. It is suited for local document-understanding workflows where outputs need traceability back to pages and source blocks. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill reads selected local PDFs and images and stores extracted content in local artifact folders. <br>\nMitigation: Use explicit invocation for sensitive documents, choose a private output directory, and delete artifacts after review. <br>\nRisk: Generated notebooks may contain cells that download models or execute third-party model code. <br>\nMitigation: Review notebook cells before running them, especially cells that download models or use trust_remote_code=True. <br>\nRisk: The release security verdict requires review before installation. <br>\nMitigation: Review the skill, its generated artifacts, and the local runtime setup before deployment. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill listing](https://clawhub.ai/zhuo-yoyowz/skills/local-document-ai-openvino) <br>\n- [Canonical Document Schema](artifact/references/schema.md) <br>\n- [Mode Guide](artifact/references/mode_guide.md) <br>\n- [Output Contracts](artifact/references/output_contracts.md) <br>\n- [MinerU 2.5 Pro OpenVINO INT4 model bundle](https://www.modelscope.cn/models/snake7gun/MinerU2.5-Pro-2604-1.2B-int4-ov) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance] <br>\n**Output Format:** [Local artifact files including JSON, Markdown, HTML, CSV, Jupyter notebooks, React or HTML/CSS scaffolds, and concise run summaries.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Outputs are written to a per-run local artifact directory with traceability files for downstream modes.] <br>\n\n## Skill Version(s): <br>\n0.2.0 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nFile v0.2.0:TEST_CHECKLIST.md\n\n# Test Checklist\n\nUse this checklist before treating the skill as publish-ready.\n\n## Goal\n\nConfirm that:\n\n1. `run_skill.py` is the only required orchestration entrypoint.\n2. `parse`, `to-data`, and `to-code` all work end to end.\n3. Result reports are generated consistently.\n4. Optional local UI works for interactive demos.\n5. The skill metadata and folder structure are valid.\n\n## Recommended sample files\n\n- `test_inputs/ov_invoice.png`\n  - Fast image sample for `parse`\n- `test_inputs/invoice.pdf`\n  - PDF sample for `to-data`\n- `test_inputs/openvino_notebook_architecture.png`\n  - Diagram sample for `to-code`\n\nAvoid `test_inputs/signup_form.png` for release validation. It is only a placeholder fixture.\n\n## 1. Validate skill metadata\n\n```bash\npython \"C:/Users/intel/.codex/skills/.system/skill-creator/scripts/quick_validate.py\" .\n```\n\nExpected result:\n\n- validation exits with code `0`\n- `SKILL.md` frontmatter is accepted\n- `agents/openai.yaml` is accepted\n\n## 2. Environment check\n\nCreate and activate a virtual environment first when preparing a clean machine.\n\n```bash\npython scripts/check_env.py\n```\n\nExpected result:\n\n- Python dependencies detected\n- OpenVINO runtime detected\n- PaddleOCR-VL OpenVINO package detected\n- model directories discovered or clearly reported as missing\n\n## 3. Parse mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode parse \\\n  --file ./test_inputs/ov_invoice.png \\\n  --out ./artifacts/release_parse_test\n```\n\nExpected files:\n\n- `artifacts/release_parse_test/effective_config.json`\n- `artifacts/release_parse_test/run_report.json`\n- `artifacts/release_parse_test/parsed.json`\n- `artifacts/release_parse_test/parsed.md`\n- `artifacts/release_parse_test/result_report.html`\n\nInspect:\n\n- `parsed.json` contains pages and blocks\n- `parsed.md` is readable\n- `result_report.html` opens locally\n- if the document is sensitive, verify the output location is a private local folder\n\n## 4. To-data mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode to-data \\\n  --file ./test_inputs/invoice.pdf \\\n  --out ./artifacts/release_todata_test \\\n  --extract tables,entities,kv_pairs\n```\n\nExpected files:\n\n- `artifacts/release_todata_test/result_report.html`\n- `artifacts/release_todata_test/task_output/normalized.json`\n- `artifacts/release_todata_test/task_output/traceability.json`\n- one or more of:\n  - `entities.json`\n  - `kv_pairs.json`\n  - `table_index.json`\n  - `structured_record.json`\n\nInspect:\n\n- document classification exists in normalized output\n- invoice-like inputs produce invoice-oriented fields\n- report shows layout, text, structured output, and table view when tables exist\n- review persisted artifacts before sharing them outside the machine\n\n## 5. To-code mode\n\n```bash\npython scripts/run_skill.py \\\n  --mode to-code \\\n  --file ./test_inputs/openvino_notebook_architecture.png \\\n  --out ./artifacts/release_tocode_test \\\n  --target jupyter-notebook \\\n  --title \"OpenVINO Notebook\"\n```\n\nExpected files:\n\n- `artifacts/release_tocode_test/result_report.html`\n- `artifacts/release_tocode_test/code_preview.html`\n- `artifacts/release_tocode_test/task_output/notebook.ipynb`\n- `artifacts/release_tocode_test/task_output/notebook_plan.json`\n- `artifacts/release_tocode_test/task_output/traceability.json`\n\nInspect:\n\n- notebook file opens in Jupyter\n- `result_report.html` shows source, parse, generated app/code, and JSON views\n- `code_preview.html` renders notebook cells in a browser-friendly way\n- review generated code and notebook cells before running them\n\n## 6. Config-file flow\n\n```bash\npython scripts/run_skill.py --config-file ./configs/parse_test.json\npython scripts/run_skill.py --config-file ./configs/to_data_test.json\npython scripts/run_skill.py --config-file ./configs/to_code_notebook_test.json\n```\n\nExpected result:\n\n- each manifest resolves correctly\n- artifact folder matches config file output path\n\n## 7. Local UI flow\n\nStart the UI:\n\n```bash\npython scripts/serve_skill_ui.py\n```\n\nOpen:\n\n```text\nhttp://127.0.0.1:8765\n```\n\nCheck:\n\n- file preview works for images and PDFs\n- mode picker shows `parse`, `to-data`, and `to-code`\n- `to-code` exposes target selection\n- successful runs load `result_report.html` in the embedded viewer\n- `Open Code Preview` is enabled only for `to-code` runs that generated `code_preview.html`\n- files outside the approved local content folders are rejected by the UI\n\n## 8. Failure behavior\n\nMissing input:\n\n```bash\npython scripts/run_skill.py --mode parse --file ./test_inputs/does_not_exist.pdf\n```\n\nExpected result:\n\n- non-zero exit code\n- stderr contains JSON with `\"ok\": false`\n- fallback error artifact contains `error.json`\n\n## 9. Publish readiness\n\nTreat the skill as ready for ClawHub-style publishing when all of these are true:\n\n- `quick_validate.py` passes\n- core sample runs pass for `parse`, `to-data`, and `to-code`\n- `result_report.html` renders for all modes\n- `code_preview.html` renders for `to-code`\n- `agents/openai.yaml` exists and matches the skill purpose\n- `SKILL.md` examples match the actual supported targets and scripts\n\nFile v0.2.0:configs/parse_test.json\n\n{\n  \"mode\": \"parse\",\n  \"file\": \"./test_inputs/ov_invoice.png\",\n  \"out\": \"./artifacts/parse_manifest_test\",\n  \"debug\": false\n}\n\nFile v0.2.0:configs/to_code_notebook_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_notebook_manifest_test\",\n  \"target\": \"jupyter-notebook\",\n  \"title\": \"OpenVINO Notebook\",\n  \"debug\": false\n}\n\nFile v0.2.0:configs/to_code_test.json\n\n{\n  \"mode\": \"to-code\",\n  \"file\": \"./test_inputs/openvino_notebook_architecture.png\",\n  \"out\": \"./artifacts/tocode_html_manifest_test\",\n  \"target\": \"html-css\",\n  \"title\": \"OpenVINO Notebook Diagram\",\n  \"debug\": false\n}\n\nFile v0.2.0:configs/to_data_test.json\n\n{\n  \"mode\": \"to-data\",\n  \"file\": \"./test_inputs/invoice.pdf\",\n  \"out\": \"./artifacts/invoice_data_test\",\n  \"extract\": \"tables,entities,kv_pairs\",\n  \"fields\": \"invoice_number,invoice_date,total_amount,vendor_name,amount_due\",\n  \"debug\": false\n}\n\nArchive v0.1.4: 24 files, 72394 bytes\n\nFiles: agents/openai.yaml (416b), assets/modelscope-skill-icon.svg (1455b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (164b), FILE_SUMMARY.md (3165b), references/mode_guide.md (2512b), references/output_contracts.md (2218b), references/schema.md (4191b), requirements.txt (557b), scripts/check_env.py (7813b), scripts/data_enrichment.py (50639b), scripts/parse_document.py (25543b), scripts/render_result_report.py (55280b), scripts/run_skill.py (14176b), scripts/smoke_test.py (4245b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (5920b), scripts/utils.py (9861b), skill-card.md (2844b), SKILL.md (9127b), TEST_CHECKLIST.md (5040b), _meta.json (145b)\n\nFile v0.1.4:SKILL.md\n\nname: local-document-ai-openvino\ndescription: Private document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams locally with OpenVINO, then turn them into structured data or executable notebook/code scaffolds with clear quick-start commands and example prompts.\n---\n\n# Private Document AI with OpenVINO\n\nTurn local PDFs, invoices, screenshots, and diagrams into one of two useful outcomes:\n\n1. `to-data`: classify the document and extract structured fields, tables, and JSON.\n2. `to-code`: turn screenshots, forms, and architecture diagrams into code or Jupyter notebook scaffolds.\n\nEverything runs locally and is built for Intel CPU/GPU acceleration with OpenVINO.\n\n## Why install this skill\n\nInstall this when you want one local workflow for:\n\n- invoice and receipt extraction\n- private PDF understanding\n- table and key-value extraction\n- architecture diagram to notebook generation\n- screenshot to HTML/React scaffold generation\n\nThis skill is especially good for demos because it already includes:\n\n- medical invoice `to-data` flows\n- restaurant invoice `to-data` flows\n- architecture diagram `to-code -> jupyter-notebook` flows\n- local HTML reports for easy review and screenshots\n\n## 30-second start\n\nCheck the environment:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nOr run directly from the CLI:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\"\n```\n\n## Example prompts\n\nUse prompts like these in OpenClaw:\n\n```text\nUse $local-document-ai-openvino to parse this local PDF and give me a structured report.\n```\n\n```text\nUse $local-document-ai-openvino to extract invoice fields, tables, and key-value pairs from this medical invoice.\n```\n\n```text\nUse $local-document-ai-openvino to classify this receipt and return normalized JSON.\n```\n\n```text\nUse $local-document-ai-openvino to turn this architecture diagram into a Jupyter notebook scaffold.\n```\n\n```text\nUse $local-document-ai-openvino to convert this UI screenshot into an HTML scaffold.\n```\n\n## What you get\n\nTypical outputs include:\n\n- `parsed.json`\n- `parsed.md`\n- `result_report.html`\n- `task_output/structured_record.json`\n- `task_output/normalized.json`\n- `task_output/notebook.ipynb`\n- `code_preview.html`\n\n## Best demo paths\n\nIf you are evaluating the skill for the first time, start here:\n\n1. `to-data` on an invoice PDF\n2. review `result_report.html`\n3. inspect `structured_record.json`\n4. then try `to-code` with a diagram image and target `jupyter-notebook`\n\n## Core pipeline\n\nUse this skill as a local document-to-action pipeline:\n\n1. Parse the document into a canonical structured representation.\n2. Optionally continue into `to-data` or `to-code`.\n3. Save outputs into a predictable artifact folder with traceability.\n\n## Read only if needed\n\nLoad these references when you need the schema or output contracts:\n\n- `{baseDir}/references/schema.md`\n- `{baseDir}/references/mode_guide.md`\n- `{baseDir}/references/output_contracts.md`\n\n## Primary entrypoint\n\nUse this published entrypoint:\n\n- CLI orchestrator: `{baseDir}/scripts/run_skill.py`\n\nDo not call these implementation scripts directly from the skill:\n\n- `parse_document.py`\n- `transform_doc_to_data.py\n\nArchive v0.1.3: 32 files, 92712 bytes\n\nFiles: agents/openai.yaml (416b), assets/modelscope-skill-icon.svg (1455b), CLAWHUB_HERO_COPY.md (2379b), CLAWHUB_HOMEPAGE_FINAL.md (3358b), CLAWHUB_LISTING_COPY.md (2931b), CLAWHUB_UPDATE_COPY.md (4303b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (164b), FILE_SUMMARY.md (3165b), MODELSCOPE_FORM_FILL_GUIDE_CN.md (3726b), MODELSCOPE_SCREENSHOT_GUIDE_CN.md (4841b), MODELSCOPE_SKILLS_RELEASE_CN.md (6771b), MODELSCOPE_SUBMISSION_PACK_CN.md (5849b), references/mode_guide.md (2512b), references/output_contracts.md (2218b), references/schema.md (4191b), requirements.txt (557b), scripts/check_env.py (8282b), scripts/data_enrichment.py (50639b), scripts/parse_document.py (26206b), scripts/render_result_report.py (55280b), scripts/run_skill.py (14249b), scripts/serve_skill_ui.py (22507b), scripts/smoke_test.py (4245b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (5920b), scripts/utils.py (9861b), SKILL.md (9066b), TEST_CHECKLIST.md (5040b), _meta.json (145b)\n\nArchive v0.1.2: 23 files, 76261 bytes\n\nFiles: agents/openai.yaml (320b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (164b), FILE_SUMMARY.md (3165b), references/mode_guide.md (2512b), references/output_contracts.md (2218b), references/schema.md (4191b), requirements.txt (557b), scripts/check_env.py (8282b), scripts/data_enrichment.py (50639b), scripts/parse_document.py (26206b), scripts/render_result_report.py (55280b), scripts/run_skill.py (14249b), scripts/serve_skill_ui.py (22507b), scripts/smoke_test.py (4245b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (5920b), scripts/utils.py (9861b), SKILL.md (6841b), TEST_CHECKLIST.md (5040b), _meta.json (145b)\n\nArchive v0.1.1: 23 files, 75523 bytes\n\nFiles: agents/openai.yaml (320b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (164b), FILE_SUMMARY.md (2940b), references/mode_guide.md (2512b), references/output_contracts.md (2218b), references/schema.md (4191b), requirements.txt (557b), scripts/check_env.py (8282b), scripts/data_enrichment.py (50639b), scripts/parse_document.py (26206b), scripts/render_result_report.py (55280b), scripts/run_skill.py (14855b), scripts/serve_skill_ui.py (20500b), scripts/smoke_test.py (4245b), scripts/transform_doc_to_code.py (61400b), scripts/transform_doc_to_data.py (5920b), scripts/utils.py (9861b), SKILL.md (6511b), TEST_CHECKLIST.md (4966b), _meta.json (145b)\n\nArchive v0.1.0: 26 files, 82987 bytes\n\nFiles: agents/openai.yaml (320b), configs/parse_test.json (126b), configs/to_code_notebook_test.json (222b), configs/to_code_test.json (218b), configs/to_data_test.json (164b), FILE_SUMMARY.md (3225b), references/mode_guide.md (2512b), references/output_contracts.md (2218b), references/schema.md (4191b), requirements.txt (621b), scripts/check_env.py (8031b), scripts/data_enrichment.py (50639b), scripts/parse_document.py (26206b), scripts/record_screen.py (2829b), scripts/render_result_report.py (55280b), scripts/render_todata_validation_demo_video.py (9190b), scripts/render_validation_demo_video.py (8839b), scripts/run_skill.py (14855b), scripts/serve_skill_ui.py (20500b), scripts/smoke_test.py (4245b), scripts/transform_doc_to_code.py (61175b), scripts/transform_doc_to_data.py (5920b), scripts/utils.py (9861b), SKILL.md (5691b), TEST_CHECKLIST.md (4668b), _meta.json (145b)","readmeExcerpt":"Skill: Private Document AI with OpenVINO Owner: zhuo-yoyowz Summary: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc... Tags: ai-pc:0.4.1, document-ai:0.4.1, fastapi:0.4.1, invoice:0.4.1, latest:0.4.1, latest openvino document-ai:0.1.2, latest openvino document-ai ocr invoice notebook:0.1.4, local-ai:0.4.1, l","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python \"{baseDir}/scripts/check_env.py\""},{"language":"powershell","snippet":"powershell -ExecutionPolicy Bypass -File \"{baseDir}/scripts/install.ps1\""},{"language":"bash","snippet":"python \"{baseDir}/scripts/run_skill.py\" --warmup-server"},{"language":"bash","snippet":"python \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\""},{"language":"bash","snippet":"python \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\""},{"language":"bash","snippet":"python \"{baseDir}/scripts/run_skill.py\" --warmup-server\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\""}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: local-document-ai-openvino\ndescription: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a local service, and output structured JSON/Markdown with user-defined invoice fields.\n---\n\n# Private Document AI with OpenVINO\n\nTurn local PDFs, invoices, screenshots, and diagrams into one of two useful outcomes:\n\n1. `to-data`: classify the document and extract structured fields, tables, and JSON, including user-requested key fields.\n2. `to-code`: turn screenshots, forms, and architecture diagrams into code or Jupyter notebook scaffolds.\n\nEverything runs locally and is built for Intel CPU/GPU acceleration with OpenVINO GenAI.\nThe default device is `CPU` for workshop stability. Set `MINERU_OPENVINO_DEVICE=GPU` or `AUTO` only after validating the target AI PC.\n\nThe default user experience is app-like:\n\n- the first call auto-starts a local service\n- HTTP/FastAPI service is preferred when available\n- the standard-library IPC service is used as a fallback\n- direct CLI parsing remains available with `--no-server`\n- the model stays resident after warmup so later calls avoid repeat model loading\n\nThe default runtime path in this release is:\n\n- MinerU 2.5 Pro\n- preconverted OpenVINO INT4 model bundle\n- local PDF rendering with `pypdfium2`\n- no local model export step\n\n## Why install this skill\n\nInstall this when you want one local workflow for:\n\n- invoice and receipt extraction\n- private PDF understanding\n- table and key-value extraction\n- architecture diagram to notebook generation\n- screenshot to HTML/React scaffold generation\n\nThis skill is especially good for demos because it already includes:\n\n- medical invoice `to-data` flows\n- restaurant invoice `to-data` flows\n- custom invoice field extraction such as invoice number, date, seller, and amount due\n- architecture diagram `to-code -> jupyter-notebook` flows\n- local HTML reports for easy review and screenshots\n\n## 30-second start\n\nCheck the environment:\n\n```bash\npython \"{baseDir}/scripts/check_env.py\"\n```\n\nInstall with the fastest available local installer path:\n\n```powershell\npowershell -ExecutionPolicy Bypass -File \"{baseDir}/scripts/install.ps1\"\n```\n\nWarm up the local document AI service:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --warmup-server\n```\n\nOr run directly from the CLI. Server mode is automatic by default:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\"\n```\n\nFor invoice demos with custom key fields:\n\n```bash\npython \"{baseDir}/scripts/run_skill.py\" --mode to-data --file \"/absolute/path/to/invoice.pdf\" --out \"/absolute/path/to/artifacts/invoice_data\" --extract \"tables,entities,kv_pairs\" --fields \"invoice_number,invoice_date,total_amount,vendor_name\"\n```\n\nFor repeated workshop demos, prefer the persistent local server mode:\n\n```bash\npython \"{baseD"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70rgyfb422qnxmr4ryhz1k698601ww\",\n  \"slug\": \"local-document-ai-openvino\",\n  \"version\": \"0.4.1\",\n  \"publishedAt\": 1784530501244\n}"},{"path":"references/mode_guide.md","content":"# Mode Guide\n\nThis file defines how each implemented mode should behave.\n\n## Shared Rules\n\nAlways:\n\n1. Parse first.\n2. Write `parsed.json`.\n3. Read from `parsed.json` for downstream work.\n4. Save final outputs under `task_output/`.\n5. Save a source map or traceability file for downstream modes.\n\nDo not:\n\n- generate directly from raw OCR text when `parsed.json` is available\n- invent facts not supported by the document\n- hide uncertainty or warnings that MinerU OpenVINO inference was not used\n\n## Mode: `parse`\n\n### Goal\n\nCreate the canonical structured representation only.\n\n### Inputs\n\n- `file`\n- optional `out`\n\n### Outputs\n\n- `parsed.json`\n- `parsed.md`\n- `tables/`\n- `figures/`\n\n### Return Summary\n\nInclude:\n\n- file processed\n- page count\n- counts of headings, paragraphs, tables, formulas, figures, charts if available\n- output folder path\n- warnings if any\n\n## Mode: `to-code`\n\n### Goal\n\nTurn a document into code-oriented artifacts.\n\n### Best-Fit Inputs\n\n- UI mockups\n- screenshots\n- forms\n- product specs\n- brochures\n- workflow documents\n\n### Allowed Outputs\n\n- `component_map.json`\n- `field_schema.json`\n- `app.jsx`\n- `index.html`\n- `styles.css`\n- `notes.md`\n- `traceability.json`\n\n### Behavior\n\n- infer sections and components from parsed structure\n- preserve labels, fields, buttons, lists, and tables\n- use placeholders when business rules are not explicit\n- record assumptions in `notes.md` and `traceability.json`\n\n### Good Examples\n\n- brochure image to landing page scaffold\n- form screenshot to React form skeleton\n- admin spec PDF to HTML + JSON field schema\n\n## Mode: `to-data`\n\n### Goal\n\nExtract machine-readable data for automation.\n\n### Best-Fit Inputs\n\n- invoices\n- reports\n- forms\n- schedules\n- tables\n- structured business documents\n\n### Allowed Outputs\n\n- `entities.json`\n- `kv_pairs.json`\n- `normalized.json`\n- `requested_fields.json`\n- `requested_fields_record.json`\n- `tables.csv`\n- `table_index.json`\n- `traceability.json`\n\n### Behavior\n\n- keep original text and normalized values when useful\n- preserve source block references for each record\n- separate extraction from interpretation\n- when the user provides a custom field list, generate a focused structured output for only those requested fields\n\n### Good Examples\n\n- invoice PDF to normalized invoice JSON\n- invoice PDF to a custom JSON record containing only `invoice_number`, `invoice_date`, `total_amount`, and `vendor_name`\n- annual report to CSV tables + entity summary\n- application form to field-value JSON\n\n## Mode Selection Hints\n\nPrefer:\n\n- `parse` when the user mainly wants structured OCR output\n- `to-code` when the user wants implementation artifacts\n- `to-data` when the user wants extraction/normalization\n\nIf unsure:\n\n- default to `parse`\n- then explain which downstream modes are available next"},{"path":"references/output_contracts.md","content":"# Output Contracts\n\nThis file defines the folder layout and file contracts.\n\n## Default folder layout\n\n```text\nartifacts/<document_stem>/\n├── parsed.json\n├── parsed.md\n├── traceability.json\n├── tables/\n├── figures/\n└── task_output/\n```\n\nIf the user passes `out=...`, use that directory instead.\n\n## Parse outputs\n\n### `parsed.json`\nRequired for every successful run.\n\n### `parsed.md`\nRequired for every successful run.\nPurpose:\n- human-readable rendering of the parse result\n\n### `tables/`\nOptional.\nWrite extracted CSVs or table assets here.\n\n### `figures/`\nOptional.\nWrite extracted figures here.\n\n---\n\n## Downstream outputs\n\n### `task_output/`\nRequired for non-parse modes.\n\nExamples:\n- `task_output/app.jsx`\n- `task_output/index.html`\n- `task_output/entities.json`\n- `task_output/slide_outline.md`\n\n### `traceability.json`\nRequired for non-parse modes.\n\nPurpose:\n- map generated artifacts back to source page/block IDs\n- record assumptions or low-confidence derivations\n\nExample:\n```json\n{\n  \"artifact\": \"task_output/app.jsx\",\n  \"mappings\": [\n    {\n      \"generated_unit_id\": \"component.signup_email_field\",\n      \"generated_text\": \"Email input field with label and helper text\",\n      \"source_refs\": [\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b12\"},\n        {\"page_id\": \"page_1\", \"block_id\": \"p1_b13\"}\n      ],\n      \"assumption\": \"Validation rule was not explicit in source.\"\n    }\n  ]\n}\n```\n\n## Failure contract\n\nIf a run fails:\n- do not create empty success artifacts\n- optionally write `error.json` with:\n  - stage\n  - message\n  - input file\n  - mode\n  - timestamp\n\nExample:\n```json\n{\n  \"stage\": \"parse\",\n  \"message\": \"Unsupported file type\",\n  \"input_file\": \"./docs/foo.xyz\",\n  \"mode\": \"parse\",\n  \"timestamp\": \"2026-04-08T16:00:00Z\"\n}\n```\n\n## Naming conventions\n\n- use lowercase snake_case for filenames\n- use stable IDs for pages, blocks, tables, and figures\n- use relative paths inside JSON when files live inside the same artifact folder\n\n## Quality notes\n\n- prefer explicit omission over silent loss\n- if tables or formulas are detected but not reconstructed, note that in `parse_info.warnings`\n- if output is partially inferred, record it in `traceability.json`"},{"path":"references/schema.md","content":"# Canonical Document Schema\n\nThis file defines the stable intermediate representation used by this skill.\n\n## Purpose\n\nAll downstream modes must consume the canonical schema instead of raw document text.\n\nBenefits:\n- stable contract between parse and transform stages\n- better grounding\n- traceability from outputs back to source blocks\n- easier testing and future model replacement\n\n## Top-level structure\n\n```json\n{\n  \"schema_version\": \"1.0\",\n  \"document_id\": \"string\",\n  \"source\": {},\n  \"parse_info\": {},\n  \"pages\": [],\n  \"tables\": [],\n  \"figures\": [],\n  \"entities\": [],\n  \"outputs\": {}\n}\n```\n\n## Field definitions\n\n### `schema_version`\nVersion of this schema.\nType: `string`\n\n### `document_id`\nStable ID for the current document run.\nRecommended format:\n`<file_stem>-<short_hash>`\n\n### `source`\nInformation about the original input.\n\n```json\n{\n  \"input_path\": \"string\",\n  \"input_type\": \"pdf|image\",\n  \"filename\": \"string\",\n  \"sha256\": \"string|null\"\n}\n```\n\n### `parse_info`\nInformation about the parser run.\n\n```json\n{\n  \"engine\": \"local-document-ai-openvino\",\n  \"engine_version\": \"string\",\n  \"mode\": \"parse|to-code|to-data\",\n  \"created_at\": \"ISO-8601 string\",\n  \"warnings\": [\"string\"],\n  \"confidence_note\": \"string|null\"\n}\n```\n\n### `pages`\nOrdered list of parsed pages.\n\n```json\n[\n  {\n    \"page_id\": \"page_1\",\n    \"page_index\": 1,\n    \"width\": 2480,\n    \"height\": 3508,\n    \"blocks\": []\n  }\n]\n```\n\n### `blocks`\nOrdered list of page blocks.\n\n```json\n{\n  \"block_id\": \"p1_b1\",\n  \"type\": \"heading|paragraph|list|table|formula|chart|figure|seal|kv_pair|footer|header|caption|unknown\",\n  \"bbox\": [0, 0, 100, 50],\n  \"reading_order\": 1,\n  \"text\": \"string\",\n  \"markdown\": \"string|null\",\n  \"latex\": \"string|null\",\n  \"html\": \"string|null\",\n  \"confidence\": 0.0,\n  \"attributes\": {\n    \"heading_level\": 1,\n    \"language\": \"en\",\n    \"is_rotated\": false\n  },\n  \"relations\": {\n    \"parent_block_id\": null,\n    \"caption_for\": null,\n    \"table_id\": null,\n    \"figure_id\": null\n  }\n}\n```\n\n#### Block rules\n- `page_id + block_id` must be unique\n- `reading_order` must be monotonic within a page\n- `type` should be as specific as possible\n- `text` is plain normalized text\n- `markdown` is optional rendered text\n- `latex` is only for formulas\n- `html` is optional for table/structured fragments\n\n### `tables`\nNormalized structured tables.\n\n```json\n[\n  {\n    \"table_id\": \"t1\",\n    \"page_id\": \"page_2\",\n    \"bbox\": [10, 10, 200, 150],\n    \"caption\": \"Quarterly Revenue\",\n    \"headers\": [\"Quarter\", \"Revenue\"],\n    \"rows\": [\n      [\"Q1\", \"$1M\"],\n      [\"Q2\", \"$1.2M\"]\n    ],\n    \"csv_path\": \"tables/t1.csv\",\n    \"source_block_ids\": [\"p2_b8\"]\n  }\n]\n```\n\n### `figures`\nSaved figure assets.\n\n```json\n[\n  {\n    \"figure_id\": \"f1\",\n    \"page_id\": \"page_3\",\n    \"bbox\": [20, 20, 300, 200],\n    \"caption\": \"Architecture Diagram\",\n    \"asset_path\": \"figures/f1.png\",\n    \"source_block_ids\": [\"p3_b4\"]\n  }\n]\n```\n\n### `entities`\nOptional normalized entities.\n\n```json\n[\n  {\n    \"entity_id\": \"e1\",\n    \"type\": \"invoice_number|date|pe"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc... Skill: Private Document AI with OpenVINO Owner: zhuo-yoyowz Summary: Private local document AI for Intel hardware. Parse PDFs, invoices, screenshots, and diagrams with MinerU 2.5 on OpenVINO GenAI, keep the model warm in a loc... Tags: ai-pc:0.4.1, document-ai:0.4.1, fastapi:0.4.1, invoice:0.4.1, latest:0.4.1, latest openvino document-ai:0.1.2, latest openvino document-ai ocr invoice notebook:0.1.4, local-ai:0.4.1, l","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1225,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T00:19:55.284Z","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-11T00:19:55.284Z","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-11T03:58:30.626Z","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"}]}}}