vectorcraft
Skill36 starsChanged 9 days agoMITView on GitHub
Vector illustration with VectorCraft (Illustrator-style): logos, icons, posters, flyers, badges, infographics, charts, and SVG / PDF / EPS / AI / DXF artwork. Draw shapes and Bézier paths, paint, set type, apply live effects, export.
1 other project uses a version of this.
Adopted by
Most recently taken up by
- midasmatterhorn/artcraft-skillstheir own version, first seen Oct 17, 2026
Other versions1 project uses a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 1
- midasmatterhorn/artcraft-skills★ 66same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository18 other files it gives its agents.
- cadcraftSkill
- craft-anythingSkill
- deckcraftSkill
- designcraftSkill
- effectcraftSkill
- figcraftSkill
- filmcraftSkill
- gridcraftSkill
- lightcraftSkill
- materialcraftSkill
- pdfcraftSkill
- photocraftSkill
- solidcraftSkill
- soundcraftSkill
- storytold-installSkill
- storytoldSkill
- texturecraftSkill
- wordcraftSkill
The file
We split this skill into the rules it gives an agent
11 rules. About 0 are common, 1 is distinctive, and 10 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
10
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Use it for resolution-independent artwork:
- Very specific: line 44
If tools named mcp_vectorcraft_* are available, use them.
- Very specific: line 55
Pitfalls: if every tool says unknown command.
- Very specific: line 134
Use text.setRangeStyle {id, start, end, …} for part of a story.
- Very specific: line 138
Use area type (width/height) for paragraphs.
- Very specific: line 146
Set up: use the open document (doc_inspect), or command_run file.new {width, height}.
- Very specific: line 149
Look: Call render_preview after each major step and actually check the image: alignment, overflow, contrast, spacing.
- Very specific: line 317
Paths: use absolute paths for save_file, export and open_file.
- Very specific: line 327
Use {none: true}, or set_paint {stroke: "none"}.
- Very specific: line 336
Don't invent command ids: an unknown one fails with `command_run: unknown command nope.cmd .
- Very specific: line 344
Every export reply should list the right path, format and bytes > 0.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
VectorCraft
VectorCraft is a free, open-source clean-room take on Adobe Illustrator (storytold Crafting Apps). An
agent drives it through an MCP server (vectorcraft-cli mcp) or one-shot CLI commands. Everything it
makes stays editable: live shapes, live effects and live type. This skill is tested against VectorCraft 0.21.0.
When to Use
Use it for resolution-independent artwork:
- logos, icons and icon sets, badges, stickers, wordmarks
- posters, flyers, cards, simple single-page layouts, social graphics
- infographics, diagrams and charts as vector art
- opening, fixing or converting SVG, PDF,
.ai, EPS, DXF, EMF/WMF, Affinity and PSD files, and image tracing (raster → vector)
Pick a different Crafting App when:
| The job is… | Use |
| Retouching photos, compositing pixels, painting | photocraft |
| Developing RAW photos or batch photo edits | lightcraft |
| Multi-page documents: brochures, magazines, books | designcraft |
| Slides | deckcraft |
| Technical drawings to scale, floor plans | cadcraft |
| Editing pages, forms or annotations of an existing PDF | pdfcraft |
| Animation or motion graphics | effectcraft |
Setup
- If tools named
mcp_vectorcraft_*are available, use them. This is the preferred way. - Otherwise check for the CLI with
vectorcraft-cli --version. If it's missing, load thestorytold-installskill and run itssetup vectorcraft. Then ask the user to start a new session or run/reload-mcpso the MCP tools appear. - Until the MCP tools appear, use the CLI one-shots (see CLI below) or call the MCP server from a script.
storytold-install registers the server as vectorcraft-cli mcp --headless: a full in-process engine with a
CPU renderer. (Bare vectorcraft-cli mcp first tries a running app on 127.0.0.1:7979.) Everything works headless except the UI tools (ui_inspect,
ui_screenshot, inspect_ui, type_text, open_panel, screenshot {window:true}). For the user to
watch live, they run vectorcraft --control 7979 first. Other Crafting Apps use port 7979 too: see
Pitfalls if every tool says unknown command. Flags: --headless never connects, --connect ADDR
always does, and --automation-read-root DIR / --automation-write-root DIR confine file access to DIR
(they imply --headless; each may be given more than once). Without the root flags any absolute path works.
Mental Model
- Coordinates are points (1/72 in). y points down. The origin is the first artboard's top-left.
A new document is US Letter, 612 × 792. For another size, run
command_run file.new {width, height}. - Every edit is a command (911 of them). The drawing tools cover the common ones. Anything else goes
through
command_run {id, params}, orcommand_batch {steps}for several in one call. Find commands withcommand_list {filter: "align", brief: true}, or grepreferences/commands.md. - New objects become the selection, and most commands act on the selection or on explicit
ids(a command that works on the selection selects theidsfirst). Every tool that creates something returns itsid, so keep those ids. - Everything is undoable (
undo/redo).doc_inspectshows the history. - Add-ons are built-in command families under
addon.*(Object › Plug-ins): parametric shapes, arrange, artwork cleanup, colour effects, path precision tools, a smart pen. They are ordinary commands; no install.
Tools (Hermes names them mcp_vectorcraft_<tool>)
Common command tools (the same names across the Crafting Apps):
| Tool | Use it for |
command_list {filter?, menu?, brief?, enabled_only?} | Find command ids and their params. menu: "Object > Path" lists one menu; brief: true leaves out the params (the bulk of the catalog). query is the same as filter |
command_run {id, params?} | Run any command. Errors come back as isError with the reason |
command_batch {steps:[{id, params?}], atomic?, label?, stop_on_error?} | Several commands in one call (at most 256 steps). A step's id can also be draw_shape or draw_path, with the tool's arguments as params; the reply's created lists their ids. A param string "$N.path" / "$last.path" takes a value from an earlier step's result ("$0.id", "$2.matches.0.id"). atomic: true makes the batch one undo step |
doc_inspect {depth?, childLimit?, ids?, kind?, limit?, offset?} | Artboards, layer tree with ids, bounds and paint, selection, history. Opacity reads back as opacityPct (0–100, what the tools take) and opacity (0–1). On big files: depth: 0, ids: [..] for just those nodes, kind: "Group" for every node of that Layers-panel kind (Rectangle, Ellipse, Path, Type…; an unknown kind returns no nodes), limit/offset to page |
render_preview {artboard?, max_side?, traceViews?} | PNG of an artboard (default 0, at most 1024 px; never upscaled) so you can look at it. traceViews: true draws Image Trace objects in their trace view (outlines, source) |
ui_inspect, ui_screenshot, answer_dialog {set, action} | The live desktop app only. answer_dialog fills and confirms or cancels the open dialog |
Drawing and file tools:
| Tool | Use it for |
draw_shape | rectangle/ellipse (x,y,width,height, rectangle radius), polygon (cx,cy,radius,sides), star (cx,cy,radius1,radius2,points), line (x1,y1,x2,y2), plus fill, stroke, strokeWidth, rotation, and (both draw tools) dash: [12, 6], cap, join, opacity (%), name, effects: [{effect, params}] |
draw_path | Any curve: SVG d ("M0 0 C …Z") or points ([x,y] or {x,y,in,out} Bézier handles), closed |
set_paint | Fill, stroke and weight on the selection or ids (also becomes the default for new art). Replies objects: N; with nothing selected it only sets the new-art paint and says so in note |
add_text | Point type at (x, y): y is the baseline, x the left edge (with justify: "center" the line's centre, "right" its end). Area type with width/height, plus fit: "autoHeight" (frame grows) or "shrinkText". path + mode puts type in or on a path. Also font, size, color, vertical: true. Returns overflow: true when the text doesn't fit |
apply_effect | Live effects. Call it with no effect to get the catalog. See references/effects.md |
pathfinder {operation} | unite, minusFront, intersect, exclude, divide, trim, merge, crop, outline, minusBack (destructive) |
transform | dx/dy, rotate (degrees, counter-clockwise), scale/scaleX/scaleY (%), reflect, shear, origin, copy |
create_graph | Column, bar, line, pie and other charts from csv (",Series\nA,1\nB,2") or series/categories/rows |
text_wrap | Make objects push area type around them |
screenshot {scale?, path?, artboard?} | Like render_preview, sized by pixels per point, and can write the PNG to path |
open_file / save_file / export | Open, save natively, export (see Formats). save_file also takes compress, version (1–4, for older VectorCraft) and preview (embed a PNG) for native files |
undo / redo | Edit history |
select_tool, pointer_gesture, press_key, invoke_menu | Drive tools like a mouse and keyboard would (rarely needed) |
The older names list_commands, run_command {command, params}, inspect_document and inspect_ui
still work and do the same as command_list, command_run {id, params}, doc_inspect and ui_inspect.
Resources read one thing at a time: vectorcraft://object/{id}, vectorcraft://command/{id},
vectorcraft://effect/{id}, vectorcraft://swatch/{name}. Prompts give ready-made workflows: poster,
icon-set, recolor, trace-and-style and export-set. On a big document, find objects with
command_run document.find {name?, kind?, text?} instead of dumping the whole tree.
Paint
- A colour can be
"#rrggbb","none",[r,g,b](0–1),{c,m,y,k},{gray}, or{swatch: "Name"}. Those forms are for the tools (draw_shape,set_paint…). Thepaint.setFill/paint.setStrokecommands take{color: "#…"}, and{none: true}for no paint. - Gradient:
{"gradient": {"kind": "linear"|"radial", "angle": deg, "stops": [{"offset": 0, "color": "#…"}, {"offset": 1, "color": "#…"}]}}. The angle is counter-clockwise in a y-down document:angle: -90runs stop 0 at the top to stop 1 at the bottom.angle: 90runs bottom to top.angle: 0runs left to right.
- One gradient across several objects:
paint.setFill {ids, gradient, span: "selection"}. Withoutspaneach object gets the whole gradient. - Opacity and blend modes:
command_run transparency.set {opacity: 0..100, blend: "Multiply"}. - Stroke details (caps, joins, dashes):
command_run stroke.set/stroke.setAdvanced.
Type
command_run text.fontListlists the usable families: bundled fonts plus the system's. Use one of them. A missing font (e.g.Helveticaon Windows) silently falls back to Source Sans 3, and the exportwarningssay so.text.missingFonts(ortext.fonts, withstatus: exact|substitute|missing) checks the document.- Style after creating:
command_run text.setStyle {font, style: "Bold", size, leading, tracking, justify}. Usetext.setRangeStyle {id, start, end, …}for part of a story. - Centering a line:
add_text {x: <artboard width / 2>, justify: "center", …}centres it onx. Or create it anywhere, thencommand_run object.align {horizontal: "center", to: "artboard"}. Withoutjustify,xis the left edge, so a guessedxputs the line off-centre or past the edge. - Use area type (
width/height) for paragraphs. Watch foroverflowin the reply ofadd_text,text.create,text.setStyleandtext.setText: the lines past the frame aren't drawn. Enlarge the frame or passfit: "autoHeight"(or"shrinkText", down tofitMinPercent, default 50). Convert type to paths withcommand_run type.createOutlines, or export SVG withoutlineText: truewhen the file must render without the fonts.
Procedure
- Plan the canvas size, a 3–5 colour palette, and the hierarchy: background → main shapes → details → type.
- Set up: use the open document (
doc_inspect), orcommand_run file.new {width, height}. - Build back to front. Lock the background once it's placed (
command_run object.lock) soselect.alland alignment leave it alone. - Look. Call
render_previewafter each major step and actually check the image: alignment, overflow, contrast, spacing. Fix things before moving on. - Save the editable master with
save_file {path: "….vectorcraft"}. - Export the deliverables and read each reply's
warnings(missing fonts, features a format drops).
Recipe: poster (tested)
command_run {id:"file.new", params:{width:612, height:792}}
draw_shape {shape: rectangle, x:0, y:0, width:612, height:792, stroke:"none",
fill:{gradient:{kind:"linear", angle:-90, stops:[{offset:0,color:"#1b1046"},{offset:1,color:"#ff6a3d"}]}}}
command_run {id:"object.lock"}
draw_shape {shape: ellipse, x:186, y:260, width:240, height:240, fill:"#ffd23f", stroke:"none"}
apply_effect {effect:"stylize.outerGlow", params:{blur:30, color:"#ffd23f", opacity:60}}
add_text {text:"JAZZ NIGHT", x:0, y:620, size:72, font:"Source Sans 3", color:"#ffffff"}
command_batch {steps:[{id:"text.setStyle", params:{style:"Bold", tracking:80}},
{id:"object.align", params:{horizontal:"center", to:"artboard"}}]}
render_preview {max_side:800} → check, adjust
save_file {path:"/abs/poster.vectorcraft"}
export {path:"/abs/poster.pdf"} · export {path:"/abs/poster.png", scale:2}For print resolution: export {path:"/abs/poster.png", options:{ppi:300, background:"white"}}
(612 pt at 300 ppi = 2550 px wide).
Recipe: logo mark (tested)
command_run {id:"file.new", params:{width:512, height:512}}
draw_shape {shape: ellipse, x:96, y:96, width:320, height:320, fill:"#5b3df5", stroke:"none"}
draw_shape {shape: ellipse, x:176, y:56, width:300, height:300, fill:"#000000", stroke:"none"}
command_run {id:"select.all"}
pathfinder {operation:"minusFront"} → crescent, one path
draw_path {d:"M300 330 L330 300 L360 330 L330 360 Z", fill:"#ffb800", stroke:"none"}
transform {rotate:15}
render_preview {}
export {path:"/abs/logo.svg", outlineText:true} · export {path:"/abs/logo.png", scale:4}For a non-destructive combination, group the objects and apply a pathfinder.* effect instead.
Recipe: styled chart (tested)
create_graph draws a group: one subgroup per series (named after it, holding its bars and legend
swatch), plus Axes and Legend. Bars come out black and grey, so colour each series group.
create_graph {type:"column", x:40, y:40, width:260, height:200, csv:",Sales,Costs\nQ1,3,2\nQ2,5,3\nQ3,4,1"}
command_batch {steps:[
{id:"document.find", params:{kind:"Group", name:"Sales"}},
{id:"paint.setFill", params:{ids:["$0.matches.0.id"], color:"#5b3df5"}},
{id:"document.find", params:{kind:"Group", name:"Costs"}},
{id:"paint.setFill", params:{ids:["$2.matches.0.id"], color:"#ffb800"}}]}
render_preview {}
command_run {id:"graph.setData", params:{id: <graph id>, csv:"…"}} → new data keeps the coloursThe legend sits to the right of the plot, outside width. Leave room for it, or turn it off with
graph.setType {legend: false}. name in document.find is a substring, so pick series names that
don't contain each other.
Recipe: many shapes in one call (tested)
draw_shape {shape: rectangle, x:20, y:20, width:160, height:100, fill:"none", stroke:"#1b1046",
strokeWidth:4, dash:[12,6], cap:"round", join:"round", name:"Frame"}
command_batch {atomic:true, label:"Dots", steps:[
{id:"draw_shape", params:{shape:"ellipse", x:40, y:200, width:80, height:80, stroke:"none"}},
{id:"draw_shape", params:{shape:"ellipse", x:160, y:200, width:80, height:80, stroke:"none"}},
{id:"draw_shape", params:{shape:"ellipse", x:280, y:200, width:80, height:80, stroke:"none"}},
{id:"paint.setFill", params:{ids:["$0.id","$1.id","$2.id"], span:"selection",
gradient:{kind:"linear", angle:0, stops:[{offset:0,color:"#5b3df5"},{offset:1,color:"#ffb800"}]}}},
{id:"object.group", params:{ids:["$0.id","$1.id","$2.id"]}}]}
render_preview {} → one gradient runs across the three dotsdraw_path {d, …, effects:[{effect:"stylize.dropShadow", params:{x:4, y:4, blur:3}}]} adds live effects
in the same call.
Recipe: parametric shapes and add-ons (tested)
addon.pathtools.shape.create draws a shape that stays editable by number (kind: rectangle, ellipse,
polygon, star, ring, arrow, cross, heart, gear, bubble) with the current paint.
command_run {id:"file.new", params:{width:600, height:400}}
set_paint {fill:"#5b3df5", stroke:"none"} → nothing selected: sets the new-art paint
command_batch {atomic:true, label:"Shapes", steps:[
{id:"addon.pathtools.shape.create", params:{center:[100,100], kind:"gear", width:120, height:120, count:12}},
{id:"addon.pathtools.shape.create", params:{center:[300,100], kind:"heart", width:120, height:110}},
{id:"addon.pathtools.shape.create", params:{center:[500,100], kind:"arrow", width:140, height:80}},
{id:"addon.pathtools.shape.create", params:{center:[300,300], kind:"star", width:120, height:120, count:7, a:0.45}},
{id:"addon.pathtools.shape.set", params:{id:"$0.id", count:8}}]} → the gear now has 8 teeth
apply_effect {ids:[<heart id>], effect:"addon.color.halftone", params:{frequency:12}}
command_run {id:"select.all"}
command_run {id:"addon.arrange.grid", params:{columns:3, gapX:40, centerOnArtboard:true}}
command_run {id:"addon.cleanup.check", params:{scope:"document"}} → findings by kind, changes nothing
render_preview {}The arrow points up at rotation: 0 (rotation is clockwise). addon.color.halftone draws black dots by
default; pass color, or fromArt: true for the art's own colours. Editing a shape's anchors makes it a plain path.
More building blocks
- Repeat or array:
transform {dx: 80, copy: true}, thencommand_run object.transformAgain. Radial, grid and mirror repeats areobject.repeat.radial|grid|mirror. - Align and distribute:
object.align {horizontal|vertical, to: selection|artboard|key},object.distribute,object.distributeSpacing. - Group, stacking order, layers:
object.group,object.arrange.bringToFront,layer.new. - Clipping mask: select the art with the clip shape on top, then
object.clippingMask.make. - Tracing an image:
open_filea PNG/JPG (orfile.place {path}it), thenimageTrace.make {preset}andimageTrace.expand(orimageTrace.makeAndExpand).imageTrace.presetslists the presets. Options worth knowing:enhanced: true(the preset's better version),shapes(circles and rectangles come out as live shapes),gradients,ignoreWhite/ignoreColor. - 3D:
apply_effect {effect: "threeD.extrude", params: {depth: 30}}gives a shaded, extruded shape (alsothreeD.inflate,threeD.rotate,threeD.revolve; bevels and lighting inreferences/effects.md). - Recolour artwork:
recolor.colors, thenrecolor.apply {map}. Therecolorprompt walks through it. - Multiple sizes:
artboard.new {x, y, width, height}, thenexport {artboard: i}orcommand_run document.exportForScreens {folder}(one file per artboard). Withoutx/ya new artboard goes right of the last one, so read its position withdoc_inspectbefore drawing on it. - Parametric shapes, arrange, cleanup: see the recipe above;
addon.cleanup.fixfixes whataddon.cleanup.checkfinds,addon.color.swatchLegenddraws a labelled swatch chart,addon.arrange.size/.swap/.replaceresize, swap or replace selected objects. - Look before opening:
command_run file.list {path}lists a folder;document.pdfInfo {path}reads a PDF's pages.
Formats
- Read: .vectorcraft .drawcraft .svg .svgz .pdf .ai .ait .eps .epsf .ps .dxf .emf .wmf .png .jpg .gif .webp .tif .bmp .tga .pcx .jp2/.jpx (JPEG 2000) .psd .psb (as the merged image) .af .afdesign .afpub (Affinity) .vctemplate
- Save (
save_file, the document takes the file): .vectorcraft (native JSON), .vctemplate, .svg/.svgz, .pdf, .ai. A.aior PDF saved this way carries the native document and reopens fully editable (restored: true). - Export (
export, the document keeps its path): svg/svgz (artboard = viewBox), pdf (one page per artboard), ai, eps, dxf, emf, wmf, png, png8, jpg, webp, gif, tiff, bmp, tga, psd (with layers), txt (the stories), vectorcraft, template. exporttakesscale(raster pixels per point; use 2–4 for crisp PNGs),artboard/range,selection: true(cropped to the selection),outlineText(SVG/DXF), andoptions(rasterppi,background, jpgquality; PDF text as outlines isoptions:{advanced:{outlineText:true}}).command_run document.formatslists each format's options.- For apps that need an old-style
.ai:export {path:"/abs/x.ai", options:{aiVersion:"7"}}writes a legacy version 7 file (layers, groups and type kept, one file per artboard; thewarningslist what it drops). - A raster export of any page area:
command_run document.export {path, rect:[x, y, width, height], ppi}. - Live effects survive export: geometry is baked, and shadows, glows and blurs become SVG filters.
CLI (no MCP needed)
vectorcraft-cli convert in.svg out.pdf [--scale N] [--artboard I | --range "1-3"] [--outline-text] [--decimals N]
vectorcraft-cli convert in.vectorcraft out.ai --ai-version 7 # legacy .ai (also --hidden-objects, --transparent-images)
vectorcraft-cli info file.ai # JSON: artboards, object counts, fonts, import warnings
vectorcraft-cli run [--in FILE] --cmd shape.rectangle --params '{"x":50,"y":50,"width":200,"height":100}' \
--cmd paint.setFill --params '{"color":"#ff0000"}' --export out.svg --scale 2 # one JSON line per step
vectorcraft-cli run --commands steps.jsonl --export out.png # steps from a file (or - for stdin): a JSON array or JSON Lines of {"command"|"id", "params"}
vectorcraft-cli commands # the full command catalog as JSONrun takes the same command ids and params as command_run, and "$N.path" references like
command_batch (--params '{"id":"$1.id"}'). That's handy for batch conversion and scripted art
without an MCP session. A failing step stops run with exit code 1. convert replies with the export's
warnings and importWarnings (what reading the input left out); --decimals (1–7) sets SVG precision,
--editing-data opens a .ai from its editing copy. A PDF written by convert leaves out the native document
(it reopens as plain PDF art) unless you pass --preserve-editing; save_file/export to PDF keep it.
convert refuses to overwrite IN when reading it lost something, unless --replace-lossy.
Pitfalls
- Every tool fails with
unknown command `shape.rectangle`(or`document.export`): the server connected to another Crafting App listening on port 7979 (stderr saysMCP server on stdio (remote 127.0.0.1:7979)). Run the server with--headless, or ask the user to close that app. - Paths: use absolute paths for
save_file,exportandopen_file. A relative path lands in the server's working directory, not yours. With the root flags, a path outside them fails withautomation path rejected: outside the write root …. - Misspelt params: most commands now refuse them:
invalid parameters for `file.new`: unknown parameter `widht`; did you mean `width`?, and for effectsunknown parameter `blurr`; the command takes: radius. A few still ignore them silently in 0.21.0:transparency.setandstroke.set(transparency.set {opacty: 50}succeeds and changes nothing), andtext.setStyle/paint.setFillwhen a valid key comes with the typo (alone, a typo fails withnothing to change/give color, none, swatch or gradient). Copy keys fromcommand_list/references/commands.md. Unknown tool arguments are refused:unknown argument `rotat` for `transform`. paint.setStroke {color: "none"}fails withinvalid parameters for `paint`: bad color "none". Use{none: true}, orset_paint {stroke: "none"}.- A failed
command_batchkeeps the steps before the failure, even withatomic: true(they become one undo step). It stops at the failing step and reportscompleted,failedand each step'serror. xinadd_textis the left edge unless you passjustify: "center"/"right". Don't guess a centredx.- Area type that's too small cuts the text off without an error. The reply says
overflow: true; act on it. - Gradient direction: remember
angle: 90puts stop 0 at the bottom. - Missing fonts fall back to Source Sans 3 without an error. Pick from
text.fontListand check the exportwarnings. select.allgrabs everything that isn't locked, including the background. Lock it, or passids.pathfinderis destructive and works back to front:minusFrontsubtracts the front objects from the backmost one.- Don't invent command ids: an unknown one fails with
command_run: unknown command `nope.cmd`. Look them up withcommand_list {filter}, or readvectorcraft://command/{id}for the exact params. - The UI tools fail in headless mode. That's expected, not a broken install.
Verification
render_preview, then look at the image before you report the work as done.doc_inspectshould show the expected objects, paint and no stray empty text.- Every
exportreply should list the rightpath,formatandbytes > 0. Act on itswarnings. vectorcraft-cli info <file>independently confirms a saved file opens and lists its fonts and artboards.
References
Grep these rather than reading them whole, e.g. grep -n 'object.align' ${HERMES_SKILL_DIR}/references/commands.md.
${HERMES_SKILL_DIR}/references/commands.md: all 911 commands with params, grouped by area.${HERMES_SKILL_DIR}/references/effects.md: all 130 live effects with params and defaults.- Upstream docs: https://github.com/storytold/vectorcraft/tree/main/docs (
mcp.md,control-protocol.md).mcp.mdonmaincan describe features newer than 0.21.0.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

