skills/signet-design/SKILL.md
Signet's visual design system — technical/industrial monochrome aesthetic with generative halftone art, geometric icon set, dual dark/light themes. Use when building or modifying UI for Signet products (website, dashboard, docs, pitch decks, component libraries). Covers design tokens, typography pairing, icon system, component patterns, generative dithering, and layout principles. Trigger on any Signet frontend work, design brief updates, or brand-aligned UI tasks.
npx skillsauth add signet-ai/signetai signet-designInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
See assets/design-brief.png for a full-page reference screenshot.
Signet is the layer that takes an LLM from a stateless autocomplete algorithm to a real individual with opinions, persistence, and skills. It is a portable, user-owned standard for agent identity — your configuration, memory, personality, and skills travel with you across platforms. No single company or harness owns your agent. Your agent is yours.
Memory isn't just recall. It's coherence. An agent running across multiple sessions on different platforms is still one agent. Experiences branch and merge like version control — same history, different heads, converging back into a single identity. Corrigibility is built in, not bolted on. The trust layer keeps track of mistakes and works to ensure they never happen again.
The design system reflects this philosophy: technical, industrial, honest. Nothing soft or friendly. Nothing that hides the machinery. Signet's UI should feel like looking at a live system — a mind that persists, not a product that sells.
Technical. Industrial. Near-monochrome. The visual language draws from blueprint schematics, CRT flight terminals, cyberpunk interfaces, 1-bit halftone print, and rave poster aesthetics. It is NOT consumer SaaS, NOT Material Design, NOT soft/friendly.
Core principles:
Sys_Palette, Component_LibraryThese violate the design system. Never do:
--color-text-muted directly,
never layer opacity: 0.5 on top of already-muted colors.#e4dfd8,
never #ffffff.Two typefaces with distinct roles. This pairing creates hierarchy through contrast between condensed geometric headings and fixed-width body text.
family=Chakra+Petch:wght@400;500;600;700family=IBM+Plex+Mono:wght@400;500;600CSS variables:
--font-display: 'Chakra Petch', sans-serif;
--font-mono: 'IBM Plex Mono', monospace;
See assets/globals.css for the full token set. All tokens use CSS
custom properties that flip between themes via [data-theme].
--color-bg: #08080a --color-dither: #f0f0f2
--color-surface: #0e0e12 --color-border: rgba(255,255,255,0.06)
--color-surface-raised: #151519
--color-text: #d4d4d8 --color-border-strong: rgba(255,255,255,0.12)
--color-text-bright: #f0f0f2
--color-text-muted: #3e3e46 --color-accent: #8a8a96
--color-bg: #e4dfd8 --color-dither: #0a0a0c
--color-surface: #dbd5cd --color-border: rgba(0,0,0,0.06)
--color-surface-raised: #d1cbc2
--color-text: #2a2a2e --color-border-strong: rgba(0,0,0,0.12)
--color-text-bright: #0a0a0c
--color-text-muted: #7a756e --color-accent: #6a6660
Light background is warm beige, never pure white. Borders flip from
white-alpha to black-alpha. Dither dots flip color via --color-dither.
Readability: light mode --color-text-muted must be dark enough for
legible text on the beige surface (~3.5:1 contrast min).
12 geometric inline SVG icons built from primitives. All use 24x24 viewBox, 1.5px stroke, square linecap, miter join. Stroked (not filled) unless semantically solid (burst, grid dots).
Icons: target, node, signal, split, diamond, grid,
chevron, burst, eye, lock, link, orbit
<span class="icon"><svg viewBox="0 0 24 24">...</svg></span>
<span class="icon icon--sm">...</span> <!-- 16px -->
<span class="icon icon--lg">...</span> <!-- 32px -->
CSS sets stroke: currentColor so icons inherit text color and
adapt to theme automatically. See assets/index.html for all SVG
paths.
Design language: circles with crosshairs, concentric rings, radiating nodes, split shapes, rotated squares, dot matrices. Match the abstract geometric style — never use rounded friendly icons or filled emoji-style glyphs.
All outlined, never filled at rest. Fill on hover (invert colors).
Four variants: primary, secondary, ghost, danger. Corner tick marks
(L-bracket ::before/::after pseudo-elements) at top-left and
bottom-right provide registration mark detail. Marks are 5px (4px
on .btn-sm), positioned at -1px offset. Mark color matches variant
and brightens on hover. transform: translateY(1px) on :active.
.btn::before { top: -1px; left: -1px; border-width: 1px 0 0 1px; }
.btn::after { bottom: -1px; right: -1px; border-width: 0 1px 1px 0; }
--color-surface background, --color-border-strong stroke, no
radius. Corner registration marks (8px L-brackets via ::before/
::after) mirror the button pattern at larger scale. Hover
brightens/darkens border and corner marks.
Variants:
.card--accent — 2px top border in --color-text-muted, brightens on hover.card-meta — flex row with border-bottom separator for metadata
(node ID, status with inline icon). 0.5rem uppercase mono text..card-grid — auto-fill grid layout, minmax(280px, 1fr)Cards should contain Signet-relevant content (agent identity, auth layers, node status) with inline icon + button combinations.
Stroked containers with monospace text. .badge-accent variant
uses bright text + bright border. Can include inline icons.
Monospace, surface background, strong border. Focus brightens border
and adds 1px box-shadow ring. Select uses custom SVG chevron
background-image. border-radius: 0 always.
Content sections wrap in .section-panel — --color-surface bg,
--color-border stroke, 6px corner L-bracket registration marks
via ::before/::after. Elevates content above the background
layers.
For hero sections or high-emphasis areas, use technical HUD styling:
--space-2xl) to give text breathing roomborder-left and border-bottom only (creates an open bracket feel)::before/::after pseudo-elements to create 5x1px crosshair ticks at the bottom-right and top-left corners.hero-content-tick) to complete the bounding box135deg linear gradients (e.g., rgba(255, 255, 255, 0.02) to transparent 50%) instead of solid fills to let dithered backgrounds show throughFor subtitles under hero text or major headings:
var(--font-mono), uppercase, and underscore naming (CORE_UI_PRIMITIVES)> ) via a ::before pseudo-elementvar(--color-accent) for the text and var(--color-text-muted) for the prompt prefixFor displaying key/value pairs or metadata blocks:
grid-template-columns: repeat(4, 1fr)) instead of loose flex layoutsborder-right on items to create a rigid, technical "spec sheet" data table lookvar(--color-surface) so text pops against complex dithered backgroundsFor displaying color palettes:
var(--color-bg))4:3 aspect ratio for the color block instead of a perfect squaretransform: translateY(-2px)) with a border highlight, rather than bouncy scales.crosshair) — 10px, muted color.star-4) — clip-path polygonopacity: 0.8, node-pulse animation****) — mono text, positioned absolutewriting-mode: vertical-rl, transform: rotate(180deg)).label-inv) — bright bg, dark text, no radius.barcode using repeating-linear-gradient with muted text colors for industrial artifacts.hex-stream displaying memory addresses (0x0000), hex data, and ASCII translations to reinforce the agent memory theme.page::before or body::before with feTurbulence (fractalNoise) at very low opacity (0.04) to create a CRT/industrial texture overlayA background layer of interconnected crosshair nodes arranged as an embedding/vector-space visualization. Inspired by Detroit Underground record sleeve schematics.
16 crosshair nodes (#ch-0 through #ch-15) in 4 clusters plus
outliers, positioned with position: absolute percentages:
#sc-1): ch-0 through ch-3#sc-2): ch-6 through ch-83 hub nodes as larger schematic circles (#sc-1, #sc-2, #sc-3)
with crosshair pseudo-elements and node-pulse animation.
3 star markers (#sm-1, #sm-2, #sm-3) as **** text.
Edges defined as [fromId, toId, style, label?] array:
cos=0.74, d=0.12)JS-drawn SVG overlay. On load (and resize), reads
getBoundingClientRect centers of all nodes, then draws
quadratic bezier curves (Q command) between them:
const dx = b.x - a.x, dy = b.y - a.y;
const mx = (a.x + b.x) / 2 + dy * 0.12;
const my = (a.y + b.y) / 2 - dx * 0.12;
path.setAttribute('d', `M ${a.x},${a.y} Q ${mx},${my} ${b.x},${b.y}`);
Single control point offset 12% perpendicular from the midpoint. This produces exactly one gentle arc per line — never S-curves.
Connector styles:
conn-dashed — stroke-dasharray: 4 6, animated dash-flow 15sconn-dashed-rev — same dash, reverse direction 15sconn-dot — 2.5px radius circles at each endpoint, filled with surface color and stroked with text color (hollow port look)conn-packet — small (1.5px) circles animated along the path using <animateMotion> with randomized durations and delays to simulate live data flow. Packets should be filled with --color-text-muted and have no drop shadow by default so they act as subtle ambient blips rather than bright tracer rounds.conn-label — 7px mono text near midpoint (d=0.12, cos=0.74)opacity: 0.3 so data packets pop slightlyCrosshair nodes have pointer-events: auto (rest of the field is
pointer-events: none). On hover:
::before/::after pseudo-elements
scale 1.8x on their respective axes, color brightens to
--color-text.ch-label) — mini-panel appears above node.
--color-surface background, strong border, and a drop shadow::before) connecting the panel to the nodeSTS: ACTIVE, and a randomized hex memory address (MEM: 0x4F2A).ch-ring) — dashed ring snaps into place.
-45deg rotation and 0.5 scalecubic-bezier(0.16, 1, 0.3, 1)) to animate to 0deg and 1.0 scale<g>) get .conn-highlight class: stroke brightens to
--color-text, width increases to 1.5px, hollow ports fill in, and data packets enlarge, turn bright (--color-text-bright), and gain a drop shadow..conn-highlight classes removedDithered canvas art is structural — bold compositional anchors.
See references/generative-patterns.md for full implementation.
Canvas layers:
Dither modes: organic, glitch/smear, band, cloud.
Pipeline: Seeded Perlin → fbm → Bayer 4x4 → canvas fill.
Use --color-dither so canvases adapt to theme.
Multiple overlapping layers create spatial depth, inspired by flight terminal / CRT interface aesthetics:
body::before, fixed, z-index 9999
(0.04 opacity), using feTurbulence filter for CRT texture.bg-grid). Apply a radial-gradient mask to fade it out toward the edges.--font-displayrgba(255, 255, 255, 0.01)) and corner tick marks instead of solid fills to act as HUD brackets.[ ], plus signs +, and command prompts > to reinforce the terminal aesthetic..sc-inner) with a slow (20-30s) linear infinite rotation.--color-surface
panels with corner registration marks.hex-stream)All animations are subtle and ambient — never attention-grabbing. The goal is to create the feeling of a live, breathing system dashboard.
fp-drift 40–65s ease-in-out infinite
alternate. Panels translate ±3–4px. Stagger with animation-delay.mf-flicker 7–15s. Brief opacity dip to
simulate data refresh. Stagger child delays.dash-flow / dash-flow-rev on
stroke-dasharray: 6 4 paths, 12–15s linear infinite.node-pulse 5–8s, scale 1→1.04 and
opacity 1→0.7 on hub circles with crosshairs..reveal class, IntersectionObserver with
threshold: 0.08. Fade+translateY(12px→0), 0.6s ease-out.
Above-fold elements stagger with 80ms delay increments.div follows mouse, shows
x: # y: # in 7px mono, fades to 0 after 2s idle.x:### y:### label
at top-right of icon cells, green color (--color-success),
fades in on hover. Icon SVGs scale 1.12x.box-shadow ring on focus.animation-iteration-count: 1 for ambient effectsFor elements representing live data or memory (like Hex Dumps):
transform: translateY(-50%) over 20-30s)::after pseudo-element) that fades to the background color at both the top and bottom to create a smooth entry/exit point for the streaming data--space-xl)data-theme attribute on <html>. Toggle button fixed top-right.
On toggle: update attribute, re-render all canvas dither art after
60ms delay (so CSS variables update).
assets/design-brief.png — Full-page reference screenshot of
the design brief with all components and background layers.assets/globals.css — Complete token stylesheet with dual themes,
typography, components, icon classes, and utilities.assets/index.html — Full reference implementation with all
components, icon set, generative art, embedding graph, theme toggle.references/generative-patterns.md — Perlin noise + fbm + Bayer
dither + glitch smear implementation with code.development
# Signet AI — Install Guide for Agents > This document is written for AI agents. If you are an AI assistant > that has been asked to install Signet, read this entire document > before taking any action. Follow the steps exactly as written. > Do not improvise, guess commands, or skip sections. --- ## Install Objective (Must Complete) Your job is not just to install a package. Your job is to leave the user with a fully configured, running Signet setup. You are done only when ALL of these are
tools
Search the web and scrape pages using the local tool stack: SearXNG (meta-search), Lightpanda (fast headless fetch), and Agent-Browser (full browser automation). This is your DEFAULT web skill — use it whenever you need to look something up, research a topic, fetch a webpage, extract content from a URL, check current information, find documentation, do competitive research, or answer any question that benefits from live web data. Triggers on any form of: search for, look up, google, find out, research, what's the latest on, fetch this page, scrape this site, check this URL, pull info from, web search, or any task where current web information would improve your answer. Even if the user doesn't explicitly ask you to search — if answering well requires current info you don't have, use this skill. NOT for interactive browser automation like form filling or clicking (use [[agent-browser]] or [[browser-use]]).
tools
Guide for discovering, installing, and creating effective skills. This skill should be used when users want to discover and install existing skills (e.g., "how do I do X", "find a skill for X", "is there a skill that can...") or create a new skill (or update an existing skill) that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations.
tools
the one skill that will teach you all you need to know about signet