Automated summary
Defines the repository house style for every file: roughly 50-column lines, 2-space indentation, flat structure, and explanatory comments that define each acronym.
Strengths
- A concrete, checkable threshold (52 columns) backed by a ready-to-run awk one-liner
- Wrapping patterns demonstrated in both JS and Rust: break after operators, before logical operators, at dots in chains
- A clear anti-nesting doctrine: guard clauses, early returns, extraction into named helpers
- Specific comment conventions (file header banner, section rules, block comments above the code they explain)
Limitations
- The narrow width is justified by a personal phone-preview use case and can clash with automatic formatters such as Prettier or rustfmt
- The 'unbreakable token' exemption relies on human judgment and cannot be mechanised
- Offers little tooling beyond a single ad-hoc awk command
Load it before writing or editing any file in the repo so the output matches the house style from the first pass.
For an outside project whose formatting is already enforced by a team linter or formatter.
Security analysis
SafeThis is a writing/style guide with no declared tools and no instructions to execute destructive, network, or secret-handling actions. The only shell snippet is a read-only awk line-length checker.
No concerns found
How this analysis is madeExamples
Rewrite src/parser.js in the narrow house style: wrap every line at 50 columns, keep 2-space indentation, and add the framed file header banner explaining what the file is.Review this Rust file against the narrow house style — flag lines over 52 columns, nesting deeper than three levels, and any acronym used without a defining comment.Reformat config/pipeline.yml to about 50 columns with 2-space indent, keeping long tokens on their own lines and adding short explanatory comments above each section.name: narrow description: The house style for EVERY file in this repo — source, tests, docs, configs. ~50-column lines (they fit Michael's phone preview pane), 2-space indent, flat structure, and rich explanatory comments that define every acronym. Load this before writing or editing any file.
narrow — the house style
Applies to all files: source, documentation, tests, configs, mailbox messages. No file type is exempt; only unbreakable tokens are (below).
1. The rule, verbatim
Source lines <= ~50 columns (they fit his phone preview pane). 2-space indent. Deep nesting is a design smell — flatten or extract.
And its two companions, also verbatim:
Define every acronym at its definition site in a comment the first time it appears (RPN = Reverse Polish Notation, TTS = Text To Speech, DHT = Distributed Hash Table, DI = Dependency Injection, etc.).
Comments are rich and explanatory on purpose — he loves reading the code. Match that voice.
2. Interpreting "~50"
-
Aim at 50. The
~is a small grace, not a loophole: the working checker in this repo flags anything past 52:awk 'length > 52 {print FILENAME":"FNR}' *.js -
Unbreakable tokens are exempt: a long URL, a base58 program id, a JSON string value, a markdown table row. Put the token on its own line; keep the prose around it narrow.
-
WHY 50: lines fit a phone preview pane. The code is read on a phone more often than on a monitor. If it wraps there, it's wrong here.
3. Wrapping patterns (examples)
Break after operators/commas, indent the continuation 2 spaces (or align into the call):
// BAD — 80 wide, unreadable on the phone
const e = { ...ev, _seq: seq, _at: ev._at || now(), _id: ev._id || nodeId + ':' + seq };
// GOOD — the same object, narrow
const e = {
...ev, _seq: seq,
_at: ev._at || now(),
_id: ev._id || nodeId + ':' + seq,
};
// GOOD — conditions split before operators
if (top.kind !== 'op') break;
if (tp > p || (tp === p && a === 'L'))
out.push(st.pop());
// GOOD — rust chains break at the dot
ben.balance = ben
.balance
.checked_add(amount)
.ok_or(LedgerError::Overflow)?;
Flatten instead of nesting: early-return, or extract a named helper. Three indent levels is the smell threshold.
// BAD — nesting as control flow
if (a.type === 'KEY') {
if (k === 'C') {
return [{ type: 'Cleared' }];
} else { ... }
}
// GOOD — guards, one level
if (action.type !== 'KEY') return [];
if (k === 'C') return [{ type: 'Cleared' }];
4. Comments — where they go
File header banner (every source file): a framed block stating what the file IS, the philosophy it carries, and any diagram worth drawing. Pattern:
/* ==============================================
* NAME — one-line role (<=50 col house)
* ----------------------------------------------
* Several sentences of real explanation. Why
* this exists, what doctrine it enforces, what
* the reader must not break.
* ============================================ */
Section rules split a file into named parts:
// -- the event tape -----------------------
// ---- instruction contexts -------------------
Block comments ABOVE the code they explain — a short paragraph before a function or a tricky region, never a novel inside it:
// fold one event, notify, return its effects.
// an event carries identity (_id) and origin
// (_origin = the node that first decided it) so
// sync can dedup and avoid echo loops.
function commit(ev) { ... }
Trailing comments only for tiny labels that fit the same line:
const log = []; // append-only facts
const RATE: u64 = 100; // tokens per cent
5. Comments — the voice
- Rich and explanatory on purpose. The comments teach; the reader is here for pleasure as much as reference. Explain WHY and the doctrine, not what the next line syntactically does.
- Define every acronym at first use, in a
comment, at its definition site:
PDA = Program Derived Address,SBF = Solana Bytecode Format. - State invariants in CAPS where they matter:
THE LOG IS NEVER REWRITTEN. - It's fine — encouraged — for a comment to carry personality ("a browser is enemy territory for secrets"), as long as it's also precise.
6. Tests and docs too
- Test files open with the same banner, and it
lists the numbered claims the file proves.
Test names are sentences:
ok('log keeps originals — never rewritten', ...). - Markdown prose wraps at ~50 like everything else; long links/table rows are the exempt tokens. Headers small and frequent; tables for status, prose for reasoning.
- 2-space indent everywhere, including YAML, JSON (where formatting is ours to choose), and shell.
From the file to a first result
The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.
View the source and supporting filesThis download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.
1. Download the file
Download SKILL.mdFrom the root of a test project, save the file as .skill-downloads/narrow-house-style-mryiqfum/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.
Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.
mkdir -p '.skill-downloads/narrow-house-style-mryiqfum' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/narrow-house-style-mryiqfum/download' --output '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md.part' && mv '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md.part' '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md'2. Check prerequisites
Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.
No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.
The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.
3. Load the skill
After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.
Claude Code
test -f '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md' && test -s '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/narrow' && cp -R '.skill-downloads/narrow-house-style-mryiqfum' '.claude/skills/narrow'Cursor
test -f '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md' && test -s '.skill-downloads/narrow-house-style-mryiqfum/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/narrow' && cp -R '.skill-downloads/narrow-house-style-mryiqfum' '.cursor/skills/narrow'OpenSkills
OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.
Official OpenSkills installationopenskills install './.skill-downloads/narrow-house-style-mryiqfum'openskills read 'narrow-house-style-mryiqfum'Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.
For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.
openskills syncManual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.
4. Try a first task
Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:
Read .skill-downloads/narrow-house-style-mryiqfum/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.
React Hook Form Best Practices
Development
Master React Hook Form: avoid anti-patterns, manage subscriptions, and handle reset, dirty state, and controlled inputs correctly.
Emotion to Mantine Migration
Development
Migrate Emotion styled-components to Mantine components with style props and CSS modules. Use when converting .styled.tsx files or removing @emotion imports.
Scope Creep Detector
Development
Analyzes git diffs against a stated intent to detect scope creep, unrelated files, broad PRs, and oversized changes, then suggests keep, split, or justify actions.