Atlas / Skills / tt-a1i / Archify

ArchifyCAUTION

skills/tt-a1i/archify

Turn any idea, plan, or codebase into a beautiful interactive diagram. An agent skill for Claude Code, Codex, and more.

Verdict
CAUTION
Grade
B
Trust score
86 /100
Version
3.0
Hosts
1 documented
License
MIT
Stars
81,653
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Archify ships a bounded catalogue of 107 commonly used brands for architecture, workflow, sequence, data-flow, and lifecycle nodes. The mark is optional authored identity: it never replaces the node's semantic type, color, label, or relationships.

Unknown sites are handled by an explicit two-stage workflow. Run node bin/archify.mjs brands capture --json, then author the returned digest-pinned brand value. Normal render and validate commands do not perform an unpinned capture, and changed or unavailable content fails closed.

Most vector paths and brand metadata are generated from Simple Icons 16.28.0. The OpenAI mark is traced to OpenAI's official brand guidelines. Every generated entry records its source and, when available upstream, its guidelines and license metadata in renderers/shared/generated-brand-marks.mjs.

Brand names and logos may be trademarks of their respective owners. Simple Icons' CC0 license covers its collection work, not every underlying trademark or artwork. Contributors must review the recorded source, current brand guidelines, and intended referential use before adding or updating a mark. Archify does not imply sponsorship, endorsement, or partnership.

Edit catalog.json, then regenerate the committed zero-runtime-dependency bundle:

npm run generate:brand-marks
npm run check:brand-marks

Do not hand-edit renderers/shared/generated-brand-marks.mjs.

Read from source at commit 0a1ed02411b5OBSERVED · 2026-10-10
02

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
cursormentioned
03

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: archify
description: "Create polished, validated architecture, workflow, sequence, data-flow, and lifecycle/state diagrams as explorable standalone HTML with inline SVG, dark/light themes, optional trace motion, and PNG/JPEG/WebP/SVG/WebM export. Accept plain-language requirements or pasted Mermaid flowchart, sequenceDiagram, and stateDiagram input; inspect repository evidence when the diagram must reflect real code. Use when the user asks to visualize system architecture, infrastructure, cloud/security/network topology, technical workflows, API call sequences, request lifecycles, data pipelines, ETL/ELT, data lineage, state machines, or to convert/beautify Mermaid. Also use for everyday subjects with steps, parts, relationships, or states: a leave or travel plan, an application or approval process, a back-and-forth such as renting, where money or documents go, or where an application or order stands. Not for numeric charts or dashboards."
license: MIT
metadata:
  version: "3.0"
  author: tt-a1i
  based_on: Cocoon-AI/architecture-diagram-generator (MIT, v1.0)
---

# Archify

Create an interactive HTML diagram from typed JSON. Static output is the default; enable motion only when requested.

Run commands from your working directory. Unless the user names another location, give each new diagram request its own folder `.archify/<type>-<slug>-<YYYYMMDD-HHMMSS>/` there (local time, chosen once when the request starts): keep `candidate.json` and `<slug>.html` in it, set `meta.output` to that relative HTML path, and reuse the folder for every repair rerun. A later request gets a new folder, so earlier versions stay intact. Replace `bin/archify.mjs` in the commands below with the installed package's absolute path, or its path relative to your working directory; input and output paths resolve from that working directory.

For a real codebase, read [Repository authoring](references/repository-authoring.md) while tracing the requested behavior. A system description uses the steps below; an existing JSON uses the handoff path.

## Existing candidate handoff

When the user supplies a frozen candidate, run `finalize` first as one CLI invocation. Its passing receipt completes the automated gates; follow any visual review recommendation under Delivery before claiming visual quality. For repair, follow step 5.

`finalize` includes a bounded update check in its delivery receipt; see Update awareness.

## Fast authoring path

Use this path for ordinary generation. Read branch references only when their stated trigger applies.

1. Choose `architecture`, `workflow`, `sequence`, `dataflow`, or `lifecycle` from the question.
2. Use the exact schema and example paths in the Type router without listing their directories. Read [Authoring defaults](references/authoring-defaults.md) and the mode's example in a bounded batch separate from project documents and complete schemas so neither is truncated; recover any missing section before writing. For Architecture, use the matching showcase example. For Sequence, Dataflow, and Lifecycle, also read the mode and common schemas. Read the relevant schema definition before choosing any new field, enum, or constrained text, especially boundary kinds. Examples teach shape, not facts. Use fresh IDs, wording, and layout. Go directly to the candidate without preliminary help, doctor, starter validation, temporary diagrams, or output-path listing. Query brands only for an explicitly requested mark; read [Brand marks](references/brand-marks.md) for an unknown mark with a user-provided URL.
3. Once the requested scope and, for a real codebase, [source evidence](references/repository-authoring.md) are covered, write the complete candidate directly without planning coordinates in prose. Choose Architecture abstraction and connected placement using Authoring defaults before coordinates: show the main user journey and necessary branches, preserve control roles and behavior-changing conditions, and leave enough room for actual relationship labels. No node, relationship, source, view, card, or boundary count is a target or ceiling. Use automatic routes first; add explicit routing only for necessary branch, return, supplied geometry, or measured repair. Set `meta.quality_profile` to `"showcase"` unless the user requests dense `standard`.
4. Once the complete first candidate is written, run `finalize` directly. Its first gate is showcase validation; successful first drafts need no separate pre-validation. Keep the candidate unchanged while the command runs:

   ```bash
   node bin/archify.mjs finalize <type> <candidate.json> <output.html> --quality showcase --json
   ```

   For a repository-backed candidate, include evidence on the first draft and use the complete first command: `node bin/archify.mjs finalize <type> <candidate.json> <output.html> --repo-root <repo-root> --quality showcase --json`.

   A passing receipt proves the included `validate`, `deliver`, strict `check`, and real-browser `browser-check` gates passed. Use its compact summary; run standalone commands only for a separate request or focused failure diagnosis.

5. A non-zero exit is never success. Read compact stdout or `evidence.summaryReceipt`, then [repair the failed gate](references/delivery-contract.md#failed-finalize-and-candidate-repair), including its repair limit. Preserve requested meaning and source evidence. For several tangled Architecture routes, read [Architecture layout repair](references/architecture-layout-repair.md); for measured field or geometry failures, read [Authoring contract](references/authoring-contract.md). Edit the connected neighborhood and rerun the complete `finalize` command from step 4.

## Update awareness

`finalize` and standalone `deliver` include `update` in their receipts. Do not run a separate check for the same delivery. If `update.noticeRequired` is true, read `references/update-awareness.md` and keep one update line in your final response to the user, even after a qu
04

Trust audit

CAUTIONgrade B · trust 86/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (3 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (22)

MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
renderers/shared/i18n.mjs:302
'viewer.passport.beacon.one': ['{count} verified source; focus this node to inspect', '{count} 个已验证来源;聚焦此节点以检查'],
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
renderers/shared/i18n.mjs:303
'viewer.passport.beacon.other': ['{count} verified sources; focus this node to inspect', '{count} 个已验证来源;聚焦此节点以检查'],
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
bin/open-artifact.mjs:140
throw new TypeError('Preview URL must be a loopback URL using http://127.0.0.1:<port>.');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/brand-marks.test.mjs:15
} from '../../scripts/third-party-notices-contract.mjs';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/checkout-line-endings.test.mjs:9
const repoRoot = fileURLToPath(new URL('../../', import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/ci-scope.test.mjs:3
import { classifyPaths } from '../../scripts/ci-scope.mjs';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/ci-scope.test.mjs:24
const script = fileURLToPath(new URL('../../scripts/ci-scope.mjs', import.meta.url));
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/clean-skill-staging.test.mjs:9
import { isMainModule, stageCleanSkill } from '../../scripts/stage-clean-skill.mjs';
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
test/export-cleanup-browser.test.mjs:88
const transient = root.querySelectorAll('[data-focus-selected], [data-reach-match], [data-lens-selected], [data-intent-trace-overlay], [data-route-probe-overlay], [data-route-journey-overlay], [data-s
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
test/reader-layout-browser.test.mjs:159
dirty: !!svg.querySelector('[data-focus-match], [data-route-match], [data-reader-layout], [data-source-evidence-beacon]') ||
LOWNetwork egress · net.beacon_words · CWE-200, CWE-319
test/repository-evidence-types-browser.test.mjs:67
const beaconBox = box(node.querySelector('[data-source-evidence-beacon]'));
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
test/brand-marks.test.mjs:531
'http://[::ffff:169.254.169.254]/',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/brand-content-encoding.test.mjs:48
return { origin: `http://127.0.0.1:${server.address().port}`, requests };
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/brand-href-entities.test.mjs:83
const url = `http://127.0.0.1:${server.address().port}/studio`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/brand-marks.test.mjs:277
const url = `http://127.0.0.1:${address.port}/studio`;
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
test/brand-marks.test.mjs:295
assert.ok(!rendered.html.includes('http://127.0.0.1') || rendered.html.includes('data-node-brand-source='));
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
assets/template.html:146
src: url(data:font/woff2;base64,d09GMgABAAAAAAaAABIAAAAADMwAAAYdAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoBmA/U1RBVIEgJx4AdC9MEQgKhGSEAAsgADCDOgE2AiQDOgQgBYdGB4EUGw8LIxEmZHIexT8PYyJTH6s540K0vrtCWaIRpUzR
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
assets/template.html:150
src: url(data:font/woff2;base64,d09GMgABAAAAACK8ABIAAAAARmAAACJTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoE1G4JgHIFaBmA/U1RBVIEgJx4AgkwvTBEICrporgMLggoAMKw6ATYCJAOEBAQgBYdGB4kHG7Q9RQdy2DiAAS7vZkS1alhU/18T1Iqx
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
assets/template.html:154
src: url(data:font/woff2;base64,d09GMgABAAAAABqQABIAAAAANggAABopAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGnwbHhyBWgZgP1NUQVSBICceAIFiL0wRCAqrfKMTC4FmADCgXAE2AiQDg0QEIAWHRgeHQRt7L1UHctg4AONHDw/J/98StCEx8OvQuaoS
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
assets/template.html:158
src: url(data:font/woff2;base64,d09GMgABAAAAABbwABIAAAAAP8wAABaJAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoEYG4YcHIIWBmA/U1RBVIEgJx4AgwQvTBEICrBAp3ILgjgAMKEmATYCJAOEKAQgBYdGB4xOGw05JeOYFbBxAJizfwap/v9LAidj5+rg
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
assets/template.html:162
src: url(data:font/woff2;base64,d09GMgABAAAAAC1MABIAAAAAdAQAACzjAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoJLG4ouHIM+BmA/U1RBVIEgJx4AhTovTBEICuBkzjkLhAwAMMVKATYCJAOIEgQgBYdGB5FVG4xnNXjTMeV2EEi463Muilo1Semz//9z
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
ajv
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 0a1ed02411b5full audit observations/trust-audit/skill/tt-a1i__archify.json · Report an issue / request a re-scan
05

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-100a1ed02411b5CAUTIONB86first audit
06

Questions

What does the Archify skill do?

Turn any idea, plan, or codebase into a beautiful interactive diagram. An agent skill for Claude Code, Codex, and more.

Is Archify safe to install?

With care. The audit graded it B (86/100) and found 22 things worth knowing before you trust this skill, listed below with the exact line each was found on.

What can Archify access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does Archify work with?

Its documentation mentions cursor. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (0a1ed02411b5), read on 2026-10-10. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement