Imported from cristiantx/pluma (
AGENTS.md). Install upstream withnpx skills add cristiantx/pluma. Copyright stays with the author.
Agent Notes
-
Pluma is a desktop app, not a website. Do not add responsive media queries or mobile breakpoint behavior to the desktop shell unless explicitly requested.
-
Keep app UI density, fixed-pane structure, and desktop interaction patterns intact.
-
Follow React component hygiene in renderer code:
- One component per file.
- Use named exports, not default exports.
- Name component files with
PascalCase.tsx. - Name hooks, view helpers, state modules, and other non-component files with
camelCase.ts.
-
Keep folder naming explicit and stable:
- Use lowercase feature folders such as
components/shell. - Colocate feature-local components, helpers, and tests when they primarily serve one surface.
- Avoid vague buckets and dead files.
- Use lowercase feature folders such as
-
Keep files small and responsibility-focused across the repo:
- Avoid adding unrelated behavior to already-large files.
- When any source file approaches roughly 300 lines, look for a clear split before adding more behavior.
- Prefer extracting by responsibility or feature surface over creating generic buckets such as
helpers,utils, orlib. - Entry points should stay thin and delegate to explicit modules.
-
Prefer semantic HTML and keyboard-safe controls:
- Use real
button,nav,header,aside,section, andfooterelements. - Do not use clickable
divelements for interactive controls.
- Use real
-
Keep renderer boundaries clean:
- Shared presentation and view logic belong in renderer modules.
- Electron-only windowing, dialogs, menus, preload, and IPC glue stay out of presentational components.
-
Keep desktop main-process modules small and explicit:
apps/desktop/src/main.tsshould stay a thin entrypoint that wires runtime constants into main-process modules.- Do not add feature logic directly to
main.ts; place Electron app lifecycle, IPC registration, menus, dialogs, workspace operations, file watching, and session/save behavior in explicit files underapps/desktop/src/main/*. - Avoid vague buckets such as
helpersorlibfor main-process code; prefer folders likemenus,dialogs,workspace,watching,persistence,ipc,windows, orsession.
-
Use typed shared state when renderer coordination starts crossing shell boundaries:
- Prefer the shared Zustand store for shell-wide theme, tabs, workspace, and status state.
- Define and export explicit slice, snapshot, and action types.
- Use narrow selectors in components instead of broad store reads.
- Keep domain logic in
packages/core; the store coordinates UI state, not product rules.
-
Remove unused renderer dependencies and stale component files when replacing an approach.
-
Delegate independent, bounded work when it can run alongside useful lead work; keep at most three subagents active.
-
Use the parent model with
reasoning_effort: "low"for routine inventories, focused accessibility fixes, fixtures, documentation, and validation. Usefork_turns: "none"or limited context when overriding reasoning, and supply scope, owned files, repository rules, and acceptance criteria explicitly. -
Keep cursor geometry, shared editor-state architecture, merge decisions, and final integration with the lead. Escalate complex findings to the lead rather than guessing.
-
Avoid concurrent edits to shared files or generated artifacts. Isolate browser sessions, require verification reports, and review every contribution before final validation.