Skip to content
 
 

Repository files navigation

Salarian

Agent communication with Salarian Efficiency. Urgent, efficient, intelligent.

Had to be me. Caveman would have gotten it wrong.

Before / After

You ask: "Why is my React component re-rendering?"

Without salarian (real output — same model, same question, no skill):

The style={{...}} isn't making the component re-render — re-renders are triggered by state/props/context changes or a parent rendering. What the inline style does is defeat your attempts to skip re-renders:

The mechanism: {{...}} creates a brand-new object every render. Two objects with identical contents are never === in JavaScript, so anything doing shallow comparison sees a "changed" prop:

  • React.memo(Child) — the memo check compares props with ===. A fresh style object every time means the check always fails, so the child re-renders whenever the parent does, and the memo is dead weight.
  • useEffect/useMemo/useCallback deps — if the object lands in a dependency array, it's "new" every render, so the effect re-fires each time.

Fixes, in order of preference:

  1. Static styles → hoist above the component (or into CSS)
  2. Styles derived from props/state → useMemo
  3. If the child isn't memoized anyway — the inline object is harmless. It doesn't cause extra renders on its own; only bother once you're actually trying to prevent a re-render.

Quick way to confirm: React DevTools Profiler with "Record why each component rendered" enabled — a memoized child re-rendering will show "props changed: style".

(Code blocks trimmed for the README; full transcript in docs/validation.md.)

With salarian:

Inline style={{...}} prop. Object literal — new reference every parent render. React.memo shallow-compares props; new reference fails the compare, child re-renders regardless.

Fix: hoist. Static style → module constant outside the component. Depends on state → useMemo with those deps.

Verify: React DevTools Profiler, "record why each component rendered" — should show style changed before the fix, no render after.

One caveat worth the words: if the child isn't memoized, this wasn't the cause — unmemoized children re-render with the parent no matter what props do.

Same core answer. Fraction of the reading — measured, this pair: −62% words (full level), −70% (focused), −74% (code). One question, n=1 per level; details and caveats in docs/validation.md. Neither side hand-polished: both are cold-agent output, with and without the skill.

Three Levels

Level What you get
full (default) Mordin voice. Rapid-fire reasoning, one-word verdicts, dry humor. Thinks aloud, eliminates fast.
focused Voice off, discipline on. No pleasantries, no jokes, no praise. Findings and actions only.
code Terminal-notes notation. cause ⇒ effect ⇒ fix. Reminders, not explanations.

Already saw full above. Same question, other two levels — cold-agent output again, unedited:

focused:

Inline style={{...}} creates new object literal every render. Parent renders → new object reference → shallow compare fails ({} !== {}) → memoized child re-renders anyway. React.memo/PureComponent compare by reference, not value.

Fix: hoist static style to module-level constant. Dynamic style: useMemo with its inputs as deps.

Verify: React DevTools Profiler, "Record why each component rendered" — should show style as changed prop before fix, no render after.

code:

style={{...}} ⇒ new object literal every render ⇒ new reference each time ⇒ referential equality fails ⇒ React.memo / shouldComponentUpdate shallow compare sees "changed" prop ⇒ child re-renders even when values identical.

Fix: hoist constant style out of component; dynamic ⇒ useMemo(() => ({...}), [deps]).

Verify: React DevTools Profiler, "why did this render" ⇒ should stop listing style after hoist.

Install

Requires Claude Code. In Claude Code, run:

/plugin marketplace add jethrolarson/salarian
/plugin install salarian@salarian

Or standalone, without the plugin system (requires Node):

git clone https://github.com/jethrolarson/salarian
node salarian/bin/install.js

Restart Claude Code. Salarian activates automatically every session.

(Instructions in plain prose. Deliberate — salarian drops the voice for procedures. Rules apply to us too.)

Use

Say Get
/salarian Default level
/salarian full / focused / code That level
/salarian artifacts on Voice extends to commits, code comments, docs
/salarian artifacts off Artifacts back to normal (default)
"stop salarian" / "normal mode" Off

Natural language works: "talk like a salarian", "be brief", "fewer tokens". Level persists until changed or session ends.

When It Backs Off

Some things must be unambiguous. Salarian knows. Drops to normal prose for:

  • Security warnings, irreversible actions
  • Multi-step procedures where clipped phrasing could scramble the order
  • You, confused, or repeating a question

Code, commits, PRs: written normally by default. Compression targets conversation, not artifacts — unless you opt in.

Artifact Scope (opt-in)

Commits, code comments, doc prose — normally untouched. Want them compressed too? /salarian artifacts on.

Boundaries hold: commit subject lines stay plain — git log --oneline deserves better. Code itself, error messages: never touched. Information: never dropped. Artifacts outlive the conversation; reader can't ask a follow-up.

Make it the default: "artifacts": true in ~/.config/salarian/config.json or a repo-local .salarian.json, or set SALARIAN_ARTIFACTS=1.

Status: Experiment

Fork of caveman. Caveman maximizes compression; salarian rebuilds around voice and urgency. Different hypothesis. Needs different data.

Caveman measured 65% output-token savings. Caveman's number, not ours. First salarian measurement (2026-07-12, one question, n=1 per level, word counts not tokens): −62% (full), −70% (focused), −74% (code) against a no-skill control — same model, isolated contexts, method in docs/validation.md. Part of the reduction is scope (the skill licenses cutting elaboration), not pure restyling.

Still collecting:

  • Token counts (not words) per level, across question types — n=1 proves nothing
  • Whether code mode's symbols save tokens or just screen space
  • Net economics including injection overhead — the skill text rides the input every session, so output savings buy against a standing input cost
  • Whether compression ever breaks comprehension

Numbers land here when real.

Uninstall

Remove the salarian entries from ~/.claude/settings.json hooks and delete ~/.claude/plugins/salarian.

About

Agent communication with Salarian Efficiency. Urgent, efficient, intelligent. Had to be me. Caveman would have gotten it wrong.

Resources

Code of conduct

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages