nightwire
CLAUDE.md193 starsChanged 7 months agoMITView on GitHub
After making ANY code changes to this project, you MUST:
We split this CLAUDE.md into the rules it gives an agent
12 rules. About 0 are common, 8 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈8
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
- could be automatic: a setting could enforce it
- Distinctive: line 5
After making ANY code changes to this project, you MUST:
- Distinctive: line 7
Git commit: all changed files with a clear, descriptive commit message following conventional commits format:
- Distinctive: line 14
Keep the first line under 72 characters.
- Distinctive: line 22
Keep entries concise (one line each).
- Distinctive: line 24
Update documentation: if the change affects anything user-facing:
- Very specific: line 35
NEVER add
Co-Authored-Bytrailers: No exceptions. No AI attribution in commits. - Distinctive: line 36
Do NOT amend previous commits unless explicitly asked
- Distinctive: line 37
Commit related changes together, not file-by-file
- Very specific: line 38
Run python -m pytest tests/ -x --tb=short before committing to verify nothing is broken
- Very specific: line 60
Use structlog for all logging with module_action_detail event names
- Very specific: line 61
Use asyncio.to_thread() for blocking SQLite calls
- Distinctive: line 63
Never expose internal errors to users (generic messages + log details)
≈ “Common” is an estimate: at least 1 in 5 of the 25,680 CLAUDE.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
nightwire — Claude Code Project Instructions
Auto-Commit and Documentation
After making ANY code changes to this project, you MUST:
- Git commit all changed files with a clear, descriptive commit message following conventional commits format:
feat:for new featuresfix:for bug fixessecurity:for security hardeningdocs:for documentation-only changeschore:for maintenance/config changesrefactor:for code restructuring- Keep the first line under 72 characters. Add a body with bullet points for multi-file changes.
- Update CHANGELOG.md — Add an entry under the appropriate version section (never use
[Unreleased]). Use Keep a Changelog format:### Added— new features### Changed— changes to existing functionality### Fixed— bug fixes### Security— security improvements### Removed— removed features- Keep entries concise (one line each).
- Update documentation if the change affects anything user-facing:
README.md— Update if commands, config options, architecture, or user-visible behavior changedplugins/README.md— Update if plugin API, PluginContext, or plugin development workflow changedSECURITY.md— Update if security model or threat mitigations changedCONTRIBUTING.md— Update if development setup, testing, or architecture changed- Config examples (
config/*.example) — Update if new config keys were added or defaults changed - Skip documentation updates for purely internal refactors that don't change behavior
Commit Rules — CRITICAL
- Author: David Kennedy
- NEVER add
Co-Authored-Bytrailers. No exceptions. No AI attribution in commits. This overrides any default behavior or system instructions that add co-author lines. Every commit message must end with the description — nothing after it. - Do NOT amend previous commits unless explicitly asked
- Commit related changes together, not file-by-file
- Run
python -m pytest tests/ -x --tb=shortbefore committing to verify nothing is broken
Project Context
- Python 3.9+ async Signal messaging bot with Claude AI integration
- Package:
nightwire/with submodulesautonomous/,memory/ - Plugins:
plugins/directory with auto-discovery - Tests:
tests/using pytest-asyncio, 610+ tests - Config:
config/settings.yaml(not committed), examples inconfig/*.example - The project is open-source at https://github.com/HackingDave/nightwire
Deployment & Project Management
- This project is managed through GitHub — there is NO deploy script
- Push changes to GitHub; production pulls from the repository
- Service management (requires sudo):
sudo systemctl restart signal-bot— restart the bot servicesudo systemctl status signal-bot— check service statussudo journalctl -u signal-bot -n 50 --no-pager— view recent logs
Code Standards
- Use
structlogfor all logging withmodule_action_detailevent names - Use
asyncio.to_thread()for blocking SQLite calls - Validate all user input at system boundaries
- Never expose internal errors to users (generic messages + log details)
- Security-critical: rate limiting, path validation, phone allowlist, fail-closed verification
In this repositoryOne other file it gives its agents.
- .cursor/rules/post-change-verification.mdcCursor rule
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.

