Actually legible
Architectural taste for TypeScript and React coding agents. Minimize conceptual surface area, preserve clear dependency direction, and produce code humans can navigate, review, and evolve. Use when implementing, refactoring, reviewing, scaffolding, or organizing TypeScript and React code, including modules, imports, exports, folders, files, functions, components, hooks, naming, and comments.From its SKILL.md
npx -y skills add Chillsbro/actually-legibleAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- 22 days oldThe repository was created 22 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.1 KB, 936 tokens by cl100k_base, as published. Nobody here has run it
Actually Legible
Apply these rules to authored or modified code. Preserve externally imposed interfaces and established repository conventions when changing them would break compatibility or create unrelated churn.
Design
- Minimize total conceptual surface area: files, folders, exports, abstractions, dependency hops, and code. Add a seam only when it improves cohesion, navigation, reuse, testability, or dependency direction.
- Keep declarations together when they change for the same reason. Split a file when the result has a clearer interface or dependency direction, not solely because of its length or number of exports.
- Treat 100 lines as a prompt to inspect cohesion, never as a mechanical limit.
- Keep private helpers beside their sole caller when extraction would add navigation without independent meaning or reuse.
- Use short, descriptive names. Avoid opaque placeholders such as
s,e,n, andobjoutside conventional tiny scopes where their meaning is unmistakable. - Prefer names and structure over explanatory comments. Comment only necessary constraints, non-obvious reasons, externally imposed behavior, or deliberate tradeoffs.
- Implement the smallest complete solution that remains readable. Avoid speculative abstractions, wrappers, configuration, and fallback paths.
Modules and Imports
- Prefer direct imports between files inside an application or module. Make the actual dependency visible.
- Add a barrel only when it is a deliberate consumer-facing entry point. A folder does not need an
indexfile merely because it exists. - Never import a module's barrel from within that module's own implementation. Import the owning file directly to avoid hidden cycles and inflated dependency graphs.
- Export names explicitly from public entry points. Avoid
export *when it obscures ownership or unintentionally expands the supported interface. - For published packages, define supported entry points with
package.jsonexports; do not rely on folder barrels to enforce encapsulation. - Use
import typeandexport typefor type-only dependencies. - Match
moduleandmoduleResolutionto the real runtime or bundler. Prefermodule: "preserve"withmoduleResolution: "bundler"for Bun and modern bundler-owned applications unless the host requires another mode. - Do not introduce TypeScript
pathsaliases as a style preference. They do not rewrite runtime imports. Use runtime-supported package imports or workspace packages only when repeated deep imports create a demonstrated navigation problem. - Consider
verbatimModuleSyntaxwhen the project benefits from explicit type/value import behavior, andnoUncheckedSideEffectImportswhen it uses side-effect imports.
Structure
- Organize source by functional area or domain before generic technical category.
- Extend the area that owns a behavior before creating an overlapping
utils,helpers,common, ormiscmodule. - Create a folder only when it groups a meaningful area or multiple cohesive files. Do not create a folder solely to wrap one file.
- Name implementation files after their main concept, operation, hook, component, or type.
- Keep a type beside its sole consumer. Move shared domain types to the narrowest common owner rather than a global type bucket.
- Follow framework naming and placement conventions when they improve recognition or tooling support.
- Follow the repository's existing test layout unless changing it is part of the task.
Workflow
- Inspect nearby code, compiler settings, package metadata, and established import patterns.
- Identify the functional area that owns the behavior and the smallest compatible change.
- Trace dependency direction before adding a file, export, barrel, alias, or abstraction.
- Reuse existing code when doing so preserves cohesion; do not reuse merely to avoid a small local implementation.
- Implement the shortest clear solution.
- Update a public entry point only when the change intentionally alters its supported consumer interface.
- Remove redundant branches, comments, types, wrappers, files, and exports introduced by the change.
- Verify with the smallest relevant typecheck, test, lint, or build command.
- Recheck cohesion, dependency direction, public surface area, naming, and avoidable indirection.
Exceptions
- Do not edit generated, vendored, or third-party files solely to satisfy this style.
- Preserve framework-mandated file shapes, overloads, declaration layouts, and public interfaces.
- Keep cohesive declarative structures such as schemas, lookup tables, reducers, and related operations intact when splitting them would reduce clarity.
- Prefer correctness and compatibility over these heuristics, then minimize conceptual surface area.
What ships with it: 3 files
3.0 KB alongside SKILL.md
agents/
- openai.yaml229 B