sahin.io

All skills and agents

standing-rules

The owner's standing rules for sahin.io/angel-investments and how to record a new one. Use whenever the owner says "always", "never", "this is a rule", "from now on" or "every time", before editing CLAUDE.md, and when unsure whether an owner preference applies.

Source file
.claude/skills/standing-rules/SKILL.md

Standing rules

Recording a new rule

When the owner says "always", "never" or "this is a rule", do this in the same turn. A rule that lives only in chat is lost.

  1. Write it into the skill that owns that work (create one if none fits), and list it below.
  2. If it needs a reviewer, add or update an agent in .claude/agents/.
  3. Enforce it some other way when you can: a test in server/*.test.ts, a gate or validator step, or a hook (update-config skill; user-level ~/.claude/settings.json when the rule is about more than this repo).
  4. Manus reads skills/. Point at the Claude skill there; don't copy it.
  5. Save it to agent memory.
  6. Keep CLAUDE.md thin (owner, 2026-10-11): at most a one-line pointer. server/claude-md-thin.test.ts fails when it grows past its limit.

The rules-keeper agent does steps 1–6 for you.

Rules

  • Keep CLAUDE.md thin; rules live in skills, agents, tests and hooks (owner, 2026-10-11).
  • Always keep angel-investments-performance (owner, 2026-10-11), the private Angel Simulator: never delete, archive, history-rewrite or scrub it. Enforced by a user-level hook. Details: private-data-boundary skill.
  • Private deal data and AngelList links never leave the Simulator (owner, 2026-10-11): private-data-boundary skill, private-data-auditor agent, server/private-deal-data.test.ts, pnpm privacy:bundle.
  • Only one IRR, the general one (owner, 2026-10-11: "IRR is ok, general IRR is ok, only one IRR is allowed, which is general"). The portfolio-wide figure lives only in data/portfolio-performance.yaml (generalIrr) via shared/portfolioPerformance.ts; copy uses {irr}. No per-company or per-deal IRR, no second IRR figure: private-data-boundary skill, server/general-irr-single-source.test.ts.
  • Never show a VC firm's logo or brand mark in a theme (owner, 2026-10-11: "this is a rule"). VC-inspired themes copy a firm's layout, type, colors and image style only; where the firm's page shows its logo, use Sahin's SahinMark (client/src/components/views/publicThemePrimitives.tsx). The theme gallery has no firm logo images.
  • No source notes or "(sourced)" labels on public pages (owner, 2026-10-11). Company values read "Market cap $2.21T" with the amount linking to its source (tooltip "Publisher, Mon YYYY") via shared/publicCompanyValueFormat.ts / server/publicCompanyValue.ts; research text passes through shared/sourceNotes.ts; never write "(Publisher, Month)" or "(sourced)" in copy.
  • Content lives in YAML + Markdown, not in code (owner, 2026-10-11: "no html code, yaml + markdown only"): page-content-yaml skill; server/content-in-yaml.test.ts fails when a page file gains inline copy (baseline content/migration/inline-copy-baseline.json).
  • Short company names come from data/company-display-names.yaml (e.g. Kraken). Run node scripts/company-display-names.mjs after editing it; the Airtable sync re-applies it. Slugs never change.
  • No accelerator cohort tags in company names (owner, 2026-10-12: "remove them from their name, this should be a rule"). "Ressl AI (YC W26)" is shown as "Ressl AI"; the slug stays. scripts/company-display-names.mjs strips (YC …) from every public data file, the Airtable plan reports the tagged Airtable name as kept, and server/company-name-no-cohort-tag.test.ts fails the gate if one returns.
  • Counts come from one source of truth: portfolio-counts-single-source skill, server/portfolio-status-single-source.test.ts.
  • Write public URLs in full (sahin.io/angel-investments/anthropic/angel-investors): public-url-conventions skill.
  • Airtable updates use the Manus view only: airtable-manus-sync skill.
  • Auto-ship mode is ON: ship-to-production skill. "auto-ship off" pauses it.
  • Every change runs the deploy gate: deploy-gate skill.
  • Every visible change shows before/after screenshots (desktop + mobile): ui-before-after skill.