Agent skill

Engine Call Contract

by pmndrs in pmndrs/glyph

How every call into the text engine is shaped, and where each entry point's names live.

MITAuto-check passedDevelopment

Install Engine Call Contract

skills CLI
$ npx skills add pmndrs/glyph --skill engine-call-contract -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install pmndrs/glyph engine-call-contract --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/pmndrs/glyph.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/engine-call-contract .claude/skills/engine-call-contract && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
engine-call-contract
GitHub stars
393
Token cost
~1.7k tokens
SKILL.md length
907 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
MIT

At a glance

How every call into the text engine is shaped, and where each entry point's names live.

  • Works in 4 steps: Can the type stop this being… → Can only a caller cause it? Throw from… → Can only this package cause it? It is a… → …
  • Development work in your project
  • SKILL.md covers A call answers, or it throws…, Where a name lives and When you are about to add an…
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Engine Call Contract is an agent skill from pmndrs/glyph. How every call into the text engine is shaped, and where each entry point's names live. Use before adding, moving, or removing anything on a published surface, before adding an error path or a result type to an engine call, and when deciding whether a failure belongs to the caller or to this package.

Its SKILL.md is about 1.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development. The repository describes itself as: ♠️ A typography engine for web graphics. The licence is MIT.

When your agent uses it

  • Development work in your project

Example prompts

  • “/engine-call-contract”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Can the type stop this being expressible? Do that instead.
  2. Can only a caller cause it? Throw from the call, naming the thing.
  3. Can only this package cause it? It is a producer defect: add or strengthen the producer/ABI/property test. Do not add a
  4. Is it a policy the caller asked for, like a fixed glyph budget? Then it is not a failure at all. Define the

What it can do on your machine

Read from SKILL.md and the folder at commit 51a1f34. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Engine Call Contract loads about 1.7k tokens when it runs. Until then it costs about 81 tokens; SKILL.md has 907 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~81
When it runs · the whole SKILL.md, loaded when a task matches
~1.7k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from pmndrs/glyph at commit 51a1f34, republished under its MIT licence (© pmndrs). 907 words, ~1,707 tokens.

Download SKILL.mdSave it as .claude/skills/engine-call-contract/SKILL.md (or your agent's skills folder).
name
engine-call-contract
description
How every call into the text engine is shaped, and where each entry point's names live. Use before adding, moving, or removing anything on a published surface, before adding an error path or a result type to an engine call, and when deciding whether a failure belongs to the caller or to this package.

The engine call contract

Two rules decide almost every API question in this package. Both were arrived at by getting them wrong first.

A call answers, or it throws where it was written

An engine call is synchronous and takes no resource that could be missing: a font is required at construction, text and spans are validated there, and constraints are checked by the call itself. Nothing is left to wait for and nothing is left for a caller to get wrong, so there is no failure to hand back.

  • Return the answer. layout() returns metrics. glyphs() returns the inspection. No { ok } union, no nullable, no out-of-band error to consult afterwards.
  • Throw for input the language let them express but which has no meaning. { mode: 'at-most', size: NaN } is well-typed and means nothing; there is no width it could stand for, so there is nothing to return, clamp, or guess. Throw from the call, name the axis or the span or the offset, and let the stack point at the caller. Silently accepting it turns a wiring bug into wrong text on screen, which is worse than an exception.
  • Never return or proactively scan for a failure the caller cannot cause. A result union for an engine defect makes every caller write if (result.ok) forever -- inside a flexbox measure callback, many times per layout -- to guard a branch that only means this package is broken. A deep runtime validator adds the same ceremony inside Glyph. Prove package-owned invariants at their producer; if corruption is encountered naturally, let the operation throw.
  • Never enter a broken state that outlives the call. A rejected frame must not leave the engine refusing work, recompiling an invalid frame at frame rate, or holding a latch a caller has to clear. Report once, stop, and keep the rest of the scene live: transforms, visibility, and render order belong to the last accepted publication and never entered the frame that was refused.

The distinction that matters, in one line: a throw is the caller's arithmetic; a persistent failure is our defect. Neither is a return value.

Making the throw unnecessary

Prefer a shape that cannot express the mistake over a check that catches it.

  • Structural authoring beats offsets. txt and span derive ranges from what was written, so an inverted range, a past-end range, and a partial overlap are unrepresentable rather than validated.
  • A brand beats a convention. GlyphRenderer.decode() receives one borrowed CommandBufferView whose projected sequences expire with that synchronous call; the public API has no owned render-publication escape hatch. Cross-realm font movement is instead explicit through FontFace.clone(), whose serialized data and transfer list have their own versioned contract.
  • Where the language cannot express the domain -- there is no finite-nonnegative number type -- the throw is the honest floor. Record it as a known limit rather than defending it as ideal.
Show full SKILL.md (434 more words)Show less

Where a name lives

A value or type an application can encounter lives at the root. A renderer-neutral helper only an integrator calls lives on /core.

ParagraphMeasurement and GlyphConfig are at the root because applications encounter them through Text and glyph.handle(). defineGlyphConfig lives at /core because only an integration author calls it. Codec, schema, portable-resource, and raster-format construction helpers share that entry. Built-in bitmap, msdf, and slug format values and their public options/data types live at root; their schemas, codecs, and format interpretation helpers live on /core. Internal engine, planner, wire, projection, and binding machinery has no public subpath. Boundary and packed-package tests enforce all three facts.

entryholdsaudience
.glyph, fonts, built-in format selection, authoring, layout and measurement values, plus application-encountered typeseveryone
./corerenderer-neutral construction helpers for config, Codec, schema, resources, and raster formatsintegrators
./three, ./react, ./typegpuone integration's application surfaceapplications
./shaders/tsl, ./shaders/typegpureusable technique shaders, with no engine or sceneany host

The extension API is additive to the root, not parallel to it: an integrator imports application-encountered types from the root and construction helpers from /core. Keep the core entry as static ESM re-exports of focused implementation modules so unused helpers remain tree-shakeable. Do not re-export those helpers from the root; each helper has one public home.

An integration may re-export a root name only when its own signatures use it -- a caller should be able to name what measureLayout() returns without a second import, and nothing beyond that. Re-exporting more gives the vocabulary a second home and makes the import site a guess. entry-point-boundaries.test.mjs enforces both halves.

A renderer type must not enter shared text vocabulary to make an integration convenient. GlyphConfig.schema, resolve, and renderer preserve renderer-specific associated types behind that integration's inferred config; ordinary text state carries renderer-neutral paint, font, hierarchy, and format selection. Pushing a THREE.Material or GPU handle into renderer-neutral spans is the mistake this rule exists to prevent.

When you are about to add an error path

Ask, in order:

  1. Can the type stop this being expressible? Do that instead.
  2. Can only a caller cause it? Throw from the call, naming the thing.
  3. Can only this package cause it? It is a producer defect: add or strengthen the producer/ABI/property test. Do not add a runtime scan merely to detect it. If ordinary consumption encounters it naturally, throw and do not build a recovery protocol.
  4. Is it a policy the caller asked for, like a fixed glyph budget? Then it is not a failure at all. Define the behaviour, warn in development, expose it for reporting, and let it self-heal.

© pmndrs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/engine-call-contract of pmndrs/glyph.

Open the folder on GitHubat commit 51a1f34

Compare with similar skills

Engine Call Contract next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Engine Call Contract compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Engine Call Contract this skillpmndrs/glyph393—~1.7kAutomated safety check: PassMIT
Vercel Composition Patternssupabase/supabase111k59 repos~726Automated safety check: PassMIT
Finishing a Development Branchobra/superpowers296k5 repos~1.9kAutomated safety check: PassMIT
Typescript Advanced Typesrolling-scopes/rsschool-app10k25 repos~4.2kAutomated safety check: PassMPL-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Code Review ChecklistshareAI-lab/learn-claude-code78k5 repos~1.1kAutomated safety check: PassMIT

Similar skills

  • Official

    React composition patterns that scale. An agent skill from supabase/supabase.

    111k GitHub starsUsed in 59 repos~726 tokens
    DevelopmentAuto-check passed
  • Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.

    296k GitHub starsUsed in 5 repos~1.9k tokens
    DevelopmentAuto-check passed
  • Typescript Advanced Types

    rolling-scopes/rsschool-app

    Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.

    10k GitHub starsUsed in 25 repos~4.2k tokens
    DevelopmentAuto-check passed
  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Code Review Checklist

    shareAI-lab/learn-claude-code

    Reviews code against a five-part checklist covering security, correctness, performance, maintainability and testing, and reports findings in a fixed format.

    78k GitHub starsUsed in 5 repos~1.1k tokens
    DevelopmentAuto-check passed
  • Greploop

    onyx-dot-app/onyx

    Iteratively improves a PR (GitHub), MR (GitLab), or shelved changelist (Perforce) until Greptile gives it a 5/5 confidence score with zero unresolved comments.

    32k GitHub starsUsed in 4 repos~3.3k tokens
    DevelopmentAuto-check passed

More from pmndrs/glyph

All 8 skills in this repo
  • Codemod

    pmndrs/glyph

    Author, archive, apply, and verify TypeScript codemods with ts-morph for APIs that have reached the remote default branch or external users.

    393 GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Create, migrate, inspect, query, validate, or maintain Open Knowledge Format v0.2 bundles made from linked Markdown concepts with YAML provenance.

    393 GitHub stars~2.5k tokensUpdated today
    Auto-check passed
  • Tsl

    pmndrs/glyph

    Implement, migrate, review, debug, or verify Three.js Shading Language (TSL) materials, node graphs, WebGPU compute work, and post-processing.

    393 GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • Diataxis Docs

    pmndrs/glyph

    Design, classify, write, audit, or restructure technical documentation with the Diátaxis framework.

    393 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Audit and improve repository code milestone by milestone for correctness, clarity, local reasoning, DRY design, explicit state modeling, panic resistance, and trustworthy TypeScript boundaries.

    393 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Evidence First

    pmndrs/glyph

    Shape human-facing engineering communication—including chat updates and final answers, reports, reviews, handoffs, debugging or benchmark summaries, PR and issue prose, READMEs, and technical…

    393 GitHub stars~1.2k tokensUpdated today
    Auto-check passed

Categories

Questions about Engine Call Contract

What does Engine Call Contract do?

How every call into the text engine is shaped, and where each entry point's names live. Engine Call Contract is an agent skill from pmndrs/glyph. How every call into the text engine is shaped, and where each entry point's names live.

When should I use Engine Call Contract?

Engine Call Contract fits situations like: development work in your project.

How do I install Engine Call Contract in Claude Code?

Run `npx skills add pmndrs/glyph --skill engine-call-contract -a claude-code`. Or copy the skill folder (.agents/skills/engine-call-contract in pmndrs/glyph) into .claude/skills/engine-call-contract in your project. Claude Code loads it when a task matches its description.

How do I install Engine Call Contract in Codex?

Run `npx skills add pmndrs/glyph --skill engine-call-contract -a codex`. Or copy the skill folder (.agents/skills/engine-call-contract in pmndrs/glyph) into .agents/skills/engine-call-contract in your project. Codex loads it when a task matches its description.

Can I use Engine Call Contract in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add pmndrs/glyph --skill engine-call-contract -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/engine-call-contract, .gemini/skills/engine-call-contract, .github/skills/engine-call-contract and .opencode/skills/engine-call-contract in your project.

What does Engine Call Contract need to run?

SKILL.md names no scripts, command-line tools or credentials: Engine Call Contract is instructions for the agent only.

Does Engine Call Contract access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Engine Call Contract safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Engine Call Contract use?

Engine Call Contract is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Engine Call Contract use?

About 1.7k tokens (SKILL.md is roughly 6.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Engine Call Contract?

Skills that share tags, products or a category with Engine Call Contract: Vercel Composition Patterns (supabase/supabase, 111k stars), Finishing a Development Branch (obra/superpowers, 296k stars), Typescript Advanced Types (rolling-scopes/rsschool-app, 10k stars) and PR Babysitter (openinterpreter/openinterpreter, 69k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Engine Call Contract?

pmndrs (a GitHub organization) maintains it in pmndrs/glyph, which has 393 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 8, 2026.

Source: pmndrs/glyph on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.