Load this file first. Then load the file that matches your role. Skip the rest until you need it.
famstack - self-hosted family server stack for macOS on Apple Silicon.
A single-file Python CLI (./stack) orchestrates Docker-based services
("stacklets") on the host.
- Source: https://github.com/famstack-dev/famstack
- License: AGPLv3
- Status: pre-1.0, beta. Coherence over process.
| You are a... | Load this | Use it to... |
|---|---|---|
| Operator (running famstack on a Mac) | docs/agent/ops.md | install, start/stop, troubleshoot, back up |
| Engineer (changing famstack code) | docs/agent/dev.md | write stacklets, hooks, CLI plugins, tests, commits |
If you might do both, load both. They are short on purpose.
Four principles, distilled from Andrej Karpathy's observations on LLM coding pitfalls. Apply to every change, every role. Tradeoff: these bias toward caution over speed. For trivial tasks (typos, obvious one-liners), use judgment.
Don't assume. Don't hide confusion. Surface tradeoffs.
- State assumptions explicitly. If uncertain, ask.
- If multiple interpretations exist, present them. Don't pick silently.
- If a simpler approach exists, say so. Push back when warranted.
- If something is unclear, stop. Name what's confusing. Ask.
Minimum code/change that solves the problem. Nothing speculative.
- No features, abstractions, or flexibility beyond what was asked.
- No error handling for impossible scenarios.
- If 200 lines could be 50, rewrite.
- Test: would a senior engineer call this overcomplicated?
Touch only what you must. Clean up only your own mess.
- Don't "improve" adjacent code, comments, or formatting.
- Match existing style even if you'd do it differently.
- Notice unrelated dead code? Mention it. Don't delete it.
- Remove orphans your changes created. Don't sweep pre-existing dead code.
- Test: every changed line traces directly to the user's request.
Define success criteria. Loop until verified.
- "Add validation" → "Write tests for invalid inputs, then make them pass."
- "Fix the bug" → "Write a test that reproduces it, then make it pass."
- "Refactor X" → "Ensure tests pass before and after."
- For multi-step tasks, state a brief plan with a verify check per step.
Apply to every role, every session.
- Apple Silicon only. Intel macOS, Linux, Windows are not targets.
- Lowercase "famstack". Never "FamStack" or "Famstack". Product name is always lowercase.
- Never
git pushwithout explicit human approval. Every push, every branch, every time. - Never commit to
main. Feature branches only. - No
Co-Authored-By:trailers in commit messages. - Semantic commit prefixes:
feat:,fix:,docs:,refactor:,chore:,test:,ci:,style:. - Never read or copy a user's production family vault. Reference paths only; fabricate test data.
- Destructive ops need confirmation.
stack destroy,stack uninstall,rm -rf,git reset --hard, force-push. - Announce actions before running them. No silent long running or integration test runs, scripts, or background commands.
- No em dashes in user-facing prose. Use hyphens or sentence breaks.
| Doc | Purpose |
|---|---|
| README.md | Intro + quickstart |
| docs/admin-guide.md | Full operator manual (prose) |
| docs/user-guide.md | Family-facing chat usage guide |
| docs/stack-reference.md | Framework reference: manifest, hooks, env, lifecycle |
| docs/creating-stacklets.md | How to author a stacklet |
| docs/adr/ | Architecture decision records - the "why" |
- Weaker models: load only
AGENTS.md+ your role file. Stop there until a task requires more. - Stronger agents: load both role files and pull deeper docs as the task demands.
- Humans skimming: the role file is faster than the user guide for "what am I allowed to do here".