Vai al contenuto
  • open source
  • AGPL-3.0
  • v0.2.0
  • Bun ≥ 1.3.14
  • TypeScript

Un agente di codice da terminale con una cabina, non un registro di chat.

Rovecode gira su Bun, parla con 16 provider o con qualsiasi endpoint compatibile con OpenAI e fa passare ogni chiamata di strumento attraverso una politica che nega per impostazione predefinita prima che tocchi il tuo repository. Software libero sotto AGPL-3.0.

$ rovecode "fix the failing test"
rovecode · atlas · feature/authreal frame
La TUI sextant a 160 per 44 celle: albero dei file con stato git, il pannello del codice che mostra src/auth/callback.ts con le righe modificate evidenziate, il pannello dei messaggi con righe di strumento lettura e modifica e una scheda di approvazione che chiede di eseguire bun test, il piano al passo 1 di 4, il 13 per cento di contesto usato e la mascotte nuvola rovecode che chiede l'assenso.
+4 −1 applicatoprima chiedi · scheda di approvazionecontesto 13 % di 200k

Fotogramma reale: la scheda di approvazione per bun test, la riga di modifica +4 −1, contesto al 13 % di 200k. Reso dai pittori di sextant con orologio fisso.

  • 2,200+test
  • 16provider integrati
  • 4livelli di policy
  • 15lingue in questa pagina
  • AGPL-3.0licenza

Un agente di codice per il terminale. TypeScript su Bun, 47 pattern portati, una politica che nega per impostazione predefinita davanti a ogni strumento.

team che usano rovecode

  • Northwind Robotics
  • Harbourline Payments
  • Meridian Studio
  • Cobalt Grid
  • Larkspur Health
  • Tessellate
  • Ferrous Labs
  • Quill & Compass

Nomi segnaposto, finché i primi clienti non accettano di essere elencati.

02la cabina

Sei pannelli su uno schermo. Il file che ti interessa non scorre mai via.

File con stato git, codice con la fascia di evidenziazione e diff ±, righe di strumento compatte, piano, uso e la mascotte. Reso senza schermo dai pittori di sextant con orologio fisso: lo stesso percorso di codice con cui disegna la TUI, non un mockup.

pannello messaggi · riga per riga

Un'esecuzione, trascritta dal fotogramma qui sopra.

Ogni chiamata di strumento è una riga: il verbo, il file e cosa è cambiato. La modifica è atterrata come +4 −1. Il comando di shell attende dietro una scheda con tre risposte; Esc nega, e la risposta vale per il resto della sessione.

Gli agenti figli non possono chiedere. Un argv proibito non arriva mai alla scheda.

03problemi → soluzioni

Quattro cose che vanno storte con gli agenti da terminale, e cosa fa rovecode per ciascuna.

Dette come le diresti alla tastiera, risolte con il meccanismo e il suo limite. Ogni striscia è un vero ritaglio di fotogramma o il vero file di configurazione.

  1. ~/.rovecode/providers.json
    {
    "default": "kaesra/zai-org/glm-5.3-flash",
    "providers": {
    "kaesra": {
    "baseUrl": "https://api.kaesra.tech/v1",
    "protocol": "openai",
    "keyEnv": "KAESRA_API_KEY"
    },

    01problema

    Ogni agente arriva saldato all'API di un solo fornitore e al suo listino prezzi.

    cosa fa rovecode

    Una sola giunzione StreamFn e un registro provider vivo. 16 provider con nome, o qualsiasi endpoint compatibile con OpenAI o Anthropic da providers.json; un provider aggiunto in un altro terminale serve già la chiamata successiva. Le catene di ripiego per ruolo avanzano su un 429 o un 5xx.

    rovecode provider add homelab http://10.0.0.7:8000/v1 --no-key
  2. The messages panel: a user line, the assistant's note, then compact tool rows for read and edit with +5 −2

    02problema

    Un registro di chat spinge fuori schermo il file che ti interessa mentre l'agente lo modifica.

    cosa fa rovecode

    Una cabina a pannelli: file, codice, messaggi, piano, uso e la mascotte nuvola. Il pannello dei messaggi tiene ogni chiamata di strumento su una riga compatta; il pannello del codice mostra l'unico blocco atterrato.

    files · code · messages · plan · usage · rovecode
  3. The approval card: needs your permission, bash rm -rf node_modules && git checkout -- ., with deny selected

    03problema

    Il modello chiede rm -rf e l'impalcatura lo esegue perché nessuno ha detto no in tempo.

    cosa fa rovecode

    Prima regole jolly che negano per impostazione predefinita, poi verdetti execpolicy dove il proibito non arriva né all'esecuzione né a una persona, poi una scheda di approvazione sugli argomenti corretti. 4 strati sovrapposti, e nessuno finge di essere una sandbox.

    rules → execpolicy → approval → runtime denylist + cwd lock
  4. The /rewind picker: rewind to a turn, rows #38 to #41 with #40 selected

    04problema

    Il turno 40 va storto e l'unico modo di tornare indietro è una nuova conversazione.

    cosa fa rovecode

    Un albero di sessione JSONL a sola aggiunta con catena di hash sha256. /rewind apre il selettore dei turni, dirama da qualsiasi turno e precompila l'editor con il suo testo completo; i checkpoint shadow-git ripristinano in 3 modalità senza toccare il tuo .git.

    /rewind /checkpoints /restore rovecode trace <session-id>
  1. 01cabina sextant
  2. 02provider ricaricati a caldo
  3. 03Client MCP
  4. 04Scala di sicurezza
  5. 05Albero di sessione + checkpoint
  6. 06ACP per Zed + JetBrains
  7. 07HTTP + SSE senza interfaccia
  8. 08Subagenti in background
  9. 09Hook
  10. 10OpenTelemetry

04capacità

Dieci capacità, ognuna un port con la sua traccia file:line.

Rovecode porta pattern documentati da pi, opencode, codex, cline, aider, gemini-cli e altri. Un port atterra solo dopo che un critico a contesto nuovo lo verifica contro un'asticella scritta prima di iniziare.

superficie

cabina sextant

6 pannelli su un TTY truecolor di almeno 100×30: file con stato git, codice con fascia di evidenziazione e diff ±, righe di strumento compatte, piano, uso, la mascotte. 3 palette, /theme cambia a caldo; --classic mantiene la chat pi-tui.

rovecode · ROVECODE_TUI=sextant|classic · /theme night|ember|contrast
Ritaglio del fotogramma sextant: albero dei file e pannello del codice con la fascia di evidenziazione della modifica

provider

provider ricaricati a caldo

16 integrati più tutto ciò che registri in providers.json. Ogni chiamata risolve il provider sull'istantanea viva: aggiungine uno in un altro terminale e la cabina in esecuzione lo usa alla chiamata successiva. Nessun riavvio.

rovecode provider add|list|test · rovecode model use provider/model
~/.rovecode/providers.json
{
"default": "kaesra/zai-org/glm-5.3-flash",
"providers": {
"kaesra": {
"baseUrl": "https://api.kaesra.tech/v1",
"protocol": "openai",
"keyEnv": "KAESRA_API_KEY"
},
"homelab": {
"baseUrl": "http://10.0.0.7:8000/v1",
"protocol": "openai",
"noKey": true,
"models": ["qwen3-coder-30b"]
}
}
}
  • contesto

    Client MCP

    Server stdio e HTTP da .rovecode/mcp.json. Rivelazione pigra tramite 2 strumenti di registro, così un server inattivo costa quasi zero token.

    mcp_list · mcp_call
  • sicurezza

    Scala di sicurezza

    Ogni chiamata di strumento sale quattro pioli prima di eseguire. Un argv proibito è negato prima che un hook lo veda; --yolo salta le richieste, mai le regole di rifiuto.

    rules → execpolicy → approval → runtime

  • memoria

    Albero di sessione + checkpoint

    JSONL a sola aggiunta con catena di hash sha256. /rewind dirama, /resume riprende, i checkpoint shadow-git ripristinano in 3 modalità e non toccano mai il tuo .git.

    /rewind · /checkpoints · /restore
  • ACP per Zed + JetBrains

    Agent Client Protocol v1 su stdio, SDK ufficiale.

    rovecode acp
  • HTTP + SSE senza interfaccia

    Sessioni, un flusso RunEvent, OpenAPI su /doc. Porta 4100, solo loopback.

    rovecode serve
  • Subagenti in background

    Sessioni figlie FIFO limitate, 3 in parallelo di default; le note arrivano al turno successivo del genitore.

    /tasks
  • Hook

    9 hook tipizzati in .rovecode/hooks.ts, ciascuno limitato a 5 s. pre_tool può solo negare.

    pre_tool · approval · on_event
  • OpenTelemetry

    Una traccia per esecuzione: run ⊃ turn ⊃ tool con token, latenza, costo. Endpoint non impostato, nessun exporter.

    ROVECODE_OTEL_ENDPOINT

05sicurezza e deployment

Quattro strati davanti a ogni chiamata di strumento. Niente lascia la macchina che non hai configurato.

Il modello di sicurezza come lo enuncia il README, limiti compresi. Ogni strato dichiara che cosa decide e dove si ferma; nessuno è una sandbox.

  1. strato 01

    01rules

    Regole con wildcard in deny-by-default su strumento e argv. Uno schema vietato viene rifiutato prima che qualcosa venga eseguito.

    limiteConfronto di schemi, non intento: una grafia inedita di un comando pericoloso passa allo strato successivo.

  2. strato 02

    02execpolicy

    Verdetti sull'argv analizzato: allow, prompt, forbidden. Ciò che è vietato non raggiunge né l'esecuzione né una persona.

    limiteLegge il comando, non la shell in cui girerà; un alias o il corpo di uno script restano opachi.

  3. strato 03

    03approval

    Una scheda sugli argomenti rivisti con consenti, sempre e nega. Le risposte sono in cache per sessione; i sottoagenti non possono chiedere.

    limiteUna decisione umana: --yolo salta questo gradino, mai le regole di rifiuto sopra di esso.

  4. strato 04

    04runtime

    Una denylist di bash e un blocco della cwd all'esecuzione; Esc termina la chiamata in corso e, su Windows, il suo intero albero di processi.

    limiteDelega, non isolamento. Il lavoro non fidato va in un container o in una microVM.

deployment e dati

  • 01

    Self-hosted per definizione

    Gira dai sorgenti sulla tua macchina o sulla tua CI. L'account è facoltativo: sblocca i piani della pagina prezzi e non blocca mai la CLI. Bun ≥ 1.3.14 è l'unico requisito.

  • 02

    Nessun phone-home

    Il traffico in uscita va solo al provider che hai configurato, ai server MCP che hai elencato e a web_fetch quando il modello lo chiede. Il catalogo prezzi è uno snapshot offline; non esiste self-update.

  • 03

    La telemetria è opt-in

    L'export OpenTelemetry resta spento finché non imposti ROVECODE_OTEL_ENDPOINT; anche allora porta id, dimensioni ed esiti — mai prompt, argomenti o output.

  • 04

    Traccia di audit per costruzione

    Le sessioni sono JSONL append-only con una catena di hash sha256; ogni run esporta una trace (run ⊃ turn ⊃ tool), comprese quelle annullate.

  • 05

    Stato delle piattaforme

    Windows per primo: sviluppo e gate di release girano su Windows 11. I percorsi POSIX sono testati, Linux e macOS non sono ancora verificati in CI.

  • 06

    Licenza

    AGPL-3.0-only. Modifica e ridistribuisci liberamente; far girare una build modificata come servizio di rete ti obbliga a offrirne i sorgenti a quegli utenti.

06dal terminale

Quattro fotogrammi reali a 160×44, con le parti da leggere numerate.

Resi senza schermo dai pittori di sextant con orologio fisso: lo stesso percorso di codice con cui disegna la TUI, non un mockup. Passa sul fotogramma per appiattirlo; su una riga per accendere il suo segno.

rovecode · atlas · feature/auth · 160×44real frame
fotogramma sextant dopo una modifica: il pannello del codice in modalità diff mostra un blocco, il pannello dei messaggi elenca righe di lettura e modifica

La modifica è atterrata. Il pannello del codice mostra esattamente quel blocco.

Catturato prima di una modifica approvata, ricostruito dalle ancore della modifica stessa dopo una non approvata.

  1. 1Passa alla modalità diff ± quando la modifica atterra
  2. 2Leggi +4 −1 rispetto al file su disco
  3. 3Segui le righe compatte: lettura, poi modifica
  4. 4Guarda il contesto riempirsi al 13 % di 200k
rovecode · atlas · feature/auth · 160×44real frame
fotogramma sextant con la scheda di approvazione aperta: bash bun test tests/auth.test.ts, consenti sempre nega

Un comando di shell attende un assenso. Una scheda, tre risposte.

Le approvazioni si risolvono sugli argomenti corretti e restano in memoria per sessione; gli agenti figli non possono chiedere.

  1. 1Vedi l'argv esatto prima che parta
  2. 2Scegli consenti, sempre o nega; Esc nega
  3. 3L'intestazione passa a in attesa di te
  4. 4La mascotte chiede l'assenso, poi lo ricorda
rovecode · atlas · feature/auth · 160×44real frame
fotogramma sextant dopo l'esecuzione: il pannello del codice in modalità run mostra l'output di bun test con 18 superati, piano 4/4 completo

I test sono girati. Il pannello $ tiene l'output; l'intestazione congela l'orologio.

Le etichette PASS e FAIL leggono il codice di uscita dalla riga di intestazione dello strumento stesso.

  1. 1Leggi l'output in modalità $, 18 superati
  2. 2Il piano chiude a 4/4 passi
  3. 3La riga di strumento porta l'ultima riga di output
  4. 4Il costo si ferma a $0.071 dal catalogo offline
rovecode · atlas · feature/auth · 160×44real frame
fotogramma sextant con la lavagna dell'equipaggio aperta: due corsie, scrittura test in corso e revisione conclusa

Due attività in background, una corsia ciascuna, sulla lavagna dell'equipaggio.

Le sessioni figlie condividono l'unico ciclo dell'agente; uscire dalla TUI annulla ogni figlio vivo.

  1. 1Apri la lavagna ∷ agents con ⌃a
  2. 2Ogni corsia mostra etichetta, tempo e stato
  3. 3Il riepilogo dell'equipaggio resta nel pannello del piano
  4. 4Intanto l'esecuzione madre continua a modificare

07avvio rapido

Tre comandi dal clone a un agente in esecuzione.

Senza un provider configurato, le esecuzioni singole usano un provider finto scriptato: è così che funziona anche lo smoke test del pacchetto.

  1. 01

    Clona e collega (Bun ≥ 1.3.14)

    Il punto di ingresso della CLI è TypeScript eseguito da bun; node non può avviarlo. bun link mette rovecode nel PATH.

    $ git clone https://github.com/9Code-Labs/rovecode && cd rovecode && bun install && bun link
  2. 02

    Collega un modello

    rovecode setup ti guida: scegli un provider, incolla la chiave nascosta, una piccola chiamata di prova, fatto. Oppure salva una chiave direttamente con rovecode auth set, o punta ROVECODE_BASE_URL a qualsiasi endpoint compatibile con OpenAI.

    $ rovecode setup
    oppure
    $ rovecode auth set anthropic
  3. 03

    Avvia un'attività o apri la cabina

    rovecode da solo apre la superficie sextant. Un prompt tra virgolette è un'esecuzione singola; --output json restituisce esattamente un oggetto risultato.

    $ rovecode "fix the failing test"
    $ run · exit 0
    Output dell'esecuzione: 18 superati, 0 falliti, 41 chiamate expect(), 18 test in 1 file.
13
api ospitate
3
runtime locali

08provider

16 provider integrati, o qualsiasi URL compatibile con OpenAI.

Le credenziali salvate battono le variabili d'ambiente <NAME>_API_KEY; una coppia esplicita ROVECODE_BASE_URL / ROVECODE_API_KEY batte entrambe.

api ospitate

runtime locali

  • kaesra
  • openai
  • anthropic
  • deepseek
  • groq
  • openrouter
  • together
  • mistral
  • cerebras
  • fireworks
  • perplexity
  • xai
  • moondream
  • ollama
  • lmstudio
  • vllm

● i runtime locali non richiedono chiave · rovecode auth set <nome> salva una chiave in ~/.rovecode/credentials.json, chiesta nel terminale e mai stampata.

qualsiasi endpoint · a caldo

Aggiungi un provider in un altro terminale; la cabina in esecuzione lo prende alla chiamata successiva. Nessun riavvio.

$ rovecode provider add homelab http://10.0.0.7:8000/v1 --no-key
~/.rovecode/providers.json
{
"default": "kaesra/zai-org/glm-5.3-flash",
"providers": {
"kaesra": {
"baseUrl": "https://api.kaesra.tech/v1",
"protocol": "openai",
"keyEnv": "KAESRA_API_KEY"
},
"homelab": {
"baseUrl": "http://10.0.0.7:8000/v1",
"protocol": "openai",
"noKey": true,
"models": ["qwen3-coder-30b"]
}
}
}

09con le loro parole

Team che hanno portato la review nel terminale.

  • La review si è spostata nel terminale e la scheda di approvazione è diventata la conversazione. Consegniamo lo stesso, con un terzo dell'avanti e indietro.

    Aylin Demirci

    Head of Platform · Northwind Robotics

  • La politica che nega per impostazione predefinita è il motivo per cui la sicurezza ha dato l'ok. Ogni chiamata a uno strumento è una riga in un log che leggiamo già.

    Marcus Oyelaran

    Staff Engineer · Harbourline Payments

  • Dodici persone, modelli locali, nessun fornitore in mezzo. Gira dove il codice dei nostri clienti ha il permesso di girare.

    Inés Ferrer

    Fondatrice · Meridian Studio

Citazioni illustrative di team fittizi, scritte per la pagina: quelle vere le sostituiranno prima del lancio.

10prezzi

Gratis per iniziare. Con un prezzo per il team che consegna.

Ogni piano esegue lo stesso agente dietro la stessa politica che nega per impostazione predefinita. I piani differiscono in quanto ne esegui, e con chi.

  • Free

    Per provare l'agente sui tuoi repository.

    $0/ mese

  • Pro

    Per un ingegnere che consegna con lui ogni giorno.

    $20/ mese

  • Max

    Per l'ingegnere la cui settimana passa lì dentro.

    $200/ mese

  • Teams

    Per un team che condivide crediti, conoscenza e politica.

    $80/ mese

    minimo $80 · $40 per postazione completa / mese

Vedi tutti i piani

11faq

Obiezioni, con risposte precise.

Sette domande che si fanno prima di affidare una shell a un agente. Ogni risposta nomina il meccanismo e dove si ferma.

Tutto qui è preso dalle sezioni Modello di sicurezza, Limiti noti, Osservabilità e Licenza e note del README.md. Dove il README dice che c'è un limite, lo dice anche questa pagina.

No. Prima e attorno a ogni chiamata di strumento girano quattro strati sovrapposti: regole di politica che negano per impostazione predefinita, verdetti execpolicy (un comando proibito non arriva né all'esecuzione né a una persona), il cancello di approvazione sugli argomenti corretti e una lista di rifiuto per bash a runtime con blocco della cwd. Dove gira bash è selezionabile — diretto, WSL2 o Docker — ma ogni piolo è delega, non isolamento. Per lavoro non fidato usa un container o una microVM.

12prendi rovecode

Sei pannelli. Sedici provider. Gratis per iniziare, con un prezzo per i team.

$ git clone https://github.com/9Code-Labs/rovecode && cd rovecode && bun install && bun link
Rovecode, la mascotte nuvola, con il pollice in su