Thank you for considering contributing to Knowns!
Before you start, please read our Philosophy to understand the principles that guide this project.
Knowns is intentionally minimal. Before adding a feature, ask:
- Does this align with the philosophy?
- Can this be achieved with existing primitives (tasks, docs, refs)?
- Will this add complexity for all users, or just some?
We'd rather have fewer features that work well than many features that complicate.
Any new feature must respect that .knowns/ files are the source of truth.
- Don't introduce hidden state
- Don't require a database
- Make sure data survives without Knowns
The CLI is the primary interface. New features should:
- Work fully from CLI
- Have
--plainoutput for AI consumption - Be scriptable and composable
Web UI can visualize, but shouldn't be required.
Output should be optimized for AI agents:
- Structured, predictable format
- References that resolve to real files
--plainflag for machine consumption
- Node.js >= 18
- Bun (for development)
# Clone the repo
git clone https://github.com/knowns-dev/knowns.git
cd knowns
# Install dependencies
npm install
# Run in development mode
npm run dev
# Run tests
npm run test
# Lint
npm run lintsrc/
├── commands/ # CLI commands
├── models/ # Domain models
├── storage/ # File operations
├── server/ # Express server
├── mcp/ # MCP server
├── ui/ # React frontend
└── utils/ # Shared utilities
See ARCHITECTURE.md for detailed documentation.
git checkout -b feature/my-feature
# or
git checkout -b fix/my-fix- Write clear, minimal code
- Follow existing patterns
- Add tests for new functionality
- Update documentation if needed
npm run test
npm run lintWrite clear commit messages:
feat: add time tracking pause/resume
- Add pause and resume subcommands
- Store pause state in .timer file
- Update time report to handle paused sessions
- Describe what you changed and why
- Reference any related issues
- Be open to feedback
- Bug fixes with tests
- Documentation improvements
- Performance optimizations
- Accessibility improvements
- CLI usability enhancements
- New commands or major features
- Changes to file format
- New dependencies
- Architectural changes
Please open an issue to discuss before starting work on these.
- Features that add significant complexity
- SaaS-style features (user accounts, cloud storage)
- Heavy dependencies for marginal benefit
- Changes that break file-first philosophy
We use Biome for linting and formatting.
# Check
npm run lint
# Auto-fix
npm run lint:fix- Use TypeScript strictly
- Prefer functions over classes
- Keep files focused and small
- Use meaningful names
- Write self-documenting code
- Add comments only when logic isn't obvious
We use Vitest for testing.
# Run all tests
npm run test
# Run specific test
npm run test -- src/models/task.test.ts
# Watch mode
npm run test -- --watch- Domain logic (models)
- Storage operations
- Command behavior
- Edge cases
- UI components (for now)
- Third-party libraries
- Trivial code
- New commands → update
docs/commands.md - New concepts → update relevant doc
- Breaking changes → update README + CHANGELOG
- Be concise
- Use examples
- Show, don't just tell
- Keep AI-readability in mind
Maintainers handle releases. The process:
- Update version in
package.json - Update
CHANGELOG.md - Create git tag
- Push to npm
- Issues: Report bugs, suggest features
- Discussions: Ask questions, share ideas
- Pull Requests: Contribute code
Please be respectful and constructive.
By contributing, you agree that your contributions will be licensed under the MIT License.
Open an issue or start a discussion. We're happy to help!