{
  "schemaVersion": "1.0",
  "item": {
    "slug": "zentable",
    "name": "zenTable",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/con2000us/zentable",
    "canonicalUrl": "https://clawhub.ai/con2000us/zentable",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/zentable",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=zentable",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "CHANGELOG.md",
      "DEPLOYMENT.md",
      "INSTALL.md",
      "README.md",
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "slug": "zentable",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-12T22:48:49.936Z",
      "expiresAt": "2026-05-19T22:48:49.936Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=zentable",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=zentable",
        "contentDisposition": "attachment; filename=\"zentable-0.9.2.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "zentable"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/zentable"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/zentable",
    "agentPageUrl": "https://openagent3.xyz/skills/zentable/agent",
    "manifestUrl": "https://openagent3.xyz/skills/zentable/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/zentable/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "ZenTable Skill",
        "body": "Render structured table data into high-quality PNG images."
      },
      {
        "title": "TL;DR",
        "body": "ZenTable turns messy table-like content into readable, decision-ready table outputs for both mobile (Discord-first) and desktop.\n\nAccepted inputs\n\ntext-based content (raw text tables, long agent responses)\nstructured JSON\nscreenshots / real-world photos (via OCR-assisted extraction when needed)\n\nCore capabilities\n\nCSS + PIL rendering\nsorting / filtering / pagination\nthreshold-based highlighting\noptional PNG + TXT dual output (--both)"
      },
      {
        "title": "Runtime & security note",
        "body": "This skill runs local scripts and depends on local runtime binaries (python3, google-chrome).\nReview code and dependencies before running in sensitive environments."
      },
      {
        "title": "Naming convention",
        "body": "Canonical code name: zentable (lowercase)\nUI / brand label: ZenTable\nzeble* / zenble* are legacy compatibility aliases\nReference: NAMING_MIGRATION.md (repository document)"
      },
      {
        "title": "When to use",
        "body": "✅ Use this skill when:\n\nYou need a visual table image instead of plain text\nYou need polished output for chat/report/social sharing\nThe dataset is large enough that plain text is hard to read\nYou need a specific visual theme (iOS-like, dark, compact, etc.)\n\n❌ Do not use this skill when:\n\nThe table is tiny and plain text is enough\nThe user explicitly asks for no image output\nThe user needs an editable spreadsheet format (CSV/Excel)"
      },
      {
        "title": "Capability matrix (SkillHub release)",
        "body": "CapabilityStatusNotesCSS output✅ StablePrimary release path; default minimal_ios_mobile + width=450PIL output✅ StableSafe fallback when Chrome is unavailableASCII output⚠️ Beta / ExperimentalWorks, but alignment can drift cross-platform due to font and whitespace behavior"
      },
      {
        "title": "Known limitations",
        "body": "ASCII output is sensitive to platform font fallback and whitespace handling.\nCreate separate calibration profiles per platform; do not share blindly.\n--both already includes text-theme fallback to default when no text theme exists.\nDiscord plain text collapses repeated normal spaces; Unicode spacing characters may be required for spacing preservation.\nThis beta was validated primarily on Discord; other chat platforms may require agent-side output adaptation (image/message formatting differences)."
      },
      {
        "title": "Zx shorthand policy (project rule)",
        "body": "When user input is Zx, treat it as a strong render intent:\n\nExecute rendering directly by default (no preliminary Q&A).\nDefault path: CSS + minimal_ios_mobile + width=450.\nAsk follow-up only under high uncertainty:\n\nno usable source data in current/previous context,\nintent does not look like table rendering,\ncritical fields are missing and output would likely be wrong.\n\n\nIf platform supports images, return the image directly (not link-only).\n\nData source priority for Zx:\n\ncurrent message image OCR\ncurrent message text-to-table\nprevious message image OCR\nprevious message text-to-table"
      },
      {
        "title": "Syntax sugar → canonical mapping",
        "body": "SugarCanonical keyNormalizationFinal renderer args--width N / --w Nwidthpositive int--width N--transpose / --cctransposeboolean--transpose--ttkeep_theme_alphaboolean--tt--per-page N / --pp Nper_pagepositive int--per-page N--page ... / --p ...page_specN / A-B / A- / allexpanded by table_renderer.py--allpage_specequivalent to allexpanded by table_renderer.py--text-scale V / --ts Vtext_scaleenum/ratio--text-scale V--sort SPECsort_specsingle/multi-key--sort SPEC--asc / --descsort_default_dirdefault direction--asc / --desc--f SPEC / --filter SPECfiltersrepeatable filter--f SPEC--smart-wrapsmart_wraptrue--smart-wrap--no-smart-wrap / --noswsmart_wrapfalse--no-smart-wrap--theme NAME / -t NAMEthemetheme id--theme NAME--both / --booutput_bothboolean--both--pin KEYSpin_keyspersist defaults--pin--pin-resetpin_resetreset pinned defaults--pin-reset\n\nPinned default baseline:\n\ntheme=minimal_ios_mobile\nwidth=450\nsmart_wrap=true\nper_page=15"
      },
      {
        "title": "page_spec rules",
        "body": "N: page N only\nA-B: inclusive range A..B\nA-: from A to last page\nall: all pages\nif omitted: default preview pages 1-3"
      },
      {
        "title": "Canonical payload example",
        "body": "{\n  \"theme\": \"minimal_ios_mobile\",\n  \"width\": 900,\n  \"transpose\": false,\n  \"keep_theme_alpha\": false,\n  \"per_page\": 15,\n  \"page_spec\": \"2-\",\n  \"sort_spec\": \"score:desc,name:asc\",\n  \"sort_default_dir\": \"asc\",\n  \"filters\": [\"col:!note,attachment\", \"row:status!=disabled;score>=60\"],\n  \"text_scale\": \"auto\",\n  \"smart_wrap\": true,\n  \"output_both\": false\n}"
      },
      {
        "title": "Command examples",
        "body": "# run from repository root\n\n# basic CSS output\npython3 skills/zentable/table_renderer.py - /tmp/out.png --theme minimal_ios_mobile --width 900 --text-scale large --page 1\n\n# transpose + disable smart wrap\npython3 skills/zentable/table_renderer.py - /tmp/out.png --theme compact_clean --transpose --no-smart-wrap --page 1\n\n# page range expansion (2-4)\npython3 skills/zentable/table_renderer.py - /tmp/out.p2.png --per-page 12 --page 2\npython3 skills/zentable/table_renderer.py - /tmp/out.p3.png --per-page 12 --page 3\npython3 skills/zentable/table_renderer.py - /tmp/out.p4.png --per-page 12 --page 4\n\n# PNG + ASCII side output\npython3 skills/zentable/table_renderer.py - /tmp/out.png --theme mobile_chat --both"
      },
      {
        "title": "Validation checklist (minimum)",
        "body": "python3 -m py_compile scripts/zentable_render.py\nCSS smoke output succeeds\nPIL smoke output succeeds\n--pin, --pin-reset, --both verified\nGolden tests pass when relevant"
      },
      {
        "title": "Release positioning",
        "body": "Current channel: beta.\nASCII remains beta/experimental for SkillHub release."
      },
      {
        "title": "Support / Contact",
        "body": "GitHub Issues: https://github.com/con2000us/zenTable/issues\nMaintainer: @con2000us (Discord)\nBug report checklist:\n\ninput type (text / screenshot / photo / json)\nexpected vs actual output\nplatform (Discord/mobile/desktop)\ncommand/options used"
      }
    ],
    "body": "ZenTable Skill\n\nRender structured table data into high-quality PNG images.\n\nTL;DR\n\nZenTable turns messy table-like content into readable, decision-ready table outputs for both mobile (Discord-first) and desktop.\n\nAccepted inputs\n\ntext-based content (raw text tables, long agent responses)\nstructured JSON\nscreenshots / real-world photos (via OCR-assisted extraction when needed)\n\nCore capabilities\n\nCSS + PIL rendering\nsorting / filtering / pagination\nthreshold-based highlighting\noptional PNG + TXT dual output (--both)\nRuntime & security note\n\nThis skill runs local scripts and depends on local runtime binaries (python3, google-chrome). Review code and dependencies before running in sensitive environments.\n\nNaming convention\nCanonical code name: zentable (lowercase)\nUI / brand label: ZenTable\nzeble* / zenble* are legacy compatibility aliases\nReference: NAMING_MIGRATION.md (repository document)\nWhen to use\n\n✅ Use this skill when:\n\nYou need a visual table image instead of plain text\nYou need polished output for chat/report/social sharing\nThe dataset is large enough that plain text is hard to read\nYou need a specific visual theme (iOS-like, dark, compact, etc.)\n\n❌ Do not use this skill when:\n\nThe table is tiny and plain text is enough\nThe user explicitly asks for no image output\nThe user needs an editable spreadsheet format (CSV/Excel)\nCapability matrix (SkillHub release)\nCapability\tStatus\tNotes\nCSS output\t✅ Stable\tPrimary release path; default minimal_ios_mobile + width=450\nPIL output\t✅ Stable\tSafe fallback when Chrome is unavailable\nASCII output\t⚠️ Beta / Experimental\tWorks, but alignment can drift cross-platform due to font and whitespace behavior\nKnown limitations\nASCII output is sensitive to platform font fallback and whitespace handling.\nCreate separate calibration profiles per platform; do not share blindly.\n--both already includes text-theme fallback to default when no text theme exists.\nDiscord plain text collapses repeated normal spaces; Unicode spacing characters may be required for spacing preservation.\nThis beta was validated primarily on Discord; other chat platforms may require agent-side output adaptation (image/message formatting differences).\nZx shorthand policy (project rule)\n\nWhen user input is Zx, treat it as a strong render intent:\n\nExecute rendering directly by default (no preliminary Q&A).\nDefault path: CSS + minimal_ios_mobile + width=450.\nAsk follow-up only under high uncertainty:\nno usable source data in current/previous context,\nintent does not look like table rendering,\ncritical fields are missing and output would likely be wrong.\nIf platform supports images, return the image directly (not link-only).\n\nData source priority for Zx:\n\ncurrent message image OCR\ncurrent message text-to-table\nprevious message image OCR\nprevious message text-to-table\nSyntax sugar → canonical mapping\nSugar\tCanonical key\tNormalization\tFinal renderer args\n--width N / --w N\twidth\tpositive int\t--width N\n--transpose / --cc\ttranspose\tboolean\t--transpose\n--tt\tkeep_theme_alpha\tboolean\t--tt\n--per-page N / --pp N\tper_page\tpositive int\t--per-page N\n--page ... / --p ...\tpage_spec\tN / A-B / A- / all\texpanded by table_renderer.py\n--all\tpage_spec\tequivalent to all\texpanded by table_renderer.py\n--text-scale V / --ts V\ttext_scale\tenum/ratio\t--text-scale V\n--sort SPEC\tsort_spec\tsingle/multi-key\t--sort SPEC\n--asc / --desc\tsort_default_dir\tdefault direction\t--asc / --desc\n--f SPEC / --filter SPEC\tfilters\trepeatable filter\t--f SPEC\n--smart-wrap\tsmart_wrap\ttrue\t--smart-wrap\n--no-smart-wrap / --nosw\tsmart_wrap\tfalse\t--no-smart-wrap\n--theme NAME / -t NAME\ttheme\ttheme id\t--theme NAME\n--both / --bo\toutput_both\tboolean\t--both\n--pin KEYS\tpin_keys\tpersist defaults\t--pin\n--pin-reset\tpin_reset\treset pinned defaults\t--pin-reset\n\nPinned default baseline:\n\ntheme=minimal_ios_mobile\nwidth=450\nsmart_wrap=true\nper_page=15\npage_spec rules\nN: page N only\nA-B: inclusive range A..B\nA-: from A to last page\nall: all pages\nif omitted: default preview pages 1-3\nCanonical payload example\n{\n  \"theme\": \"minimal_ios_mobile\",\n  \"width\": 900,\n  \"transpose\": false,\n  \"keep_theme_alpha\": false,\n  \"per_page\": 15,\n  \"page_spec\": \"2-\",\n  \"sort_spec\": \"score:desc,name:asc\",\n  \"sort_default_dir\": \"asc\",\n  \"filters\": [\"col:!note,attachment\", \"row:status!=disabled;score>=60\"],\n  \"text_scale\": \"auto\",\n  \"smart_wrap\": true,\n  \"output_both\": false\n}\n\nCommand examples\n# run from repository root\n\n# basic CSS output\npython3 skills/zentable/table_renderer.py - /tmp/out.png --theme minimal_ios_mobile --width 900 --text-scale large --page 1\n\n# transpose + disable smart wrap\npython3 skills/zentable/table_renderer.py - /tmp/out.png --theme compact_clean --transpose --no-smart-wrap --page 1\n\n# page range expansion (2-4)\npython3 skills/zentable/table_renderer.py - /tmp/out.p2.png --per-page 12 --page 2\npython3 skills/zentable/table_renderer.py - /tmp/out.p3.png --per-page 12 --page 3\npython3 skills/zentable/table_renderer.py - /tmp/out.p4.png --per-page 12 --page 4\n\n# PNG + ASCII side output\npython3 skills/zentable/table_renderer.py - /tmp/out.png --theme mobile_chat --both\n\nValidation checklist (minimum)\npython3 -m py_compile scripts/zentable_render.py\nCSS smoke output succeeds\nPIL smoke output succeeds\n--pin, --pin-reset, --both verified\nGolden tests pass when relevant\nRelease positioning\n\nCurrent channel: beta. ASCII remains beta/experimental for SkillHub release.\n\nSupport / Contact\nGitHub Issues: https://github.com/con2000us/zenTable/issues\nMaintainer: @con2000us (Discord)\nBug report checklist:\ninput type (text / screenshot / photo / json)\nexpected vs actual output\nplatform (Discord/mobile/desktop)\ncommand/options used"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/con2000us/zentable",
    "publisherUrl": "https://clawhub.ai/con2000us/zentable",
    "owner": "con2000us",
    "version": "0.9.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/zentable",
    "downloadUrl": "https://openagent3.xyz/downloads/zentable",
    "agentUrl": "https://openagent3.xyz/skills/zentable/agent",
    "manifestUrl": "https://openagent3.xyz/skills/zentable/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/zentable/agent.md"
  }
}