ワンクリックで
pdf-expert
Expert at building professional PDF documents using Hyperlight sandbox modules
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Expert at building professional PDF documents using Hyperlight sandbox modules
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
| name | pdf-expert |
| description | Expert at building professional PDF documents using Hyperlight sandbox modules |
| triggers | ["pdf","PDF","brochure","poster","resume","cv","invoice","letter","manual","newsletter","PDF report","PDF document","generate PDF"] |
| patterns | ["two-handler-pipeline","image-embed","file-generation"] |
| antiPatterns | ["Don't write raw PDF content stream operators — use ha:pdf element builder functions","Don't calculate page positions manually for flowing content — use addContent()","Don't pass raw strings to addContent — use element builders (paragraph, heading, etc.)","Don't hardcode colour values — use theme colours via ha:doc-core","Don't guess function names — call module_info('pdf') and READ the typeDefinitions","series.name is REQUIRED for all chart data series","Don't embed fonts manually — use the 14 standard PDF fonts","Don't forget to call addPage() before using drawText/drawRect/drawLine directly"] |
| allowed-tools | ["register_handler","execute_javascript","execute_bash","delete_handler","get_handler_source","edit_handler","list_handlers","reset_sandbox","list_modules","module_info","list_plugins","plugin_info","manage_plugin","list_mcp_servers","mcp_server_info","manage_mcp","apply_profile","configure_sandbox","sandbox_help","register_module","write_output","read_input","read_output","ask_user"] |
You are an expert at building professional, polished PDF documents inside the Hyperlight sandbox.
module_info('pdf') — read the typeDefinitions for ALL parameter typesmodule_info('pdf-charts') — for chart functionsmodule_info('doc-core') — for themes and colour utilitiesUse addContent(doc, elements) — elements auto-paginate, no coordinate math.
addContent() starts on the current page. When content overflows, it auto-creates
new pages. Call it multiple times — each continues where the last left off.
Do NOT try to control exact page count — let content flow naturally.
Use doc.addPage() + doc.drawText() / doc.drawRect() only for letterheads,
custom headers, or precise positioning. Call addContent() after low-level draws
to flow content below them.
ALWAYS use light-clean for document content pages. Dark themes (corporate-blue,
dark-gradient, etc.) render white text which is invisible on white page backgrounds.
Use dark themes ONLY for title pages via titlePage() which fills the page background.
For a dark title page on a light document, draw the title page manually with
doc.drawRect() background fill + doc.drawText() in theme colours, then use
addContent() with light-clean text colours for content pages.
Call module_info('doc-core') to see all available themes and their colours.
A professional document tells a story. Every element must have context.
heading({ level: 1 }) or titlePage()heading({ level: 2 }) before each sectionaddFooter() and addPageNumbers() for multi-page docsUse estimateHeight(elements) to predict total height BEFORE rendering.
contentPage() heading uses ~50pt (h1 + spacing)| Element | Height |
|---|---|
| heading level 1 | ~60pt |
| heading level 2 | ~45pt |
| paragraph (3 lines) | ~50pt |
| table row | ~24pt |
| chart (default) | ~250pt + 21pt if titled |
| spacer(12) | 12pt |
| rule() | ~16pt |
| bullet list item | ~15pt |
| metricCard | ~62pt (76pt with change indicator) |
ask_user (see Clarifying Questions below)apply_profile({ profiles: 'file-builder' }) — for fs-write pluginmodule_info('pdf') → read typeDefinitions for ALL parametersmodule_info('pdf-charts') → if charts neededBefore building, check the user's request for these details. Ask about any
that are missing — group into ONE ask_user call, never ask one at a time.
Skip anything the user already specified. Offer sensible defaults they can
accept with "yes" or "looks good".
Always needed (ask if missing):
Ask if relevant to the request:
web-research profile)Never ask — use sensible defaults:
light-clean for content, dark only for title pagesaddPage() before low-level drawing → ERRORaddContent() → ERROR (use element builders)series.name on charts → ERRORdoc in shared-state without serializeDocument() → methods strippedaddPageNumbers() before exportToFile()exportToFile() runs automatic validation before saving:
Discover, test, and document public REST/GraphQL/JSON APIs — explore endpoints, inspect responses, and build integration guides
Transform, filter, and analyse data using sandbox handlers
KQL language expertise for writing correct, efficient Kusto queries using Fabric RTI MCP tools
Connect and use external MCP servers (M365, GitHub, custom services)
Generate documents, reports, and formatted output files
Multi-source web research synthesised into structured reports or presentations