dirac-run/dirac
(github.com/dirac-run)- Es un agente de codificación de código abierto enfocado en la curación densa de contexto y en la optimización del rendimiento frente a la eficiencia de herramientas para reducir los problemas de inestabilidad en el razonamiento con contextos largos
- Con
gemini-3-flash-previewregistró 65.2% en Terminal-Bench-2 y logró 8/8 éxitos en ocho tareas complejas de refactorización sobre repositorios públicos de GitHub - Combina Hash-Anchored Edits, Multi-File Batching y edición con reconocimiento de estructura para trabajar sobre varios archivos con pocos intercambios, reflejando la estructura sintáctica de lenguajes como TypeScript, Python y C++ al aplicar cambios
- Soporta lectura y escritura de archivos, comandos de terminal y navegador sin interfaz gráfica, y además ofrece un flujo CLI con aprobaciones, Plan Mode, Yolo Mode y reanudación del historial de trabajo
- Destaca por un costo promedio de $0.18 y una reducción de costos del 64.8% frente a herramientas competidoras, sobresaliendo por mejorar tanto rendimiento como costo en tareas orientadas al uso real sin información exclusiva del benchmark
Rendimiento clave
-
Resultados de benchmark
- Registró 8/8 respuestas correctas en el total de las 8 tareas, y entre los comparados solo Opencode alcanzó también 8/8
- El costo promedio fue de $0.18, por debajo de Cline $0.49, Kilo $0.73, Ohmypi $0.51, Opencode $0.44, Pimono $0.38 y Roo $0.60
- El README afirma que Dirac es 64.8% más barato que las herramientas competidoras y que logra una reducción de 2.8 veces en costos
- La descripción detallada de las tareas y la metodología puede consultarse en evals/README.md
-
Características de costo por tarea
- En cada tarea de refactorización, incluyendo repositorios como
transformers,vscodeydjango, registró en la mayoría de los casos el costo más bajo o entre los más bajos - Por ejemplo, la tarea DynamicCache de
transformerstuvo un costo de $0.13, la tarea datadict dedjangofue de $0.08, y la tarea sendRequest devscodeestuvo en $0.25 - Aunque algunas herramientas competidoras registraron Incomplete o Failure, Dirac aparece como Success en las 8 tareas mostradas en la tabla
- En cada tarea de refactorización, incluyendo repositorios como
Enfoque y diseño
-
Estrategia de contexto y edición
- Con Hash-Anchored Edits apunta a la ubicación de modificación usando hashes de línea estables, evitando el problema de "lost in translation" de la edición tradicional basada en números de línea
- Con Multi-File Batching lee y modifica varios archivos en un solo intercambio con el LLM para reducir latencia y costo de API
- La optimización de High-Bandwidth Context mantiene solo la información más relevante para reducir desperdicio de tokens y conservar al agente ligero y rápido
-
Edición con reconocimiento de estructura
- Integra AST-Native Precision para trabajar entendiendo la estructura sintáctica de lenguajes como TypeScript, Python y C++
- Afirma poder realizar manipulaciones estructurales como extracción de funciones o refactorización de clases con 100% de precisión
-
Modelo de uso de herramientas
- Soporta lectura y escritura de archivos, ejecución de comandos de terminal y uso de navegador sin interfaz gráfica
- El flujo de trabajo mantiene un workflow basado en aprobaciones para que el usuario conserve el control
- El soporte de modelos se limita a casos con llamadas nativas a herramientas, por motivos de confiabilidad y rendimiento
- Según el README, no soporta MCP
Forma de uso y personalización
-
Control de comportamiento por proyecto
- El archivo
AGENTS.mdpermite aplicar instrucciones por proyecto para personalizar el comportamiento - También lee automáticamente los directorios
.ai,.claudey.agentspara aprovechar junto con ello las Claude skills
- El archivo
-
Flujo de uso en CLI
- Tras autenticarse con
dirac auth, se puede ejecutar una tarea comodirac "Analyze the architecture of this project" dirac -p "prompt"usa Plan Mode para revisar primero la estrategiadirac -y "prompt"usa Yolo Mode para aprobar automáticamente todas las acciones- También se puede pasar contexto por entrada estándar, como en
git diff | dirac "Review these changes" - Con
dirac historyse pueden ver tareas previas y retomarlas
- Tras autenticarse con
-
Integración con VS Code
- La extensión puede instalarse desde VS Code Marketplace
- El flujo consiste en abrir la barra lateral de VS Code, configurar el proveedor de IA preferido como Anthropic, OpenAI u OpenRouter, y luego iniciar una nueva tarea
Entorno de ejecución e integración con proveedores
-
API keys y variables de entorno
- Para omitir el paso de autenticación, puede recibir por variables de entorno
ANTHROPIC_API_KEY,OPENAI_API_KEY,OPENROUTER_API_KEY,GEMINI_API_KEY,GROQ_API_KEY,MISTRAL_API_KEY,XAI_API_KEY,HF_TOKENy otras - La lista completa está en
src/shared/storage/env-config.ts
- Para omitir el paso de autenticación, puede recibir por variables de entorno
-
Soporte para AWS Bedrock
- Si se configuran
AWS_REGION,AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_SESSION_TOKENjunto conAWS_BEDROCK_MODELoAWS_BEDROCK_MODEL_ACT,AWS_BEDROCK_MODEL_PLAN, cambia automáticamente al proveedor Bedrock - Incluye un ejemplo de ejecución que puede usarse junto con aws-vault
- Los modelos recientes de Claude, como Sonnet 4.6 o superior, requieren un prefijo de perfil de inferencia cross-region como
us.,eu.,ap., y remite a los IDs de modelos compatibles en AWS docs
- Si se configuran
Contexto del proyecto
-
Código abierto y linaje
- Es un proyecto de código abierto bajo Apache License 2.0
- Se indica explícitamente que es un fork de Cline
-
Recursos de referencia
1 comentarios
Opiniones en Hacker News
Lo que me pareció interesante de Dirac fue esto
Edita archivos con una versión optimizada de Hash-Anchored edits, y usa el AST del lenguaje para decidir qué código meter en el contexto, así que evita leer archivos de código grandes completos
Agrupa todo el trabajo en lotes para procesar muchas lecturas/modificaciones al mismo tiempo, y si el modelo lo necesita, hace que ejecute directamente scripts de bash/python/perl para análisis sobre la marcha
Además maneja el contexto con bastante cuidado, actualizándolo de forma que incluya por adelantado la información que casi seguro el modelo va a pedir después
Hace tiempo, en algún texto decían que
greptambién era igual de efectivo, y en ese contexto la verdad sí me pareció razonableIncluso si el hash es de un solo token, el código se lee más de lo que se escribe, así que el costo acumulado también crece
Antes probé con stable anchors más largos y hasta se sintió como un retroceso; da la impresión de que la eficiencia de Dirac viene más de mostrar solo el esqueleto básico del archivo
Batches all operations, así que vi el código fuente, y me pareció que en vez de esperar que el modelo haga bien llamadas paralelas a herramientas, la propia tool API está diseñada para recibir listas de varios objetivosEn mi experiencia, los modelos no suelen hacer bien muchas llamadas paralelas de golpe, y esa tendencia es todavía más fuerte en modelos débiles
También parece posible hacer que un modelo de gama alta solo cree e invoque modelos de edición más baratos
Es realmente interesante cuánto impacta el AI harness en el rendimiento
Subir de 48% a 65% respecto al resultado oficial de Google es una diferencia enorme; comparaciones de modelos hay muchas, pero casi nunca veo comparaciones del mismo modelo cambiando solo el harness
Me pregunto si existe algún leaderboard que compare el rendimiento del harness usando el mismo modelo
Bastante sorprendentemente, con Opus 4.6 Claude Code queda en último lugar, y eso podría hablar de una limitación de Claude Code o de lo que realmente está diciendo el propio benchmark
Entonces lo importante sería hacer más inteligente el propio harness, más que el modelo
Si es un benchmark, por lo menos habría que meter otro modelo de una familia distinta para ver si generaliza
Pensando en costos, Minimax 2.7 se ve razonable, y mientras no esté eso es difícil saber si el resultado está sobreajustado a Gemini 3 Flash
En la landing page también deberían indicar claramente que todos los números actuales están basados en Gemini 3 Flash, y si que sea más barato también significa que es más rápido con el mismo modelo, convendría incluir el tiempo de finalización en el benchmark
Además, para quien esté pensando en migrar, también importan skills, AGENTS.md anidados y soporte para MCP
sedParece natural que el modelo no generalice perfectamente a herramientas arbitrarias y que, sobre todo en tareas comunes como edición de archivos, herede sesgos hacia las herramientas presentes en sus datos de entrenamiento
En ese sentido, la familia Gemini suele ser menos fuerte en tareas de agente, así que irónicamente podría tener menos sesgo hacia herramientas específicas
También intenté hacer benchmarks con modelos open-weights, pero la inferencia era tan lenta que seguían cayendo en timeout, y en terminal bench no se podía ajustar el timeout
También dejé esa queja aquí https://www.reddit.com/r/LocalLLaMA/comments/1stgt39/the_frustrating_inference_capacity_issue_with/
Ya reflejé lo de Gemini en el README de GitHub, y aunque el tiempo promedio de finalización era menor, a veces la velocidad de salida se volvía aleatoriamente lenta, así que no lo metí como benchmark riguroso
También agregué la información de skills / AGENTS.md / MCP
Todavía no lo he usado directamente, pero me pregunto por qué no elegiste montarlo como una extensión sobre pi en vez de crear un harness nuevo completo
La API de extensiones de pi que vi es bastante amplia, y algo como Hash anchored edits parecía totalmente implementable
Gracias por liberar el proyecto; luego quiero revisarlo yo mismo
Luego me fui metiendo cada vez más, y después de acumular como 70 mil líneas modificadas y 40 mil eliminadas, dos meses después quedó en el estado actual
También quisiera saber qué combinación de modelo y personalización funciona mejor para sacarle el máximo provecho
Revisando el código vi que la telemetry se envía a https://dirac.run/v1/event
No parece que esté mandando información explícitamente sensible ni se ve malicioso, pero también envía errores de API, así que según el caso sí podría haber filtraciones de contenido sensible
Además, que sea opt-out y vaya a un endpoint operado por un desarrollador individual sí se siente bastante inquietante, y personalmente por eso no lo usaría
Envía a
dirac.run/v1/eventel machine ID, uso de tokens, información del modelo, eventos, los primeros 500 caracteres del error e información de la plataformaEn
dirac.run/v1/event/decideconsulta feature flags cada 60 minutos junto con el machine ID; esto está siempre activo sin importar el opt-out de telemetry y no se puede desactivar sin modificar el códigoLas herramientas de búsqueda web/web fetch envían el contenido de la solicitud y headers del sistema pasando por api.dirac.run
La lista de modelos también hace consultas a OpenRouter, HuggingFace, Groq, etc., incluso si usas el provider de Anthropic
Esto es un fork de Cline, así que heredó tal cual ese mecanismo de telemetry, y solo lo dejé por si ayudaba con el debugging
No hay absolutamente ninguna intención maliciosa y tampoco genero ni almaceno PII
El punto central es qué tan importante es el harness, y creo que esa interpretación va a durar bastante
Los modelos se pueden alquilar y los prompts también se pueden copiar más o menos, pero una parte importante de los números del benchmark la decide el harness de alrededor
Bajo el mismo harness, cambiar de Gemini a Sonnet puede mover menos que cambiar de harness con el mismo modelo
Ese texto sobre cheating-agents que enlazaste al final dice básicamente lo mismo: lo que realmente se mide es el harness, y el modelo se parece más a la materia prima
Eso sí, context management parece menos una propiedad universal y más algo para compensar debilidades de la generación actual de modelos, así que en unas cuantas generaciones podría desaparecer, igual que las herramientas desplazaron al RAG basado en embeddings para preguntas
Hace que el modelo tenga que construir su propio harness
Felicidades, de verdad se ve muy bien hecho
Estas últimas semanas, hacer harnesses también ha sido el side project más divertido de mi lado, y aunque casi nunca logro terminarlos, me interesan especialmente dos experiencias
En gestión de contexto, podar respuestas viejas de tool calls, recortar salidas y hacer compaction automática me funcionó bastante bien; el beneficio de reducir el contexto fue mayor que el de recordarlo todo
Aun así, siempre dejo resúmenes cortos
Y del lado de subagents, estoy probando exponerle casi ninguna herramienta al agente principal y darle solo
run_agent, para que los agentes subordinados usen search/execute/fetchSi los agentes subordinados devuelven solo resúmenes concisos, el contexto superior debería mantenerse limpio por mucho más tiempo, aunque todavía sigo experimentando con el diseño de prompts
Si soportas caché de API, conviene no tocar pruning salvo que sea realmente necesario, porque cada poda rompe el caché y hace perder el beneficio del 90% de descuento por caching
En cuanto a subagent, Dirac también heredó la mejora de la funcionalidad de Cline, pero como la delegación no está bien aprendida en todos los modelos, hay mucha variación
Sobre todo hace falta un mecanismo para que el agente principal mantenga el control, especialmente cuando el agente subordinado cae en un loop o no regresa
Esto es realmente interesante, y encaja muy bien con lo que yo mismo he vivido construyendo harnesses
Creo que todavía queda bastante margen de mejora incluso con el mismo modelo
El año pasado Anthropic impulsaba la narrativa de que, con cada modelo nuevo, el harness se parecía cada vez más a un simple while loop con herramientas alrededor, pero ahora más bien se siente que vamos en la dirección contraria
Hay demasiado por explorar del lado del harness, y en mi trabajo el rolling context window fue mucho más potente que la compaction
Si además le agregas un resumen persistente de alto nivel y un pipeline detallado de retroalimentación automática, mejora todavía más, aunque claro, eso es más fácil de implementar cuanto más claro y consistente sea el objetivo del agente
En particular, el punto del harness me pareció interesante
Cuando ya casi no me quedan créditos, si bajo a un modelo más pequeño y estructuro más el prompt, a veces gpt-5.4-mini rinde mejor que gpt-5.4 trabajando a puro instinto
Por eso empecé
skill distillery, para llevar buenas ideas de workflows de agentes a skills pequeñas, inspeccionables e instalables https://github.com/ouatu-ro/skill-distilleryLa primera es
dirac-workflow, basada en el workflow estructurado de código de Dirac; no es una réplica de Dirac y no incluye runtime, ni índice AST persistente, ni motor de edición hash-anchor, ni harness de benchmarkEn cambio, empaqué pequeños helpers de AST y disciplina de workflow como una skill portable, y también dejé un reporte corto de aplicarlo al propio repositorio de Dirac
Desde la perspectiva del autor original, me gustaría recibir feedback sobre si el prompt y las herramientas son representativos
https://github.com/ouatu-ro/skill-distillery/blob/main/skills/dirac-workflow/scripts/ast_tool.py
Estoy refactorizando un codebase en Rust con Kimi 2.6 y Dirac
Va en la dirección de reforzar más Clean Architecture, y el alcance del trabajo ya lo dejé organizado en un epic de Beads y sus issues hijos
La planificación la hice con gpt5.5 y la verificación de finalización también la lleva gpt5.5
En refactors de codebases grandes, Dirac me resultó más productivo que OpenCode, y OpenCode llegó a romper archivos
.rs, así que tuve que revertirlos