Whiteboard to Infographic
Turn a messy hand-drawn capture into a clean, branded one-page infographic —
delivered as a single editable PowerPoint slide — that a consultant can put
in front of a client. The hard, non-delegable work is reading the handwriting
correctly and choosing the right structure; the styling and layout are codified
here so every output looks consistent.
The discipline (do this in order — do not skip ahead to styling)
This is structure-first. Producing a polished deliverable from a misread sketch
is the main failure mode, so confirm interpretation before building.
Read the source carefully. The photo is the source of truth. Zoom and
crop aggressively — examine the image, then crop it into regions and
re-examine at 2–3x so the handwriting is legible. Transcribe every box,
label, arrow, annotation, and margin note. Do not silently drop anything you
can't read — list it as a question.
Confirm interpretation and lock structure. Before building the slide,
send the user a compact transcription: the nodes/steps, the
connections/flows, and any side notes or requirements. Explicitly flag:
ambiguous words, unexpanded acronyms, and anything you're inferring. Ask the
questions that change the build (see "Questions to ask"). Wait for
confirmation. Build only what's on the board — never invent steps, fields, or
connections to make it look complete. If a relationship isn't drawn, don't
draw it.
Get the color palette. The palette is client-specific and is NOT baked
into this skill. If the user gave colors in the prompt or context, use them.
Otherwise, ask before building. You need hex values for these roles:
- ink — primary structure, dark text, node borders (e.g. a deep navy)
- secondary — sub-heads, connectors, region boundaries (e.g. steel blue)
- accent — sequence numbers, bullets, flags, emphasis (e.g. a signal red)
- card — light fill for callout cards / cluster fills (e.g. pale blue-gray)
- accent-tint — light wash behind accent-flagged items (e.g. pale red)
Derive sensible text tints (e.g. a muted slate for sub-captions) from these.
Offer to suggest a palette if the user has no preference, but don't assume.
Choose the archetype (state your choice and why):
- Process rail — the sketch is a sequence/flow with a clear order
(step 1 → step 2 → …). Read
references/process-rail.md.
- Network map — the sketch is locations/systems/actors connected by
flows, with no single linear order (a topology). Read
references/network-map.md.
If it's genuinely both, lead with the dominant reading and ask.
Build, verify, iterate. Build the slide with python-pptx per the chosen
archetype's reference. The layout is deterministic — code decides every
coordinate — so verify structurally rather than by eye: every step/node
present, columns/nodes evenly spaced, no shape overlapping another, every
label inside its box, drop-lines landing on their cards, edges approaching
nodes straight-on and not crossing through them. If your runtime can
rasterize the slide, optionally do a visual critique pass; if it can't, lean
entirely on the computed geometry. Fix in code and rebuild. Faithfulness
beats polish — never add a step, field, or connection that wasn't on the
board.
Building the slide (native python-pptx)
Build the infographic as a single editable slide with python-pptx, drawn
natively as shapes — no HTML, no image rendering, no external render step. It
runs inside the agent's Python container and returns a .pptx the client can
open and edit.
The layout is deterministic — code decides every coordinate. Design on a
fixed 1600×1000 grid mapped to a 13.333in slide (see each reference for the
PX() scale helper), and compute every position from the step/node count and
the canvas so the slide is correct by construction. Use the house-style system
fonts (Arial Narrow for condensed display, Arial for body) so nothing
depends on font downloads. Turn off the default autoshape shadow
(shape.shadow.inherit = False) for the flat house look. Save the deck and
return the single .pptx as the deliverable — no PNG/PDF/HTML side-artifacts.
Revisions: never reuse a filename. When the user asks for changes to an
infographic you have already delivered, build the revision as a new file with
a new name — infographic-v1.pptx, infographic-v2.pptx, infographic-v3.pptx,
and so on — incrementing on every subsequent revision for the life of the
conversation. Do not overwrite, re-save, or re-deliver an existing filename: a
reused name can prevent the updated file from reaching the user, who then
receives the earlier version or no file at all. One revision, one new filename,
every time.
Conventions (shared by both archetypes)
These are the house style. Keep them consistent across a client engagement.
- Header band: condensed uppercase title + a thin small-caps subtitle, a
full-width accent rule under it, and an optional right-aligned scope/context
note. A short eyebrow label (e.g. "THE PROCESS", "SUPPLY NETWORK") sits above
each major band.
- Accent flags encode meaning — don't decorate with them:
- A solid accent "GAP" pill marks a gap between the standard system and the
client's process (a fit/gap item). Use only where the user confirms a gap.
- A hollow "need details" tag marks an open item to define in follow-up.
- Include a one-line legend explaining any flag you use.
- Faithfulness: behaviors/notes with no home in the visual go in a list, not
invented shapes. Keep the client's exact terms and acronyms; don't expand or
rename acronyms the client already knows unless asked.
- Restraint: spend boldness on one signature device (the numbered chevron
rail, or the region cluster), keep everything else quiet. Whitespace where the
source is sparse is honest — don't pad it with invented detail.
Questions to ask before building
Ask only the ones that actually change the build; don't interrogate.
- Unreadable words / unexpanded acronyms (transcribe what you can, ask the rest).
- Archetype if ambiguous (rail vs. map).
- For a rail: is there a meaningful sequence number/priority on any step? What
goes in the bottom band — principles, requirements, or nothing?
- For a map: which connections must be explicit vs. summarized in a legend;
what each node/edge label means; does anything apply across all nodes.
- Whether a "detailed" companion version is wanted (dense capture of every
margin note) in addition to a clean executive version.
- The color palette, if not already provided.
References
references/process-rail.md — linear flow archetype: deterministic banded
layout (header, numbered chevron rail with drop-lines, callout cards,
principles/requirements bottom band), as a python-pptx skeleton with color
placeholders.
references/network-map.md — topology archetype: node/edge/cluster helpers
(labeled edges with arrowheads, dashed region clusters, edge-label chips, flow
legend, requirements band), as a python-pptx skeleton with color
placeholders.
Run this — do not improvise
This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as whiteboard_to_infographic_agent.py and embedded as the fenced Python below (sha256 caa451059d974d14…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to whiteboard_to_infographic_agent.py first:
python3 whiteboard_to_infographic_agent.py '{"key": "value"}' # arguments as one JSON object
echo '{"key": "value"}' | python3 whiteboard_to_infographic_agent.py # or on stdin
python3 whiteboard_to_infographic_agent.py --tool # emit the JSON tool contract
Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns steps, execute those steps in order exactly as returned; if it returns instructions, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent.
"""WhiteboardToInfographic -- Convert a hand-drawn whiteboard photo (or sketched process/diagram) from a discovery or working session into a polished, client-ready infographic as an editable PowerPoint slide (.pptx). Use this whenever someone uploads or references a photo of a whiteboard, a hand sketch of a process or system, or session-capture notes and wants it "cleaned up", "made presentable", "turned into a diagram/infographic", "converted for the client", or similar — even if they don't say the word "infographic". Covers two layout archetypes — linear process flows (left-to-right step rails) and network/topology maps (locations, systems, or actors connected by labeled flows). Built for consulting/ERP discovery capture but works for any whiteboard-to-deliverable conversion. Do NOT use for charts/graphs from numeric data, for editing an existing polished design, or for generating diagrams with no source sketch.
Generated by the rapp skill from whiteboard-to-infographic. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""
import json
import re
import sys
try:
from agents.basic_agent import BasicAgent
except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.
class BasicAgent: # noqa: D101 - minimal stand-in, same contract
def __init__(self, name=None, metadata=None):
if name:
self.name = name
if metadata:
self.metadata = metadata
def perform(self, **kwargs):
return "Not implemented."
def system_context(self):
return None
def to_tool(self):
return {"type": "function", "function": {
"name": self.name,
"description": self.metadata.get("description", ""),
"parameters": self.metadata.get("parameters", {})}}
# The procedural layer, verbatim from the source capability.
INSTRUCTIONS = '# Whiteboard to Infographic\n\nTurn a messy hand-drawn capture into a clean, branded one-page infographic —\ndelivered as a single **editable PowerPoint slide** — that a consultant can put\nin front of a client. The hard, non-delegable work is reading the handwriting\ncorrectly and choosing the right structure; the styling and layout are codified\nhere so every output looks consistent.\n\n## The discipline (do this in order — do not skip ahead to styling)\n\nThis is structure-first. Producing a polished deliverable from a misread sketch\nis the main failure mode, so confirm interpretation **before** building.\n\n1. **Read the source carefully.** The photo is the source of truth. Zoom and\n crop aggressively — examine the image, then crop it into regions and\n re-examine at 2–3x so the handwriting is legible. Transcribe every box,\n label, arrow, annotation, and margin note. Do not silently drop anything you\n can't read — list it as a question.\n\n2. **Confirm interpretation and lock structure.** Before building the slide,\n send the user a compact transcription: the nodes/steps, the\n connections/flows, and any side notes or requirements. Explicitly flag:\n ambiguous words, unexpanded acronyms, and anything you're inferring. Ask the\n questions that change the build (see "Questions to ask"). Wait for\n confirmation. Build only what's on the board — never invent steps, fields, or\n connections to make it look complete. If a relationship isn't drawn, don't\n draw it.\n\n3. **Get the color palette.** The palette is client-specific and is NOT baked\n into this skill. If the user gave colors in the prompt or context, use them.\n Otherwise, ask before building. You need hex values for these roles:\n - **ink** — primary structure, dark text, node borders (e.g. a deep navy)\n - **secondary** — sub-heads, connectors, region boundaries (e.g. steel blue)\n - **accent** — sequence numbers, bullets, flags, emphasis (e.g. a signal red)\n - **card** — light fill for callout cards / cluster fills (e.g. pale blue-gray)\n - **accent-tint** — light wash behind accent-flagged items (e.g. pale red)\n Derive sensible text tints (e.g. a muted slate for sub-captions) from these.\n Offer to suggest a palette if the user has no preference, but don't assume.\n\n4. **Choose the archetype** (state your choice and why):\n - **Process rail** — the sketch is a sequence/flow with a clear order\n (step 1 → step 2 → …). Read `references/process-rail.md`.\n - **Network map** — the sketch is locations/systems/actors connected by\n flows, with no single linear order (a topology). Read\n `references/network-map.md`.\n If it's genuinely both, lead with the dominant reading and ask.\n\n5. **Build, verify, iterate.** Build the slide with `python-pptx` per the chosen\n archetype's reference. The layout is deterministic — **code decides every\n coordinate** — so verify structurally rather than by eye: every step/node\n present, columns/nodes evenly spaced, no shape overlapping another, every\n label inside its box, drop-lines landing on their cards, edges approaching\n nodes straight-on and not crossing through them. If your runtime can\n rasterize the slide, optionally do a visual critique pass; if it can't, lean\n entirely on the computed geometry. Fix in code and rebuild. Faithfulness \n beats polish — never add a step, field, or connection that wasn't on the \n board.\n\n## Building the slide (native python-pptx)\n\nBuild the infographic as a **single editable slide** with `python-pptx`, drawn\nnatively as shapes — no HTML, no image rendering, no external render step. It\nruns inside the agent's Python container and returns a `.pptx` the client can\nopen and edit.\n\nThe layout is **deterministic — code decides every coordinate.** Design on a\nfixed 1600×1000 grid mapped to a 13.333in slide (see each reference for the\n`PX()` scale helper), and compute every position from the step/node count and\nthe canvas so the slide is correct by construction. Use the house-style system\nfonts (`Arial Narrow` for condensed display, `Arial` for body) so nothing\ndepends on font downloads. Turn off the default autoshape shadow\n(`shape.shadow.inherit = False`) for the flat house look. Save the deck and\nreturn the single `.pptx` as the deliverable — no PNG/PDF/HTML side-artifacts.\n\n**Revisions: never reuse a filename.** When the user asks for changes to an\ninfographic you have already delivered, build the revision as a **new file with\na new name** — `infographic-v1.pptx`, `infographic-v2.pptx`, `infographic-v3.pptx`,\nand so on — incrementing on every subsequent revision for the life of the\nconversation. Do not overwrite, re-save, or re-deliver an existing filename: a\nreused name can prevent the updated file from reaching the user, who then\nreceives the earlier version or no file at all. One revision, one new filename,\nevery time.\n\n## Conventions (shared by both archetypes)\n\nThese are the house style. Keep them consistent across a client engagement.\n\n- **Header band**: condensed uppercase title + a thin small-caps subtitle, a\n full-width accent rule under it, and an optional right-aligned scope/context\n note. A short eyebrow label (e.g. "THE PROCESS", "SUPPLY NETWORK") sits above\n each major band.\n- **Accent flags** encode meaning — don't decorate with them:\n - A solid **accent "GAP" pill** marks a gap between the standard system and the\n client's process (a fit/gap item). Use only where the user confirms a gap.\n - A hollow **"need details" tag** marks an open item to define in follow-up.\n - Include a one-line legend explaining any flag you use.\n- **Faithfulness**: behaviors/notes with no home in the visual go in a list, not\n invented shapes. Keep the client's exact terms and acronyms; don't expand or\n rename acronyms the client already knows unless asked.\n- **Restraint**: spend boldness on one signature device (the numbered chevron\n rail, or the region cluster), keep everything else quiet. Whitespace where the\n source is sparse is honest — don't pad it with invented detail.\n\n## Questions to ask before building\n\nAsk only the ones that actually change the build; don't interrogate.\n- Unreadable words / unexpanded acronyms (transcribe what you can, ask the rest).\n- Archetype if ambiguous (rail vs. map).\n- For a rail: is there a meaningful sequence number/priority on any step? What\n goes in the bottom band — principles, requirements, or nothing?\n- For a map: which connections must be explicit vs. summarized in a legend;\n what each node/edge label means; does anything apply across all nodes.\n- Whether a "detailed" companion version is wanted (dense capture of every\n margin note) in addition to a clean executive version.\n- The color palette, if not already provided.\n\n## References\n\n- `references/process-rail.md` — linear flow archetype: deterministic banded\n layout (header, numbered chevron rail with drop-lines, callout cards,\n principles/requirements bottom band), as a `python-pptx` skeleton with color\n placeholders.\n- `references/network-map.md` — topology archetype: node/edge/cluster helpers\n (labeled edges with arrowheads, dashed region clusters, edge-label chips, flow\n legend, requirements band), as a `python-pptx` skeleton with color\n placeholders.'
# Ordered commands lifted verbatim from the capability's own documentation.
STEPS = []
class WhiteboardToInfographicAgent(BasicAgent):
def __init__(self):
self.name = 'WhiteboardToInfographic'
self.metadata = {
"name": "WhiteboardToInfographic",
"description": "Convert a hand-drawn whiteboard photo (or sketched process/diagram) from a discovery or working session into a polished, client-ready infographic as an editable PowerPoint slide (.pptx). Use this whenever someone uploads or references a photo of a whiteboard, a hand sketch of a process or system, or session-capture notes and wants it \"cleaned up\", \"made presentable\", \"turned into a diagram/infographic\", \"converted for the client\", or similar \u2014 even if they don't say the word \"infographic\". Covers two layout archetypes \u2014 linear process flows (left-to-right step rails) and network/topology maps (locations, systems, or actors connected by labeled flows). Built for consulting/ERP discovery capture but works for any whiteboard-to-deliverable conversion. Do NOT use for charts/graphs from numeric data, for editing an existing polished design, or for generating diagrams with no source sketch.",
"parameters": {
"type": "object",
"properties": {},
"required": []
}
}
super().__init__(name=self.name, metadata=self.metadata)
def perform(self, **kwargs): # toaster:generated-perform
return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,
"inputs": kwargs,
"note": "Prose-only capability: follow INSTRUCTIONS "
"with the given inputs."}, indent=2)
if __name__ == "__main__":
# echo '{"arg": "value"}' | python3 whiteboard_to_infographic_agent.py
# python3 whiteboard_to_infographic_agent.py '{"arg": "value"}'
# python3 whiteboard_to_infographic_agent.py --tool # emit the JSON tool contract
_a = sys.argv[1:]
if _a and _a[0] == "--tool":
print(json.dumps(WhiteboardToInfographicAgent().to_tool(), indent=2))
else:
_raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")
print(WhiteboardToInfographicAgent().perform(**json.loads(_raw)))
# rci-capsule:v1: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
1---2name: whiteboard-to-infographic3description: Convert a hand-drawn whiteboard photo (or sketched process/diagram) from a discovery or working session into a polished, client-ready infographic as an editable PowerPoint slide (.pptx). Use this whenever someone uploads or references a photo of a whiteboard, a hand sketch of a process or system, or session-capture notes and wants it "cleaned up", "made presentable", "turned into a diagram/infographic", "converted for the client", or similar — even if they don't say the word "infographic". Covers two layout archetypes — linear process flows (left-to-right step rails) and network/topology maps (locations, systems, or actors connected by labeled flows). Built for consulting/ERP discovery capture but works for any whiteboard-to-deliverable conversion. Do NOT use for charts/graphs from numeric data, for editing an existing polished design, or for generating diagrams with no source sketch.4---56# Whiteboard to Infographic78Turn a messy hand-drawn capture into a clean, branded one-page infographic —9delivered as a single **editable PowerPoint slide** — that a consultant can put10in front of a client. The hard, non-delegable work is reading the handwriting11correctly and choosing the right structure; the styling and layout are codified12here so every output looks consistent.1314## The discipline (do this in order — do not skip ahead to styling)1516This is structure-first. Producing a polished deliverable from a misread sketch17is the main failure mode, so confirm interpretation **before** building.18191. **Read the source carefully.** The photo is the source of truth. Zoom and20 crop aggressively — examine the image, then crop it into regions and21 re-examine at 2–3x so the handwriting is legible. Transcribe every box,22 label, arrow, annotation, and margin note. Do not silently drop anything you23 can't read — list it as a question.24252. **Confirm interpretation and lock structure.** Before building the slide,26 send the user a compact transcription: the nodes/steps, the27 connections/flows, and any side notes or requirements. Explicitly flag:28 ambiguous words, unexpanded acronyms, and anything you're inferring. Ask the29 questions that change the build (see "Questions to ask"). Wait for30 confirmation. Build only what's on the board — never invent steps, fields, or31 connections to make it look complete. If a relationship isn't drawn, don't32 draw it.33343. **Get the color palette.** The palette is client-specific and is NOT baked35 into this skill. If the user gave colors in the prompt or context, use them.36 Otherwise, ask before building. You need hex values for these roles:37 - **ink** — primary structure, dark text, node borders (e.g. a deep navy)38 - **secondary** — sub-heads, connectors, region boundaries (e.g. steel blue)39 - **accent** — sequence numbers, bullets, flags, emphasis (e.g. a signal red)40 - **card** — light fill for callout cards / cluster fills (e.g. pale blue-gray)41 - **accent-tint** — light wash behind accent-flagged items (e.g. pale red)42 Derive sensible text tints (e.g. a muted slate for sub-captions) from these.43 Offer to suggest a palette if the user has no preference, but don't assume.44454. **Choose the archetype** (state your choice and why):46 - **Process rail** — the sketch is a sequence/flow with a clear order47 (step 1 → step 2 → …). Read `references/process-rail.md`.48 - **Network map** — the sketch is locations/systems/actors connected by49 flows, with no single linear order (a topology). Read50 `references/network-map.md`.51 If it's genuinely both, lead with the dominant reading and ask.52535. **Build, verify, iterate.** Build the slide with `python-pptx` per the chosen54 archetype's reference. The layout is deterministic — **code decides every55 coordinate** — so verify structurally rather than by eye: every step/node56 present, columns/nodes evenly spaced, no shape overlapping another, every57 label inside its box, drop-lines landing on their cards, edges approaching58 nodes straight-on and not crossing through them. If your runtime can59 rasterize the slide, optionally do a visual critique pass; if it can't, lean60 entirely on the computed geometry. Fix in code and rebuild. Faithfulness 61 beats polish — never add a step, field, or connection that wasn't on the 62 board.6364## Building the slide (native python-pptx)6566Build the infographic as a **single editable slide** with `python-pptx`, drawn67natively as shapes — no HTML, no image rendering, no external render step. It68runs inside the agent's Python container and returns a `.pptx` the client can69open and edit.7071The layout is **deterministic — code decides every coordinate.** Design on a72fixed 1600×1000 grid mapped to a 13.333in slide (see each reference for the73`PX()` scale helper), and compute every position from the step/node count and74the canvas so the slide is correct by construction. Use the house-style system75fonts (`Arial Narrow` for condensed display, `Arial` for body) so nothing76depends on font downloads. Turn off the default autoshape shadow77(`shape.shadow.inherit = False`) for the flat house look. Save the deck and78return the single `.pptx` as the deliverable — no PNG/PDF/HTML side-artifacts.7980**Revisions: never reuse a filename.** When the user asks for changes to an81infographic you have already delivered, build the revision as a **new file with82a new name** — `infographic-v1.pptx`, `infographic-v2.pptx`, `infographic-v3.pptx`,83and so on — incrementing on every subsequent revision for the life of the84conversation. Do not overwrite, re-save, or re-deliver an existing filename: a85reused name can prevent the updated file from reaching the user, who then86receives the earlier version or no file at all. One revision, one new filename,87every time.8889## Conventions (shared by both archetypes)9091These are the house style. Keep them consistent across a client engagement.9293- **Header band**: condensed uppercase title + a thin small-caps subtitle, a94 full-width accent rule under it, and an optional right-aligned scope/context95 note. A short eyebrow label (e.g. "THE PROCESS", "SUPPLY NETWORK") sits above96 each major band.97- **Accent flags** encode meaning — don't decorate with them:98 - A solid **accent "GAP" pill** marks a gap between the standard system and the99 client's process (a fit/gap item). Use only where the user confirms a gap.100 - A hollow **"need details" tag** marks an open item to define in follow-up.101 - Include a one-line legend explaining any flag you use.102- **Faithfulness**: behaviors/notes with no home in the visual go in a list, not103 invented shapes. Keep the client's exact terms and acronyms; don't expand or104 rename acronyms the client already knows unless asked.105- **Restraint**: spend boldness on one signature device (the numbered chevron106 rail, or the region cluster), keep everything else quiet. Whitespace where the107 source is sparse is honest — don't pad it with invented detail.108109## Questions to ask before building110111Ask only the ones that actually change the build; don't interrogate.112- Unreadable words / unexpanded acronyms (transcribe what you can, ask the rest).113- Archetype if ambiguous (rail vs. map).114- For a rail: is there a meaningful sequence number/priority on any step? What115 goes in the bottom band — principles, requirements, or nothing?116- For a map: which connections must be explicit vs. summarized in a legend;117 what each node/edge label means; does anything apply across all nodes.118- Whether a "detailed" companion version is wanted (dense capture of every119 margin note) in addition to a clean executive version.120- The color palette, if not already provided.121122## References123124- `references/process-rail.md` — linear flow archetype: deterministic banded125 layout (header, numbered chevron rail with drop-lines, callout cards,126 principles/requirements bottom band), as a `python-pptx` skeleton with color127 placeholders.128- `references/network-map.md` — topology archetype: node/edge/cluster helpers129 (labeled edges with arrowheads, dashed region clusters, edge-label chips, flow130 legend, requirements band), as a `python-pptx` skeleton with color131 placeholders.132133<!-- toaster:generated:begin -->134135## Run this — do not improvise136137This capability's deterministic implementation is a RAPP single-file agent, linked beside this file as `whiteboard_to_infographic_agent.py` and embedded as the fenced Python below (sha256 caa451059d974d14…; a byte-exact copy is also vaulted in the capsule comment at the end of this file). On a host with sandbox execution, run the linked file directly — if it is missing, write the fence contents verbatim to `whiteboard_to_infographic_agent.py` first:138139```bash140python3 whiteboard_to_infographic_agent.py '{"key": "value"}' # arguments as one JSON object141echo '{"key": "value"}' | python3 whiteboard_to_infographic_agent.py # or on stdin142python3 whiteboard_to_infographic_agent.py --tool # emit the JSON tool contract143```144145Treat stdout as a tool result. If it reports missing or unresolved inputs, stop and collect them. If it returns `steps`, execute those steps in order exactly as returned; if it returns `instructions`, follow them with the supplied inputs. Otherwise use the result verbatim. Do not invent behavior beyond that output. On a host without code execution, treat the Parameters schema and the code below as the exact specification and never paraphrase a step. Never edit inside the generated markers; a converter-equipped host can instead restore the original file checksum-verified with the installed `rapp-agent-converter/scripts/toast.py convert SKILL.md --to agent`.146147```python # rapp:deterministic148"""WhiteboardToInfographic -- Convert a hand-drawn whiteboard photo (or sketched process/diagram) from a discovery or working session into a polished, client-ready infographic as an editable PowerPoint slide (.pptx). Use this whenever someone uploads or references a photo of a whiteboard, a hand sketch of a process or system, or session-capture notes and wants it "cleaned up", "made presentable", "turned into a diagram/infographic", "converted for the client", or similar — even if they don't say the word "infographic". Covers two layout archetypes — linear process flows (left-to-right step rails) and network/topology maps (locations, systems, or actors connected by labeled flows). Built for consulting/ERP discovery capture but works for any whiteboard-to-deliverable conversion. Do NOT use for charts/graphs from numeric data, for editing an existing polished design, or for generating diagrams with no source sketch.149150Generated by the rapp skill from whiteboard-to-infographic. The RCI capsule at the bottom of this file carries the full original; `toast.py convert` restores it byte-exact."""151152import json153import re154import sys155156try:157 from agents.basic_agent import BasicAgent158except ImportError: # running OUTSIDE a brainstem -- stay executable anyway.159 class BasicAgent: # noqa: D101 - minimal stand-in, same contract160 def __init__(self, name=None, metadata=None):161 if name:162 self.name = name163 if metadata:164 self.metadata = metadata165166 def perform(self, **kwargs):167 return "Not implemented."168169 def system_context(self):170 return None171172 def to_tool(self):173 return {"type": "function", "function": {174 "name": self.name,175 "description": self.metadata.get("description", ""),176 "parameters": self.metadata.get("parameters", {})}}177178# The procedural layer, verbatim from the source capability.179INSTRUCTIONS = '# Whiteboard to Infographic\n\nTurn a messy hand-drawn capture into a clean, branded one-page infographic —\ndelivered as a single **editable PowerPoint slide** — that a consultant can put\nin front of a client. The hard, non-delegable work is reading the handwriting\ncorrectly and choosing the right structure; the styling and layout are codified\nhere so every output looks consistent.\n\n## The discipline (do this in order — do not skip ahead to styling)\n\nThis is structure-first. Producing a polished deliverable from a misread sketch\nis the main failure mode, so confirm interpretation **before** building.\n\n1. **Read the source carefully.** The photo is the source of truth. Zoom and\n crop aggressively — examine the image, then crop it into regions and\n re-examine at 2–3x so the handwriting is legible. Transcribe every box,\n label, arrow, annotation, and margin note. Do not silently drop anything you\n can't read — list it as a question.\n\n2. **Confirm interpretation and lock structure.** Before building the slide,\n send the user a compact transcription: the nodes/steps, the\n connections/flows, and any side notes or requirements. Explicitly flag:\n ambiguous words, unexpanded acronyms, and anything you're inferring. Ask the\n questions that change the build (see "Questions to ask"). Wait for\n confirmation. Build only what's on the board — never invent steps, fields, or\n connections to make it look complete. If a relationship isn't drawn, don't\n draw it.\n\n3. **Get the color palette.** The palette is client-specific and is NOT baked\n into this skill. If the user gave colors in the prompt or context, use them.\n Otherwise, ask before building. You need hex values for these roles:\n - **ink** — primary structure, dark text, node borders (e.g. a deep navy)\n - **secondary** — sub-heads, connectors, region boundaries (e.g. steel blue)\n - **accent** — sequence numbers, bullets, flags, emphasis (e.g. a signal red)\n - **card** — light fill for callout cards / cluster fills (e.g. pale blue-gray)\n - **accent-tint** — light wash behind accent-flagged items (e.g. pale red)\n Derive sensible text tints (e.g. a muted slate for sub-captions) from these.\n Offer to suggest a palette if the user has no preference, but don't assume.\n\n4. **Choose the archetype** (state your choice and why):\n - **Process rail** — the sketch is a sequence/flow with a clear order\n (step 1 → step 2 → …). Read `references/process-rail.md`.\n - **Network map** — the sketch is locations/systems/actors connected by\n flows, with no single linear order (a topology). Read\n `references/network-map.md`.\n If it's genuinely both, lead with the dominant reading and ask.\n\n5. **Build, verify, iterate.** Build the slide with `python-pptx` per the chosen\n archetype's reference. The layout is deterministic — **code decides every\n coordinate** — so verify structurally rather than by eye: every step/node\n present, columns/nodes evenly spaced, no shape overlapping another, every\n label inside its box, drop-lines landing on their cards, edges approaching\n nodes straight-on and not crossing through them. If your runtime can\n rasterize the slide, optionally do a visual critique pass; if it can't, lean\n entirely on the computed geometry. Fix in code and rebuild. Faithfulness \n beats polish — never add a step, field, or connection that wasn't on the \n board.\n\n## Building the slide (native python-pptx)\n\nBuild the infographic as a **single editable slide** with `python-pptx`, drawn\nnatively as shapes — no HTML, no image rendering, no external render step. It\nruns inside the agent's Python container and returns a `.pptx` the client can\nopen and edit.\n\nThe layout is **deterministic — code decides every coordinate.** Design on a\nfixed 1600×1000 grid mapped to a 13.333in slide (see each reference for the\n`PX()` scale helper), and compute every position from the step/node count and\nthe canvas so the slide is correct by construction. Use the house-style system\nfonts (`Arial Narrow` for condensed display, `Arial` for body) so nothing\ndepends on font downloads. Turn off the default autoshape shadow\n(`shape.shadow.inherit = False`) for the flat house look. Save the deck and\nreturn the single `.pptx` as the deliverable — no PNG/PDF/HTML side-artifacts.\n\n**Revisions: never reuse a filename.** When the user asks for changes to an\ninfographic you have already delivered, build the revision as a **new file with\na new name** — `infographic-v1.pptx`, `infographic-v2.pptx`, `infographic-v3.pptx`,\nand so on — incrementing on every subsequent revision for the life of the\nconversation. Do not overwrite, re-save, or re-deliver an existing filename: a\nreused name can prevent the updated file from reaching the user, who then\nreceives the earlier version or no file at all. One revision, one new filename,\nevery time.\n\n## Conventions (shared by both archetypes)\n\nThese are the house style. Keep them consistent across a client engagement.\n\n- **Header band**: condensed uppercase title + a thin small-caps subtitle, a\n full-width accent rule under it, and an optional right-aligned scope/context\n note. A short eyebrow label (e.g. "THE PROCESS", "SUPPLY NETWORK") sits above\n each major band.\n- **Accent flags** encode meaning — don't decorate with them:\n - A solid **accent "GAP" pill** marks a gap between the standard system and the\n client's process (a fit/gap item). Use only where the user confirms a gap.\n - A hollow **"need details" tag** marks an open item to define in follow-up.\n - Include a one-line legend explaining any flag you use.\n- **Faithfulness**: behaviors/notes with no home in the visual go in a list, not\n invented shapes. Keep the client's exact terms and acronyms; don't expand or\n rename acronyms the client already knows unless asked.\n- **Restraint**: spend boldness on one signature device (the numbered chevron\n rail, or the region cluster), keep everything else quiet. Whitespace where the\n source is sparse is honest — don't pad it with invented detail.\n\n## Questions to ask before building\n\nAsk only the ones that actually change the build; don't interrogate.\n- Unreadable words / unexpanded acronyms (transcribe what you can, ask the rest).\n- Archetype if ambiguous (rail vs. map).\n- For a rail: is there a meaningful sequence number/priority on any step? What\n goes in the bottom band — principles, requirements, or nothing?\n- For a map: which connections must be explicit vs. summarized in a legend;\n what each node/edge label means; does anything apply across all nodes.\n- Whether a "detailed" companion version is wanted (dense capture of every\n margin note) in addition to a clean executive version.\n- The color palette, if not already provided.\n\n## References\n\n- `references/process-rail.md` — linear flow archetype: deterministic banded\n layout (header, numbered chevron rail with drop-lines, callout cards,\n principles/requirements bottom band), as a `python-pptx` skeleton with color\n placeholders.\n- `references/network-map.md` — topology archetype: node/edge/cluster helpers\n (labeled edges with arrowheads, dashed region clusters, edge-label chips, flow\n legend, requirements band), as a `python-pptx` skeleton with color\n placeholders.'180181# Ordered commands lifted verbatim from the capability's own documentation.182STEPS = []183184185class WhiteboardToInfographicAgent(BasicAgent):186 def __init__(self):187 self.name = 'WhiteboardToInfographic'188 self.metadata = {189 "name": "WhiteboardToInfographic",190 "description": "Convert a hand-drawn whiteboard photo (or sketched process/diagram) from a discovery or working session into a polished, client-ready infographic as an editable PowerPoint slide (.pptx). Use this whenever someone uploads or references a photo of a whiteboard, a hand sketch of a process or system, or session-capture notes and wants it \"cleaned up\", \"made presentable\", \"turned into a diagram/infographic\", \"converted for the client\", or similar \u2014 even if they don't say the word \"infographic\". Covers two layout archetypes \u2014 linear process flows (left-to-right step rails) and network/topology maps (locations, systems, or actors connected by labeled flows). Built for consulting/ERP discovery capture but works for any whiteboard-to-deliverable conversion. Do NOT use for charts/graphs from numeric data, for editing an existing polished design, or for generating diagrams with no source sketch.",191 "parameters": {192 "type": "object",193 "properties": {},194 "required": []195 }196 }197 super().__init__(name=self.name, metadata=self.metadata)198199 def perform(self, **kwargs): # toaster:generated-perform200 return json.dumps({"status": "ok", "instructions": INSTRUCTIONS,201 "inputs": kwargs,202 "note": "Prose-only capability: follow INSTRUCTIONS "203 "with the given inputs."}, indent=2)204205if __name__ == "__main__":206 # echo '{"arg": "value"}' | python3 whiteboard_to_infographic_agent.py207 # python3 whiteboard_to_infographic_agent.py '{"arg": "value"}'208 # python3 whiteboard_to_infographic_agent.py --tool # emit the JSON tool contract209 _a = sys.argv[1:]210 if _a and _a[0] == "--tool":211 print(json.dumps(WhiteboardToInfographicAgent().to_tool(), indent=2))212 else:213 _raw = _a[0] if _a else (sys.stdin.read().strip() or "{}")214 print(WhiteboardToInfographicAgent().perform(**json.loads(_raw)))215216# rci-capsule:v1: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217```218219<!-- toaster:generated:end -->220221<!-- rci-capsule:v1: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…(truncated)