paneline
AGENTS.md9 starsChanged 18 days agoMITView on GitHub
A Claude Code plugin: a side pane with tabs, a status row above the input and a restyled chat. TypeScript and React hooks that the engine reloads while it runs. Tasks live in backlog/. Every change has one task. Do not start work without one. Never edit files in backlog/ by hand. A new feature starts as a task whose acceptance criteria say what the user sees. One line, no body, no trailers: <type>(<scope>): <short description>, for example feat(files): add…
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,542 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository5 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- add-pane-tabSkill
- live-checkSkill
- visual-reviewSkill
- write-testSkill
The file
We split this AGENTS.md into the rules it gives an agent
7 rules. About 0 are common, 3 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈3
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
Run the gate, commit, then set Done: backlog task edit <id> -s Done, with a one-line final summary.
- Very specific: line 14
Never edit files in backlog/ by hand.
- Distinctive: line 29
No comments. Rename or restructure instead.
- Very specific: line 30
Use type, not interface. ESLint runs strict type-checked rules with zero warnings.
- Distinctive: line 33
No timers or polling. Sessions run in parallel, so refresh on events.
- Distinctive: line 36
Do not add private paths, names or emails to any file.
- Very specific: line 45
Test names start with a scenario id: M1 the tab opens with a title.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
paneline
A Claude Code plugin: a side pane with tabs, a status row above the input and a restyled chat. TypeScript and React hooks that the engine reloads while it runs.
Task flow (Backlog.md)
Tasks live in backlog/. Every change has one task. Do not start work without one.
- Find a matching task, or create one. Use the
backlogCLI. - Move it to In Progress:
backlog task edit <id> -s "In Progress". - Work. Check each acceptance criterion when it is true:
--check-ac <n>. - Run the gate, commit, then set Done:
backlog task edit <id> -s Done, with a one-line final summary.
Never edit files in backlog/ by hand. A new feature starts as a task whose acceptance criteria say what the user sees.
Gate
npm run checkruns lint, format check, typecheck and tests.claude plugin validate .checks the manifest and the hooks the way the engine will load them.- Both must pass before a commit. Husky runs lint-staged and typecheck on commit. Never use
--no-verify. .claude-plugin/types/is not tracked. The engine writes it when it loads the plugin from a folder. If lint or typecheck fail onclaude-codetypes, runclaude plugin validate .once, then retry.
Commits
One line, no body, no trailers: <type>(<scope>): <short description>, for example feat(files): add reset button. Split a change that does not fit one line.
Code rules
- No comments. Rename or restructure instead. Allowed: lint pragmas, and a one-line link to an external bug or spec.
- Use
type, notinterface. ESLint runs strict type-checked rules with zero warnings. - Name every number as a constant.
- Colours are engine theme keys from
hooks/palette.ts. No hex, no colour names. ESLint fails a hex string inhooks/. - No timers or polling. Sessions run in parallel, so refresh on events. The one exception is the Agents tab poll, which runs only while that tab is open.
- Fetches that can overlap go through
hooks/single-flight.ts. A burst of measure events must not refetch MCP or Context data. - Pane look follows Claude Code's own
/contextand/mcpscreens. The accent colour follows the session/color. - Do not add private paths, names or emails to any file.
Engine limits
The plugin loader and validator are strict. Read docs/engine-limits.md before you split a file or add a hook. Short version: declare each atom in every file that uses it, never pass $ to a function from another file, use matchers when one event has several hooks, keep types/index.d.ts free of imports.
Tests
- One file per area in
tests/, named<area>.test.tsor.test.tsx. Onlyclaude plugin test .runs them. - Test names start with a scenario id:
M1 the tab opens with a title. - Assert what is drawn and which state is written, not internals.
- Steps are in
.claude/skills/write-test/SKILL.md.
Module map (hooks/)
register.ts: entry point. Calls the pane shell, eachtrack*function,registerTabs, the/panelinecommand andrenderChat.tabs.ts: the list of pane tabs. A new tab is one entry there plus one register call.*-tab.tsx: one file per pane tab. Exports the tab id and label and registers its render hook.*-draw.tsx,pane-kit.tsx,tab-bar.tsx,tree-glyphs.ts: pane bodies (pure functions) and shared pane rows.session-pane.tsx,pane-tab.ts,shown-tab.ts: the pane shell, the pane id and the shown-tab memory.*-track.ts,prompt-info.tsx,breakdown.ts: event hooks and data loaders that fill state.git-run.tsruns git for the trackers.format.ts,paths.ts,tools.ts,servers.ts: shared helpers for text, paths, tool calls and MCP servers.chat-render.tsx,chat-draw.tsx,reply-*.ts(x),markdown.ts,diagram*.ts(x),table-draw.tsx,diff-panel.tsx,panel.tsx: chat rendering.palette.ts,session-color.ts,text-width.ts,memo.ts,single-flight.ts,probe.ts: shared helpers.vendor/: third-party code, seehooks/vendor/THIRD_PARTY_NOTICES.md. Do not edit.types/index.d.ts: the plugin's own state contract. Add new state keys here.
Where to read more
docs/architecture.md: how events, state and drawing connect.docs/engine-limits.md: loader and validator limits.- Skill
add-pane-tab: read it before adding or changing a tab of the side pane. - Skill
live-check: run the plugin in a real session and read the screen. - Skill
write-test: write a test. CONTRIBUTING.md: the short version for people.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

