Pack prompt templates
One template per capability pack. Replace every {{VARIABLE}} and paste into
your MCP client; the agent picks the tool. Variables map to each pack's
InputSchema (see per-pack reference for full schemas,
defaults, and error codes). Session-scoped packs (fs.*, cmd.run, git.*,
repo.*) need a clone_path + _session_id from a prior repo.fetch in the
same conversation.
Orchestration meta-packs
These four packs help the agent pick and sequence the right tool. The agent normally invokes helmdeck.route and helmdeck.plan automatically from a natural-language prompt — use the templates below only to force an explicit routing/decomposition step. helmdeck.memory_store and helmdeck.memory_forget are genuinely user-driven.
helmdeck.route — recommend the best pack/pipeline (explicit override)
Template
Use helmdeck__helmdeck-route to recommend the best tool for: {{INTENT}}. Use model {{MODEL}}.
Variables
{{INTENT}}— the single natural-language intent (inputuser_intent, required).{{MODEL}}— a routableprovider/modelid, e.g.openrouter/auto(inputmodel, required).
Notes — returns a recommendation + alternatives + a gap_warning when nothing fits; the agent normally calls this implicitly. Needs an AI gateway.
helmdeck.plan — decompose a multi-step request (explicit override)
Template
Use helmdeck__helmdeck-plan to break this into steps: {{INTENT}}. Use model {{MODEL}}.
Variables
{{INTENT}}— the multi-action request (inputuser_intent, required).{{MODEL}}— a routableprovider/modelid (inputmodel, required).
Notes — returns steps[] + rewritten_prompt + complexity; pipeline-aware. The agent normally calls this implicitly for multi-action prompts. Needs an AI gateway.
helmdeck.memory_store — remember a durable fact
Template
Use helmdeck to remember that {{FACT}} (key "{{KEY}}", category {{CATEGORY}}).
Variables
{{KEY}}— short identifier (inputkey, required).{{FACT}}— the fact text (inputvalue, required).{{CATEGORY}}— optional bucket, defaultuser_facts(inputcategory;pack_history/pipeline_historyare reserved).
helmdeck.memory_forget — clear learned defaults
Template
Use helmdeck to forget {{SCOPE}}.
Variables
{{SCOPE}}—all/packs/pipelines/pack:<id>/pipeline:<id>/key:<exact-key>(inputscope, optional, defaultall).
Notes — clears routing/audit history only; never touches pack caches or vault credentials.
Browser
browser.screenshot_url — screenshot a URL
Template
Use helmdeck to take a screenshot of {{URL}}.
Variables
{{URL}}— page to capture (inputurl, required).
browser.interact — deterministic browser actions
Template
Use helmdeck__browser-interact against {{URL}} with these actions: {{ACTIONS}}.
Variables
{{URL}}— starting page (inputurl, required).{{ACTIONS}}— JSON array of steps, e.g.[{"action":"extract","selector":"h1","format":"text"},{"action":"screenshot"}](inputactions, required).
Web
web.scrape — scrape a URL to clean markdown
Template
Use helmdeck__web-scrape to scrape {{URL}} to markdown.
Variables
{{URL}}— page to scrape (inputurl, required).
Notes — needs the Firecrawl overlay.
web.scrape_spa — render a SPA and extract fields by CSS selector
Template
Use helmdeck__web-scrape-spa on {{URL}} and extract these fields: {{FIELDS}}.
Variables
{{URL}}— page to render (inputurl, required).{{FIELDS}}—{name: cssSelector}map of fields to extract (inputfields, required).
Notes — needs the Firecrawl overlay.
web.test — natural-language browser test
Template
Use helmdeck__web-test on {{URL}}: {{INSTRUCTION}}. Assert: {{ASSERTIONS}}.
Variables
{{URL}}— page under test (inputurl, required).{{INSTRUCTION}}— what to do in plain English (inputinstruction, required).{{ASSERTIONS}}— list of things that must hold (inputassertions, optional).{{MODEL}}— model id (inputmodel, required; defaultopenrouter/auto).
Research & Content
research.deep — search + synthesize a topic
Template
Use helmdeck__research-deep to research {{QUERY}} and give me a synthesis with sources.
Variables
{{QUERY}}— topic to research (inputquery, required).{{MODEL}}— model id (inputmodel, required; defaultopenrouter/auto).
Notes — needs the Firecrawl overlay; async.
content.ground — fact-check + rewrite markdown against sources
Template
Use helmdeck__content-ground to fact-check and rewrite this markdown, citing sources:
{{MARKDOWN}}
Variables
{{MARKDOWN}}— the text to ground (inputtext; or passclone_path+pathfor a file).{{TOPIC}}— optional topic hint to focus sourcing (inputtopic, optional).{{MODEL}}— model id (inputmodel, required; defaultopenrouter/auto).rewrite:trueproduces the rewrittengrounded_text.
Notes — needs the Firecrawl overlay; async.
Slides
slides.outline — prose → structured Marp deck
Template
Use helmdeck__slides-outline to turn this into a structured Marp deck (title "{{TITLE}}", persona {{PERSONA}}) using model {{MODEL}}:
{{CONTENT}}
Variables
{{CONTENT}}— the prose/markdown to restate as slides (inputcontent, required).{{TITLE}}— deck title; guarantees a title slide (inputtitle, optional).{{PERSONA}}—general|technical|marketing|executive|educationalor freeform (inputpersona, optional).{{MODEL}}— a routableprovider/modelid (inputmodel, required).
Notes — feed prose through this FIRST; slides.render/narrate split only on ---. Needs an AI gateway.
slides.render — Marp deck → PDF/PPTX/HTML
Template
Use helmdeck__slides-render to render this Marp markdown as {{FORMAT}}:
{{MARKDOWN}}
Variables
{{MARKDOWN}}— the Marp deck markdown (inputmarkdown, required).{{FORMAT}}—pdf|pptx|html(inputformat, optional, defaultpdf).{{HERO_IMAGE_PROMPT}}— optional fal.ai prompt for a slide-1 hero image (inputhero_image_prompt, optional).
slides.narrate — Marp deck → narrated MP4
Template
Use helmdeck__slides-narrate to turn this Marp deck into a narrated video:
{{MARKDOWN}}
Variables
{{MARKDOWN}}— the Marp deck markdown (inputmarkdown, required).{{VOICE_ID}}— ElevenLabs voice id (inputvoice_id, optional; discover viahelmdeck://voices).
Notes — needs elevenlabs-key (or pass allow_silent_output:true); async.
GitHub
github.create_issue — open an issue
Template
Use helmdeck__github-create-issue to open an issue on {{REPO}} titled "{{TITLE}}" with body: {{BODY}}.
Variables
{{REPO}}—owner/repo(inputrepo, required).{{TITLE}}— issue title (inputtitle, required).{{BODY}}— issue body (inputbody, optional).{{LABELS}}— labels (inputlabels, optional).
Notes — needs a vault GitHub PAT (credential, default github-token).
github.create_pr — open a pull request
Template
Use helmdeck__github-create-pr on {{REPO}} from {{HEAD}} into {{BASE}}, titled "{{TITLE}}".
Variables
{{REPO}}—owner/repo(required).{{HEAD}}— source branch (required).{{BASE}}— target branch (required).{{TITLE}}— PR title (required).{{BODY}}— PR body (optional).
Notes — needs a vault GitHub PAT.
github.create_release — create a release for a tag
Template
Use helmdeck__github-create-release on {{REPO}} for tag {{TAG}} named "{{NAME}}".
Variables
{{REPO}}—owner/repo(required).{{TAG}}— tag (required).{{NAME}}/{{BODY}}— release name/notes (optional).
Notes — needs a vault GitHub PAT.
github.get_issue — read one issue by number
Template
Use helmdeck__github-get-issue to fetch issue #{{NUMBER}} from {{REPO}}.
Variables
{{REPO}}—owner/name(inputrepo, required).{{NUMBER}}— the issue number (inputissue_number, required).
Notes — read-through cached 5 min; pairs with swe.solve for issue→PR pipelines. Needs vault github-token for private repos.
github.list_issues — list issues
Template
Use helmdeck__github-list-issues on {{REPO}} (state {{STATE}}, labels {{LABELS}}).
Variables
{{REPO}}—owner/repo(required).{{STATE}}(open/closed/all),{{LABELS}},{{ASSIGNEE}}— optional filters.
github.list_prs — list pull requests
Template
Use helmdeck__github-list-prs on {{REPO}} (state {{STATE}}).
Variables
{{REPO}}—owner/repo(required).{{STATE}},{{BASE}},{{HEAD}}— optional filters.
github.post_comment — comment on an issue or PR
Template
Use helmdeck__github-post-comment on {{REPO}} issue #{{ISSUE_NUMBER}} with: {{BODY}}.
Variables
{{REPO}}—owner/repo(required).{{ISSUE_NUMBER}}— issue/PR number (required).{{BODY}}— comment text (required).
Notes — needs a vault GitHub PAT.
github.search — search code/issues/PRs
Template
Use helmdeck__github-search to search {{TYPE}} for: {{QUERY}}.
Variables
{{QUERY}}— search query (required).{{TYPE}}—code|issues|prs(optional).
Communication
email.send — send a transactional email
Template
Use helmdeck__email-send to email {{TO}} with subject "{{SUBJECT}}" and body:
{{HTML}}
Variables
{{TO}}— recipient address (inputto, required).{{SUBJECT}}— subject line (inputsubject, optional).{{HTML}}— HTML body (inputhtml, optional).{{FROM}}— sender address (inputfrom, optional). Alsocc,bcc,reply_to.
Notes — sends via Resend; needs the resend-api-key vault credential. Returns a message_id.
Blog
blog.rewrite_for_audience — source doc → original blog post
Template
Use helmdeck__blog-rewrite-for-audience to rewrite this for {{AUDIENCE}} ({{ANGLE}}) using model {{MODEL}}:
{{SOURCE_CONTENT}}
Variables
{{SOURCE_CONTENT}}— the source markdown (inputsource_content, required).{{AUDIENCE}}— who the post is for (inputaudience, required).{{ANGLE}}— the editorial angle/thesis (inputangle, optional).{{MODEL}}— a routableprovider/modelid (inputmodel, required).
Notes — not a summarizer; stays grounded in the source. Chain content.ground (rewrite:false) for citations, then blog.publish. Needs an AI gateway.
blog.publish — render/publish a post
Template
Use helmdeck__blog-publish to publish a {{FORMAT}} post titled "{{TITLE}}" with body:
{{BODY}}
Variables
{{FORMAT}}—markdown|html(inputformat, required).{{TITLE}}— title (required).{{BODY}}— post body (inputbody; or useprompt+modelto generate).{{DESTINATION}}—artifact(default) orghost(optional; Ghost needshost+credential).
Podcast
podcast.generate — multi-speaker podcast MP3
Template
Use helmdeck__podcast-generate to make a podcast from this source text: {{SOURCE_TEXT}}. Speakers: {{SPEAKERS}}.
Variables
{{SPEAKERS}}—{name: voice_id}map (inputspeakers, required; discover voices viahelmdeck://voices).{{SOURCE_TEXT}}— content to turn into a show (inputsource_text; orsource_url, orprompt+model, or ascript).{{THEME}}—interview|debate|news-roundup|deep-dive|solo-essay(inputtheme, optional).
Notes — needs elevenlabs-key (or allow_silent_output:true); async. Engagement metadata (metadata_model) and AV validation (validate) are both default-on; pass metadata_model:"" or validate:false to disable. The output's validation field carries a structured AV-quality report (see av.validate template).
AV utilities
av.validate — structured validation report for an AV artifact
Template
Use helmdeck__av-validate to validate {{ARTIFACT_KEY}}.
Variables
{{ARTIFACT_KEY}}— the video or audio artifact key (inputvideo_artifact_keyfor MP4 oraudio_artifact_keyfor MP3). Direct paths (video_path/audio_path) also work for chained-pack scenarios where the file is already in the session/tmp.
Notes — 13-check set covering faststart, codec pin, packet contiguity, RMS sweep, LUFS, audio/video duration parity, SRT format. Default soft-surface — failed checks land in the validation field, pack returns success; pass strict:true to surface fail-severity failures as a typed error (CI publish-gate use case). Already runs default-on as a post-step on slides.narrate + podcast.generate, so direct invocation is mostly for ad-hoc validation of artifacts produced outside those packs OR for the CI strict-mode gate. See ADR 052 for the architecture.
Image
image.generate — text → image via fal.ai
Template
Use helmdeck__image-generate to generate an image: {{PROMPT}}.
Variables
{{PROMPT}}— image description (inputprompt, required).{{MODEL}}— fal.ai model (inputmodel, optional; discover viahelmdeck://image-models).{{NUM_IMAGES}}— 1-4 (optional).
Notes — needs fal-key / HELMDECK_FAL_KEY.
Stock photography
stock.search — Pexels stock photos
Template
Use helmdeck__stock-search to find {{COUNT}} {{ORIENTATION}} photos of {{QUERY}}.
Variables
{{QUERY}}— search terms (inputquery, required).{{COUNT}}(1-4),{{ORIENTATION}}(landscape/portrait/square) — optional.
Notes — needs pexels-key / HELMDECK_PEXELS_API_KEY.
Video
hyperframes.compose — description → HyperFrames composition
Template
Use helmdeck__hyperframes-compose to generate a {{ASPECT_RATIO}} composition for: {{DESCRIPTION}}. Use model {{MODEL}}.
Variables
{{DESCRIPTION}}— plain-language description of the video (inputdescription, required).{{ASPECT_RATIO}}—16:9|9:16|1:1(inputaspect_ratio, optional).{{MODEL}}— a routableprovider/modelid (inputmodel, required).
Notes — returns composition_html; feed it to hyperframes.render. Pass audio_url (e.g. a podcast.generate URL) for narration. Needs an AI gateway.
hyperframes.render — HTML/CSS/JS composition → MP4
Template
Use helmdeck__hyperframes-render to render this composition to MP4 ({{RESOLUTION}}, {{ASPECT_RATIO}}):
{{COMPOSITION_HTML}}
Variables
{{COMPOSITION_HTML}}— the HTML/CSS/JS composition (inputcomposition_html, required; embed an<audio src>for narrated video).{{RESOLUTION}}—1080p|4k(optional).{{ASPECT_RATIO}}—16:9|9:16|1:1(optional).
Notes — short-form only (≤12 min, 512 MiB).
Repository
repo.fetch — clone a git repo into a session
Template
Use helmdeck__repo-fetch to clone {{REPO_URL}} (ref {{REF}}).
Variables
{{REPO_URL}}— git URL, HTTPS or SSH (inputurl, required).{{REF}}— branch/tag/SHA (inputref, optional).{{CREDENTIAL}}— vault name for private repos (optional).
Notes — returns clone_path + session_id; pass both to follow-on fs.* / cmd.run / git.* / repo.push.
repo.map — symbol-level repo map
Template
Use helmdeck__repo-map on the cloned repo (clone_path {{CLONE_PATH}}, same _session_id).
Variables
{{CLONE_PATH}}— from a priorrepo.fetch(inputclone_path, required).{{TOKEN_BUDGET}}— map size cap (optional).
Notes — session-scoped: pass the _session_id from repo.fetch.
repo.push — push committed changes back to the remote
Template
Use helmdeck__repo-push to push the clone at {{CLONE_PATH}} to branch {{BRANCH}} (same _session_id).
Variables
{{CLONE_PATH}}— fromrepo.fetch(required).{{BRANCH}}— target branch (optional).{{CREDENTIAL}}— vault credential (optional).
Notes — session-scoped; needs push credentials in the vault.
swe.solve — autonomous code-fix agent
Template
Use helmdeck__swe-solve on {{REPO_URL}} to: {{TASK}}. Mode: {{MODE}}.
Variables
{{REPO_URL}}— repo to fix (inputrepo_url, required).{{TASK}}— the problem statement (inputtask, required).{{MODE}}—patch(default) |branch|pull_request(optional).{{CREDENTIAL}}/{{MODEL}}— optional.
Notes — never pushes to the default branch; async; produces a trajectory artifact.
Artifacts (typed artifact store + audit-callback verification)
These four packs replace prose-instruction "save to artifacts" guidance that Tier C free models silently ignore. Pair artifact.put (deposit) with artifact.verify_manifest (audit-callback) when a skill produces a multi-artifact manifest — the agent SHOULD call verify after deposit so the operator sees all_present: true/false rather than trusting prose claims. See docs/howto/personalize-an-openclaw-agent.md and docs/howto/per-model-agents/ for AGENTS.md hardening patterns that empirically improve deposit reliability on Tier C models.
artifact.put — typed deposit into the artifact store
Template
Use helmdeck__artifact-put to save this {{KIND}} content: {{CONTENT}}. Filename {{FILENAME}}, namespace {{NAMESPACE}}.
Variables
{{CONTENT}}— the content to deposit (inputcontent, required).{{KIND}}— one ofblog/markdown/transcript/summary/json/text/html/csv/binary(inputkind, required). Drives defaultfilename+content_type.{{FILENAME}}— override the kind default (inputfilename, optional). Filename safety: leading slashes stripped,..segments resolved.{{NAMESPACE}}— logical namespace (inputnamespace, optional). Defaults toartifact.put/; skills targeting a specific publishing chain should set explicitly (e.g.,blog.publish/).
Notes — returns {artifact_key, url, size, content_type, filename, namespace}. encoding: "base64" opt-in for binary content (input encoding, optional). Use with artifact.verify_manifest after multi-artifact runs.
artifact.get — read an artifact's bytes
Template
Use helmdeck__artifact-get to read artifact {{ARTIFACT_KEY}}.
Variables
{{ARTIFACT_KEY}}— from a priorartifact.put(orartifact.listdiscovery) (inputartifact_key, required).{{ENCODING}}—utf-8|base64(inputencoding, optional). Defaults to UTF-8 for text content types per RFC 6839 (text/*,application/json,application/yaml,application/xml,*+json,*+xml,*+yaml); base64 for everything else.
Notes — returns {content, encoding, content_type, size, artifact_key, filename, namespace}.
artifact.list — list artifacts in the store
Template
Use helmdeck__artifact-list to find artifacts in namespace {{NAMESPACE}} matching filename {{FILENAME}}.
Variables
{{NAMESPACE}}— filter by namespace (inputnamespace, optional).{{FILENAME}}— case-insensitive substring match (inputfilename, optional).{{LIMIT}}— max entries to return (inputlimit, optional). Default 100, newest-first bycreated_at.
Notes — returns {artifacts: [...], count, truncated}. Pair with artifact.get to read the bytes.
artifact.verify_manifest — anti-hallucination audit-callback
Template
Use helmdeck__artifact-verify_manifest to confirm these claimed artifacts exist: {{EXPECTED_KEYS}}.
Variables
{{EXPECTED_KEYS}}— array of{artifact_key: "..."}objects (also accepts flat string array[...]for Tier C friendliness) (inputexpected, required).
Notes — returns {verified: [...], missing: [...], all_present: true/false, summary: "..."}. Always call after a multi-artifact deposit chain — Tier C models hallucinate artifact_key strings that don't exist in the store, and this pack is the audit that catches it. Empirically validated (PR #481 → PR #484 Nemotron A/B): per-use-case AGENTS.md hardening + this verify pattern closes the documented "Goal Drift + Tool-Call Failures" failure modes.
Filesystem (session-scoped — need clone_path + _session_id from repo.fetch)
fs.read — read a file
Template
Use helmdeck__fs-read to read {{PATH}} from clone_path {{CLONE_PATH}} (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{PATH}}— file path relative to the clone (required).
fs.write — write a file
Template
Use helmdeck__fs-write to write to {{PATH}} in clone_path {{CLONE_PATH}} (same _session_id):
{{CONTENT}}
Variables
{{CLONE_PATH}}(required) ·{{PATH}}(required) ·{{CONTENT}}— file contents (required).
fs.list — list files
Template
Use helmdeck__fs-list on clone_path {{CLONE_PATH}} with glob {{GLOB}} (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{GLOB}}— e.g.*.md(optional) ·{{PATH}}— subdir (optional).
fs.patch — replace literal strings in a file
Template
Use helmdeck__fs-patch on {{PATH}} in clone_path {{CLONE_PATH}}: replace {{SEARCH}} with {{REPLACE}} (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{PATH}}(required) ·{{SEARCH}}/{{REPLACE}}— the single edit (or pass aneditsarray).
fs.delete — delete a file
Template
Use helmdeck__fs-delete to delete {{PATH}} from clone_path {{CLONE_PATH}} (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{PATH}}(required).
Shell & Git (session-scoped)
cmd.run — run a shell command in the clone
Template
Use helmdeck__cmd-run in clone_path {{CLONE_PATH}} to run: {{COMMAND}} (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{COMMAND}}— argv array, e.g.["go","test","./..."](required) ·{{STDIN}}(optional).
git.commit — stage + commit
Template
Use helmdeck__git-commit in clone_path {{CLONE_PATH}} with message "{{MESSAGE}}" (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{MESSAGE}}— commit message (required).
git.diff — show uncommitted diff
Template
Use helmdeck__git-diff on clone_path {{CLONE_PATH}} (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{STAGED}}— staged-only, true/false (optional).
git.log — recent commit history
Template
Use helmdeck__git-log on clone_path {{CLONE_PATH}}, last {{COUNT}} commits (same _session_id).
Variables
{{CLONE_PATH}}(required) ·{{COUNT}}— number of commits (optional).
HTTP
http.fetch — HTTP request with vault substitution + egress guard
Template
Use helmdeck__http-fetch to {{METHOD}} {{URL}} with headers {{HEADERS}} and body {{BODY}}.
Variables
{{URL}}— request URL (inputurl, required).{{METHOD}}(GET/POST/…),{{HEADERS}},{{BODY}}— optional. Use${vault:name}placeholders for secrets.
Document
doc.parse — document → clean markdown (Docling)
Template
Use helmdeck__doc-parse to parse {{SOURCE_URL}} to markdown.
Variables
{{SOURCE_URL}}— URL of the doc (inputsource_url; or passsource_b64).{{DO_OCR}}— OCR scanned PDFs, true/false (optional).
Notes — needs the Docling overlay.
doc.ocr — OCR an image (Tesseract)
Template
Use helmdeck__doc-ocr to extract text from {{SOURCE_URL}} (language {{LANGUAGE}}).
Variables
{{SOURCE_URL}}— image URL (inputsource_url; orsource_b64).{{LANGUAGE}}— Tesseract lang code (optional).
Desktop & Vision (operate the visible desktop — operator can watch via noVNC)
desktop.run_app_and_screenshot — launch an app on the desktop + screenshot
Template
Use helmdeck__desktop-run-app-and-screenshot to launch {{COMMAND}} with args {{ARGS}}.
Variables
{{COMMAND}}— executable (inputcommand, required).{{ARGS}}— args array (optional).{{WAIT_MS}}— settle delay (optional).
vision.click_anywhere — find + click a target by description
Template
Use helmdeck__vision-click-anywhere with goal: {{GOAL}}.
Variables
{{GOAL}}— what to click, in plain English (inputgoal, required).{{MODEL}}— vision model (required; defaultopenrouter/auto).
vision.extract_visible_text — transcribe the screen
Template
Use helmdeck__vision-extract-visible-text to read everything on the screen.
Variables
{{MODEL}}— vision model (inputmodel, required; defaultopenrouter/auto).
vision.fill_form_by_label — fill a form by matching labels
Template
Use helmdeck__vision-fill-form-by-label with fields: {{FIELDS}}.
Variables
{{FIELDS}}—{label: value}map (inputfields, required).{{MODEL}}— vision model (required; defaultopenrouter/auto).
Language
python.run — run Python in a container
Template
Use helmdeck__python-run to run this Python: {{CODE}}.
Variables
{{CODE}}— Python to execute (inputcode; or pass acommandarray).{{STDIN}}/{{CWD}}— optional.
node.run — run Node.js in a container
Template
Use helmdeck__node-run to run this Node.js: {{CODE}}.
Variables
{{CODE}}— JS to execute (inputcode; or pass acommandarray).{{STDIN}}/{{CWD}}— optional.