Agent skill

Naming

by gridaco in gridaco/grida

How to think about names in the Grida repo — not conventions, but what a name commits you to, reveals about the system, and costs to change.

Apache-2.0Auto-check passed

Install Naming

skills CLI
$ npx skills add gridaco/grida --skill naming -a claude-code

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

GitHub CLI
$ gh skill install gridaco/grida naming --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/gridaco/grida.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/naming .claude/skills/naming && 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
naming
GitHub stars
2.7k
Token cost
~2.5k tokens
SKILL.md length
1,480 words
Files
2
Skills in repo
29
Repo updated
First seen
Licence
Apache-2.0

At a glance

How to think about names in the Grida repo — not conventions, but what a name commits you to, reveals about the system, and costs to change.

  • Works in 3 steps: Modules stay shallow. You will rarely… → Flatten with prefixed siblings, or… → If it resists flattening, it is a new…
  • Planning a new package
  • SKILL.md covers Name first, A strict, honest name is a…, One module, one thing and The diff test, plus 8 more sections
  • Calls git

What it does

Naming is an agent skill from gridaco/grida. How to think about names in the Grida repo — not conventions, but what a name commits you to, reveals about the system, and costs to change. The central discipline is that a strict, honest name refuses to grow, and that refusal drives the repo's shape (flat modules, small agnostic packages, suffix siblings). Use when planning a new package, crate, module, directory, route group, or test corpus — the name comes first.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `cases.md`).

The licence is Apache-2.0.

When your agent uses it

  • Planning a new package
  • Test corpus — the name comes first

Example prompts

  • “/naming”

Workflow steps

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

  1. Modules stay shallow. You will rarely see a module nested
  2. Flatten with prefixed siblings, or collapse into one file.
  3. If it resists flattening, it is a new module. The thing

What it can do on your machine

Read from SKILL.md and the folder at commit 165496f. 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

    Shell commands in SKILL.md call:

    • git

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

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    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

Naming loads about 2.5k tokens when it runs. Until then it costs about 107 tokens; SKILL.md has 1,480 words of instructions outside code blocks.

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

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 gridaco/grida at commit 165496f, republished under its Apache-2.0 licence (© gridaco). 1,480 words, ~2,497 tokens.

Download SKILL.mdSave it as .claude/skills/naming/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
naming
description
How to think about names in the Grida repo — not conventions, but what a name commits you to, reveals about the system, and costs to change. The central discipline is that a strict, honest name refuses to grow, and that refusal drives the repo's shape (flat modules, small agnostic packages, suffix siblings). Use when planning a new package, crate, module, directory, route group, or test corpus — the name comes first.

Naming

Vanilla conventions (snake_case in Rust, kebab-case in JS/TS, PascalCase exports, use-* hooks) are table stakes — assume them. This document is about the observations on top: what a name commits you to, what it reveals, and what it costs when it's wrong.

Name first

Pick the name before the types, before the tests, before the file exists. If the name doesn't come easily, the design isn't ready — don't start coding; sharpen the concept until the name falls out. Maintainability is downstream of naming. How a module grows, how cleanly it retires, how safely it can be deleted — all of it is decided at the moment you choose what to call it.

A strict, honest name is a scope gate

A name's primary job here is to refuse the wrong content. A module called painter should feel actively wrong to host a layout helper; a package called @grida/cmath should feel wrong to host color logic. The strictness is deliberate — it is the mechanism that keeps features from leaking into each other.

"Strict" requires "honest." A name that no longer describes what's inside has stopped being a gate: it won't reject foreign additions, and new readers can't trust it. When contents drift past the name, you have two moves — rename to match what the module has become, or extract the drifted pieces out — and you must pick one promptly. Letting a name go stale is how codebases rot quietly.

Three consequences cascade from the gate discipline, and together they produce the current repo structure:

  1. Modules stay shallow. You will rarely see a module nested deeper than two levels inside a crate's src/ or a package's src/. When you're tempted to grow a third level, the parent's name has stopped describing what's inside — flatten or extract, don't nest.
  2. Flatten with prefixed siblings, or collapse into one file. Before reaching for a subdirectory, ask whether the new thing is a sibling variant of an existing file (painter.rs + painter_debug_node.rs + painter_geometry.rs) or whether it collapses into the existing file. Both preserve the parent's scope; a new subdirectory quietly widens it.
  3. If it resists flattening, it is a new module. The thing that won't fit under the strict name doesn't belong there. It wants its own tiny, agnostic package or crate. The repo has many small @grida/* packages and small crates precisely because this extraction was made each time a sibling would have diluted the parent's name.

One module, one thing

The gate only works because each module commits to one thing. Two-thing modules can't enforce either scope — the name becomes ambiguous as a filter, and new additions slip in under whichever reading is convenient. When you notice a module doing two things, pick the primary, rename for it, and extract or delete the other. The repo's proliferation of tiny packages is this choice compounded.

The diff test

A well-named module exhibits two properties under change. Treat them as the measurable signal that naming is doing its work:

  1. A feature change lands in one file, or a tight set of sibling files. Diffs that scatter across unrelated modules mean the boundary isn't where the name implies it is.
  2. The file can be deleted with confidence. Remove it and the compiler or test suite will tell you exactly what else must go — or nothing does. If removal requires a cross-cutting hunt through unrelated names, the module was leaking all along.

A codebase where neither test passes easily has a naming problem dressed up as an architecture problem. The inverse is the real payoff: when both tests pass, code grows by adding siblings or spawning small packages, and it retires by a single git rm.

A name is a contract at the scope of its reach

The cost of a bad name is rename friction × fanout. Fanout is set by where the name is visible, and the difference is severe:

  • A directory is seen by whoever walks the tree. Rename cost: git mv + import updates. Cheap.
  • A published identifier (@grida/cg, Cargo name) is seen by every call site in every branch in every downstream repo. Rename cost: coordinated migration, deprecation window, semver break.

This asymmetry is why the directory name and the published name can diverge. packages/grida-canvas-cg publishes as @grida/cg: the long directory pays for browsability (the canvas family clusters in the file tree) where rename is cheap; the short scope pays for ergonomics where rename is expensive. The Rust side, by contrast, aligns — the engine repo's crates/grida (gridaco/nothing) publishes as grida because the core crate is also the project's public namespace, and keeping the two in lockstep removes a name to remember. Two different trade-offs; pick per surface. Invest heavily in a name before it escapes its file; once it's a public surface, the name is a commitment.

A name is a diagnostic

A name that feels hard to pick is telling you something about the module, not your vocabulary. Common tells:

  • Tempted to stamp the child with the parent's name. The parent isn't carrying its scope. Fix the parent — don't double-stamp. grida-canvas/canvas-text/ is the symptom; grida-canvas/text/ is the correction.
  • Can't name the new thing without qualifying against a sibling. The sibling is too close — you haven't factored the shared abstraction, or the two don't belong in this parent.
  • The strict name won't stretch to fit what you want to add. This is the system working. The answer is never to loosen the name; it's to flatten the addition as a sibling, or extract it.
  • Need a README paragraph to explain the module's name. The boundary is wrong. Names that require prose describe accidental groupings.

Naming is the cheapest design review you get. Listen to it when it resists.

Show full SKILL.md (534 more words)Show less

Terseness is a claim of uniqueness

Two-letter names (cg, fe, k/, q/) are not abbreviations — they are assertions that nothing else in this parent competes for the slot. The assertion is load-bearing; reviewers rely on it to mean "this is the canvas-graphics module," not "one of several."

The bar to mint one: would adding any peer to this parent make the terse name ambiguous? If yes, qualify now. If no, terseness pays — proportionally to how often the name appears at call sites. Long breadcrumb names earn their length by narrowing; every segment in grida-canvas-react-renderer-dom discriminates against a sibling that differs at that segment. Segments that don't narrow are decoration, and decoration erodes trust in the ones that do.

Order segments so tree-views become indices

The alphabetic sort in a file tree is the primary lookup index most readers use. Domain first, role last makes the tree a usable index — the canvas family clusters, its react variants cluster under that, the DOM renderer variant under that. Role-as-prefix inverts this and scatters siblings across the alphabet by what they do rather than what they're of. That's why *-hosted, *-wasm, *-react, *-renderer-<backend> are always suffixes.

Scope membership and lifecycle signals are governance

@grida/* and the grida-canvas-* package family are not filing conventions — they are assertions that these packages share release cadence, review ownership, and compatibility guarantees. Adding a package to the scope is a governance decision. react-p-queue lives unscoped because it doesn't derive identity from Grida.

The same is true of lifecycle signals in names — -legacy, -experimental-*, x- (cross-cutting / vendor-adjacent), -hosted. They carry more trust than documentation because they sit in the name itself, and that trust decays the moment they stop being accurate. Prune: promote out of experimental/ when the shape settles; remove legacy/ when the replacement is done; don't let x- become the label for "anything weird."

Test corpora want queryability, not hierarchy

A flat directory of kebab-breadcrumb filenames is an index optimized for grep and prefix-completion — the reader's first motion — not browsing. Nest only when a subfolder would be a browseable category a reader would open without knowing the case they want. Almost no real test corpus is that.

Route groups partition readers

(www) / (site) / (workbench) / (workspace) / (tenant) encode who is on the other side of the screen, not which feature lives here. Each group is a surface with its own auth, chrome, analytics, and deployability story. Adding a group is an architectural commitment; if it's a new feature for an existing reader, it belongs inside an existing group.

The short version

  • Name first. If you can't name it, you don't understand it yet.
  • A strict, honest name refuses the wrong content. That refusal is the engine of the repo's shape.
  • One module, one thing. Two-thing names can't gate anything.
  • Flatten with siblings, or extract a new module. Don't nest to hide scope drift.
  • The diff test: well-named modules produce per-file diffs and delete cleanly. Failing either test is a naming problem, not an architecture problem.
  • Public names are commitments; directory names are cheap. Let them differ.
  • Terseness is a uniqueness claim, not an abbreviation.
  • Scopes and lifecycle signals are governance — keep them honest.

See cases.md for concrete tables and the grandfathered short-name list.

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

Files

SKILL.md and 1 other file in .agents/skills/naming of gridaco/grida.

  • SKILL.md
  • cases.md

Open the folder on GitHubat commit 165496f

Compare with similar skills

Naming 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.

Naming compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Naming this skillgridaco/grida2.7k—~2.5kAutomated safety check: PassApache-2.0
Naming Conventionsthedaviddias/Front-End-Checklist74k—~481Automated safety check: PassMIT
Naming ConventionOwl-Listener/designer-skills2.9k1 repos~309Automated safety check: PassMIT
Campaign Naming Convention Builderirinabuht12-oss/marketing-skills3.9k—~717Automated safety check: PassNone
Standardize Naming Conventionsdata-goblin/power-bi-agentic-development1k—~1.8kAutomated safety check: PassGPL-3.0
Ecc Conventionsaffaan-m/ECC275k—~2.8kAutomated safety check: PassMIT

Similar skills

  • Naming Conventions

    thedaviddias/Front-End-Checklist

    A skill your agent uses when reviewing stylesheets, component styles, and responsive behavior related to Use consistent CSS naming conventions.

    74k GitHub stars~481 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Naming Convention

    Owl-Listener/designer-skills

    Establish naming rules for components, tokens, and layers with patterns and worked examples.

    2.9k GitHub starsUsed in 1 repo~309 tokens
    Frontend & DesignAuto-check passed
  • Campaign Naming Convention Builder

    irinabuht12-oss/marketing-skills

    Builds a consistent, filterable naming convention across your Google and Meta accounts based on your campaign types, objectives, targeting, and reporting needs.

    3.9k GitHub stars~717 tokensUpdated 14 days ago
    Marketing & SEOAuto-check passed
  • Standardize Naming Conventions

    data-goblin/power-bi-agentic-development

    Interactive naming convention standardization for TMDL-based Power BI semantic models.

    1k GitHub stars~1.8k tokensUpdated today
    Data & AnalyticsAuto-check passed
  • Ecc Conventions

    affaan-m/ECC

    Development conventions and patterns for ECC. An agent skill from affaan-m/ECC.

    275k GitHub stars~2.8k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Speculative Naming

    sgl-project/sglang

    Naming conventions for SGLang speculative decoding identifiers.

    37k GitHub starsUsed in 2 repos~1.6k tokens
    DevOps & CloudAuto-check passed

More from gridaco/grida

All 29 skills in this repo
  • Desktop

    gridaco/grida

    Grida Desktop Electron shell and release-impact work: BrowserWindow, preload, window.grida, menus, protocol/deep links, file associations, Forge, path-scoped bridge security, Electron-only UI bugs…

    2.7k GitHub stars~3.2k tokensUpdated today
    Auto-check: notes
  • Io Figma

    gridaco/grida

    Guides work on the Figma I/O package (@grida/io-figma, packages/grida-canvas-io-figma/).

    2.7k GitHub stars~2.2k tokensUpdated today
    Auto-check: notes
  • Opt Library

    gridaco/grida

    Set up, download, verify, and seed the optional Grida Library developer corpus into local Supabase.

    2.7k GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Vision

    gridaco/grida

    Query images with a local Ollama vision model without loading the image into the main agent context.

    2.7k GitHub stars~1.5k tokensUpdated today
    Auto-check passed
  • AI Models

    gridaco/grida

    Research, compare, and update shared AI model JSON for TypeScript, web, and Rust consumers.

    2.7k GitHub stars~5.7k tokensUpdated today
    Auto-check passed
  • Agent System

    gridaco/grida

    Grida AI agent system work: @grida/daemon (DaemonServer, loopback HTTP perimeter, files/workspaces, secrets store, daemon discovery) and @grida/agent (the agent tenant: sessions, providers/BYOK…

    2.7k GitHub stars~3.4k tokensUpdated today
    Auto-check passed

Questions about Naming

What does Naming do?

How to think about names in the Grida repo — not conventions, but what a name commits you to, reveals about the system, and costs to change. Naming is an agent skill from gridaco/grida. How to think about names in the Grida repo — not conventions, but what a name commits you to, reveals about the system, and costs to change.

When should I use Naming?

Naming fits situations like: planning a new package; test corpus — the name comes first.

How do I install Naming in Claude Code?

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

How do I install Naming in Codex?

Run `npx skills add gridaco/grida --skill naming -a codex`. Or copy the skill folder (.agents/skills/naming in gridaco/grida) into .agents/skills/naming in your project. Codex loads it when a task matches its description.

Can I use Naming 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 gridaco/grida --skill naming -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/naming, .gemini/skills/naming, .github/skills/naming and .opencode/skills/naming in your project.

What does Naming need to run?

Going by SKILL.md and its folder, Naming needs the command-line tools its instructions call (git).

Does Naming access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Naming 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 Naming use?

Naming is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Naming use?

About 2.5k tokens (SKILL.md is roughly 10k 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 Naming?

Skills that share tags, products or a category with Naming: Naming Conventions (thedaviddias/Front-End-Checklist, 74k stars), Naming Convention (Owl-Listener/designer-skills, 2.9k stars), Campaign Naming Convention Builder (irinabuht12-oss/marketing-skills, 3.9k stars) and Standardize Naming Conventions (data-goblin/power-bi-agentic-development, 1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Naming?

gridaco (a GitHub organization) maintains it in gridaco/grida, which has 2,659 GitHub stars. The repository holds 29 skills in this directory. The repository was last updated on October 7, 2026.

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