-
-
Notifications
You must be signed in to change notification settings - Fork 0
Plugin System
Keep the core small. Push complexity outward.
Rune core is intentionally language-agnostic.
It should not know anything about:
- Python
- TypeScript
- Java
- Rust
- Go
Language-specific intelligence belongs in plugins.
This keeps the Rune core:
- simple
- stable
- maintainable
Rune itself should understand:
Repository structure
Metadata
Dependency graphs
Context retrieval
Plugins should understand:
Syntax
Imports
Classes
Functions
Framework conventions
Rune Core
│
┌─────────────┼─────────────┐
│ │ │
rune-python rune-typescript rune-go
│ │ │
Python TypeScript Go
The core provides infrastructure.
Plugins provide language knowledge.
Without plugins, Rune core would eventually contain:
- AST parsers
- language grammars
- framework-specific logic
This would make the core:
- large
- difficult to maintain
- hard to extend
Plugins allow independent evolution.
rune-python
Understands:
- imports
- classes
- functions
- decorators
- Django
- FastAPI
rune-typescript
Understands:
- modules
- interfaces
- React
- Next.js
rune-go
Understands:
- packages
- interfaces
- structs
- methods
rune-rust
Understands:
- traits
- modules
- impl blocks
rune-java
Understands:
- classes
- packages
- annotations
Plugins are responsible for:
Convert source files into structured representations.
Example:
from user import Userbecomes:
{
"imports": [
"user"
]
}Identify:
- classes
- functions
- methods
- interfaces
- enums
Determine relationships between files.
Example:
auth.py
↓
user.py
↓
jwt.py
Produce:
.rune/files/auth.md
Example:
Purpose:
Authentication service
Exports:
- login()
- logout()
Dependencies:
- user.py
- jwt.pyDetect feature boundaries.
Example:
login
signup
billing
subscription
and generate:
.rune/features/
Rune core should provide:
rune init
rune index
rune update
rune context
rune doctorProduces:
graph.json
Answers:
Which files matter?
Maintains:
.rune/
Tracks:
- hashes
- timestamps
Plugins are discovered automatically.
Example locations:
Linux:
~/.rune/plugins/
macOS:
~/.rune/plugins/
Windows:
%USERPROFILE%\.rune\plugins\
Installed plugins:
~/.rune/plugins/
rune-python
rune-typescript
rune-go
Running:
rune indexmight invoke:
rune-python
rune-typescript
depending on the repository contents.
Input:
{
"file": "auth.py"
}Output:
{
"symbols": [
"login",
"logout"
],
"dependencies": [
"user.py",
"jwt.py"
]
}Communication should use:
- JSON
- stdin/stdout
No RPC servers are required.
Plugins should be versioned independently.
Example:
Rune Core 0.1.0
rune-python 0.4.0
rune-go 0.2.1
Core and plugins should evolve separately.
Plugins may support frameworks.
Examples:
Python:
- Django
- FastAPI
- Flask
TypeScript:
- React
- Next.js
- Express
Go:
- Gin
- Echo
Framework support should live inside plugins, not the core.
If a plugin is missing:
rune-java
Rune should continue functioning.
Only Java analysis becomes unavailable.
The core should never crash because a plugin is absent.
A plugin should be:
- small
- standalone
- executable
Examples:
rune-python
rune-typescript
rune-rust
rune-java
Language is not restricted.
Plugins may be written in:
- Go
- Rust
- Python
- Java
- Node.js
as long as they expose the expected interface.
Plugins should not:
- edit files
- call LLMs
- perform code generation
- access remote APIs
Plugins provide understanding.
Agents provide intelligence.
Prefer:
- standalone binaries
- JSON
- stdin/stdout
- independent releases
Avoid:
- shared memory
- databases
- daemon processes
- tightly coupled integrations
Rune should know as little as possible.
Plugins should know everything about their language.
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.