Open the visual workbench

Select and render project-aware IconPark SVGs locally

Armorial deterministically searches the pinned IconPark collection, applies one explicit project icon policy, reports unresolved ambiguity, and returns bounded structured results and SVG.

Use Armorial for

Do not use Armorial for

Cheapest correct route

TaskRoute
Ordinary semantic requestresolve_icon once
Known idget_icon once
Alternatives requestedsearch_icons, then render only the selected id
Known ids needed in the Agent turnget_icons, at most 8
Structured batch automationCLI/library direct route; keep SVG payloads out of model context
Subjective visual choicechoose_icon, then wait for the human decision

Execution boundary

Search and rendering are local after dependencies and build artifacts are present. Direct MCP tools do not write files or accept paths, URLs, raw SVG, or source code. Ordinary CLI results use stdout. An explicit batch --output <relative.svg> publishes one new, create-only sprite and reports protectionLevel: non_overwriting_create. Replacing an existing SVG requires --allow-optimistic-overwrite, can overwrite a non-cooperating writer in the final check-to-rename window, and reports protectionLevel: optimistic_preflight_only plus a warning. Passing that replacement-only flag for a new SVG is invalid and creates nothing. The default HTML route uses --inline-from <source.html> --output <new-candidate.html> to create a distinct, non-overwriting candidate while leaving the source unchanged; same paths, hard-link aliases, and existing outputs are rejected. SVG and HTML publication is pinned to the admitted parent-directory inode, so replacing that parent path cannot redirect writes through a new symlink. The helper stages and verifies private 0600 bytes before its still-live CLI parent returns a one-use commit token. Parent death or the five-second deadline before commit creates no final output and normally removes private staging. If destination-parent permissions prevent cleanup, a surviving CLI preserves the cause and reports bounded publication effect, cleanup, and residue metadata. Restore access and inspect/remove that sibling before retrying. After commit, an interruption may leave a valid output without a success summary. A surviving CLI reports PUBLICATION_OUTCOME_UNCERTAIN; inspect the destination before retrying an interrupted carrier call. A create-only helper crash can also leave a private sibling hard link; verify the intended destination before treating it as stale. Candidate JSON reports source and candidate hashes plus protectionLevel: non_overwriting_candidate; hashes identify bytes but are not atomic commit credentials. The legacy in-place --inline-into route also requires --allow-optimistic-overwrite and carries the same disclosed final window. A successful result does not establish design approval or task success.

Deployment-pinned source probe

Requires Git, curl, and Node.js 22 or newer. The deployment publishes the exact Git commit it was built from; the probe checks out that commit rather than mutable main.

ARMORIAL_COMMIT="$(curl -fsSL https://tetracoralla.github.io/armorial/source-commit.txt)"
printf '%s\n' "$ARMORIAL_COMMIT" | grep -Eq '^[0-9a-f]{40}$'
git clone https://github.com/tetracoralla/armorial.git
cd armorial
git checkout --detach "$ARMORIAL_COMMIT"
test "$(git rev-parse HEAD)" = "$ARMORIAL_COMMIT"
node -e 'if (Number(process.versions.node.split(".")[0]) < 22) process.exit(1)'
npm ci --ignore-scripts
npm run build:node
node dist/adapters/cli.js resolve settings

The final command must return one JSON result with status equal to ok or ambiguous. It must never invent fallback geometry.

Authoritative details