-
-
Notifications
You must be signed in to change notification settings - Fork 0
Design Principles
Simplicity is a feature.
This document defines the principles that guide Rune.
Every feature, API, and architectural decision should align with these principles.
Git stores history.
Rune stores understanding.
Rune exists to make repository understanding portable, deterministic, and human-readable.
The question is not:
Can we add this?
The question is:
Should we add this?
Complexity accumulates.
Simplicity compounds.
Prefer:
- fewer commands
- fewer abstractions
- fewer dependencies
Rune should work entirely offline.
Rune must never require:
- accounts
- cloud services
- internet access
- API keys
Repository understanding belongs to the repository.
Everything important should be stored as plain text.
Preferred formats:
- Markdown
- JSON
Avoid:
- binary files
- databases
- proprietary formats
A developer should be able to inspect .rune/ using:
- vim
- VSCode
- nano
- Notepad
Given the same repository:
rune indexshould produce identical results.
Avoid:
- timestamps
- random identifiers
- machine-specific paths
Determinism improves:
- reproducibility
- version control
- debugging
Full reindexing should be rare.
Prefer:
rune updateover:
rune indexBenefits:
- faster execution
- lower memory usage
- better scalability
Rune never replaces source code.
Source code remains authoritative.
Rune stores:
- summaries
- relationships
- architecture
Not implementation.
Good:
graph.json
Bad:
hidden internal state
Good:
conventions.md
Bad:
assumptions inside code
Understanding should be visible.
Core Rune should remain boring.
Responsibilities:
- CLI
- repository format
- graph engine
- context engine
- caching
Nothing more.
Language knowledge belongs in plugins.
Examples:
rune-python
rune-typescript
rune-go
AI intelligence belongs to coding agents.
Examples:
- Claude Code
- Cursor
- Codex
- Gemini CLI
Rune provides context.
Others provide intelligence.
Avoid:
- databases
- daemons
- background services
- telemetry
- cloud synchronization
The repository should remain self-contained.
Installation should be:
curl -fsSL ... | shUsers should not need:
- Python
- Node.js
- Docker
- Java
Rune should feel like installing Git.
Rune core should know nothing about:
- Python
- TypeScript
- Rust
- Go
Language-specific behavior belongs in plugins.
This enables independent evolution.
Repository understanding should live alongside code.
Example:
.git/
.rune/
src/
tests/
Both history and understanding should be version-controlled.
Prefer:
- boring solutions
- stable APIs
- plain files
Avoid fashionable complexity.
Rune should still be understandable ten years from now.
Rune should not:
- call LLMs
- generate code
- edit files
Those capabilities change rapidly.
Context is more durable than intelligence.
Removing complexity is a feature.
Good contributions often:
- simplify code
- reduce dependencies
- remove abstractions
More code does not necessarily mean more value.
Whether a repository contains:
10 files
or:
100,000 files
the way humans and agents understand it should remain similar.
Complexity in size should not require complexity in concepts.
Rune will never become:
- an IDE
- a code editor
- a vector database
- a cloud platform
- an agent framework
- an LLM provider
Those are different problems.
Rune borrows ideas from systems that became infrastructure because they remained simple:
- Git
- SQLite
- Go
- Redis
- Caddy
- ripgrep
These tools prioritize:
- clarity
- portability
- maintainability
over feature accumulation.
One day, repositories may naturally contain:
.git/
.rune/
without developers thinking about it.
Just as Git became invisible infrastructure, repository understanding should become ordinary.
If a feature makes Rune more complicated, it carries the burden of proof.
Simplicity wins by default.
Git stores history.
Rune stores understanding.
.git/ explains what changed.
.rune/ explains what the codebase means.
Rune Context — Git for repository understanding.
Git for repository understanding.
- RCP-001 — Repository Format
- RCP-002 — Plugin Protocol
- RCP-003 — Graph Format
- RCP-004 — File Summary Format
- RCP-005 — Feature Map Format
- RCP-006 — Ownership Metadata
- RCP-007 — Session Memory
- RCP-008 — Context Retrieval API
- RCP-009 — Incremental Indexing
- RCP-010 — Multi-Agent Coordination
Git stores history.
Rune stores understanding.