Qué se ha comprobado realmente
Fija las entradas y los criterios de éxito
Las entradas son orders.csv, report.mjs y report.test.mjs. El resultado debe ser un cambio acotado en report.mjs, tres comprobaciones superadas, el total 2000 y una explicación. Ningún agente debe cambiar los datos ni debilitar las pruebas. Anota modelo, proveedor, herramientas, indicaciones adicionales y tiempo; si difieren, no atribuyas todo al Harness.
Por qué hacemos estas comprobaciones
Mario Zechner, creador de Pi, destaca el contexto visible y pocas herramientas en su artículo de diseño de 2025. Aquí lo aplicamos registrando cuáles de los tres archivos leyó cada Harness y qué instrucciones adicionales cargó. El artículo de Anthropic sobre evaluación distingue la conversación del resultado final. Por eso revisamos el registro de herramientas, report.mjs guardado y los tests sin cambios, no solo el mensaje final. El texto de 2025 aporta contexto de diseño; los comandos actuales de Pi proceden de su documentación vigente.
Crea un proyecto pequeño con un fallo visible
Necesitas Node.js 24 y una terminal compatible con Bash en un directorio nuevo y desechable. Usa Bash en macOS/Linux o Git Bash/WSL en Windows. harness-lab todavía no debe existir. No hay dependencias npm, cuentas, datos personales ni archivos de producción. El CSV simplificado no contiene comas entre comillas: no estamos construyendo un analizador CSV general.
create_harness_lab() {
mkdir harness-lab || return
cd harness-lab || return
cat > orders.csv <<'CSV'
id,status,cents
A,paid,1200
B,refunded,700
C,paid,800
D,pending,400
CSV
cat > report.mjs <<'JS'
export function totalPaid(csv) {
const rows = csv.trim().split(/\r?\n/).slice(1);
return rows.map(row => row.split(','))
.filter(([, status]) => status !== 'pending')
.reduce((sum, [, , cents]) => sum + Number(cents), 0);
}
JS
cat > report.test.mjs <<'JS'
const { default: assert } = await import('node:assert/strict');
const { readFileSync } = await import('node:fs');
const { default: test } = await import('node:test');
const { totalPaid } = await import('./report.mjs');
const csv = readFileSync(new URL('./orders.csv', import.meta.url), 'utf8');
test('only paid orders count', () => assert.equal(totalPaid(csv), 2000));
test('refunds alone count as zero', () => assert.equal(totalPaid('id,status,cents\nB,refunded,700\n'), 0));
test('an empty ledger counts as zero', () => assert.equal(totalPaid('id,status,cents\n'), 0));
JS
cp report.mjs report.original.mjs
node --test report.test.mjs
}
create_harness_labLa primera ejecución debe fallar en dos comprobaciones y superar una. El código incluye los 700 céntimos del pedido reembolsado: devuelve 2700 en lugar de 2000. La regla es contar únicamente filas con status paid; refunded y pending no aportan nada. Los importes son céntimos enteros.
Prepara dos directorios con el mismo punto de partida
Copia antes de que cualquiera de los agentes modifique archivos. DSH usará harness-lab y Pi, harness-lab-pi, ambos con el mismo fallo y la copia original. Una rama de conversación no es un árbol de trabajo independiente: no dejes que ambos agentes editen el mismo directorio.
copy_harness_lab() {
(cd .. && test ! -e harness-lab-pi && cp -R harness-lab harness-lab-pi)
}
copy_harness_labCompleta la tarea en DSH
- 01
Confirma el entorno y el modelo
Sigue el inicio rápido de Alpha enlazado y su compilación desde el commit exacto. Configura tus credenciales en Settings → Models, fuera de la indicación, y anota el modelo seleccionado.
- 02
Selecciona el proyecto
Añade la ruta absoluta de harness-lab al selector de espacios de trabajo. Una interfaz web nueva no tiene ninguno seleccionado, aunque dsh se haya iniciado desde un directorio de proyecto.
- 03
Comprueba los permisos efectivos
Para este ejercicio local desechable, usa workspace-write si está disponible y examina las solicitudes de autorización. Combina el modo de aislamiento workspace-write con la política ask; el ejecutor configurado aplica el límite. No implica una ventana de aprobación por cada escritura.
- 04
Ejecuta y observa
Envía la indicación común. Revisa lecturas, comandos, cambios y resultados. Si se solicita acceder fuera del ejemplo o instalar dependencias ajenas, detén el trabajo y acota de nuevo la tarea.
Completa la misma tarea en Pi
Instala Pi siguiendo su inicio rápido oficial y entra en harness-lab-pi. Configura un modelo compatible con /login y /model; usa el mismo que en DSH cuando sea posible. Empieza con las herramientas reducidas siguientes. Se desactiva el descubrimiento opcional para no cargar instrucciones o extensiones ajenas sin advertirlo.
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
cd ../harness-lab-pipi --no-extensions --no-skills --no-prompt-templates --no-themes --no-context-files --tools read,grep,find,lsPi no incorpora un sistema de permisos para archivos, procesos, red ni credenciales. La lista permitida limita las herramientas expuestas al modelo, no los permisos del proceso en el sistema operativo. Para proyectos no confiables, utiliza un contenedor, una máquina virtual u otro aislamiento del sistema verificado. La guía oficial explica por qué cambiar dónde se ejecutan las herramientas no aísla por sí solo las demás extensiones del equipo anfitrión.
pi -c --no-extensions --no-skills --no-prompt-templates --no-themes --no-context-files --tools read,edit,write,bash,grep,find,lsDa a ambos agentes la misma tarea acotada
En este proyecto desechable, corrige report.mjs para que totalPaid cuente únicamente filas paid. Lee primero orders.csv y report.test.mjs, ejecuta node --test report.test.mjs y describe el fallo inicial. No cambies orders.csv, report.test.mjs ni report.original.mjs; no instales paquetes ni accedas a otros directorios. Haz el cambio mínimo, repite las tres comprobaciones y calcula el total de orders.csv. Devuelve el archivo modificado, el resultado observado, el total y las limitaciones. Distingue un problema del entorno de una comprobación fallida.Verifica sin depender del mensaje final del agente
node --test report.test.mjs
node --input-type=module -e "import {readFileSync} from 'node:fs'; import {totalPaid} from './report.mjs'; console.log(totalPaid(readFileSync('orders.csv','utf8')))"
diff -u report.original.mjs report.mjsDeben pasar tres pruebas y aparecer por separado el total 2000. Normalmente el diff cambia el filtro a status === 'paid'. Otra implementación es válida si cumple la regla y conserva las pruebas. diff devuelve 1 cuando encuentra diferencias: aquí es normal, no un fallo de prueba. Un Node ausente o un permiso denegado son problemas del entorno.
Compara el trabajo realizado de verdad
| Ficha | Rol | Verificar |
|---|---|---|
| Contexto inicial | DSH: selecciona el espacio y revisa sesión y herramientas. Pi: el directorio actual y el contexto descubierto determinan el inicio; aquí se desactiva el descubrimiento opcional. | Anota directorio y contexto exactos: igual indicación no significa igual contexto. |
| Aprobaciones y aislamiento | DSH combina ajustes de aislamiento y aprobación. Pi permite limitar herramientas; un límite adicional del sistema operativo se configura aparte. | Registra el límite efectivo y las aprobaciones, sin medir la seguridad por el número de ventanas. |
| Planificación y delegación | La composición de DSH puede incluir planes y subagentes. Pi deja plan-mode y subagentes a extensiones o paquetes. | Estos tres archivos no requieren ninguno. El ejemplo oficial plan-mode permite ver ese enfoque sin instalarlo para el ejercicio. |
| Revisión y continuación | DSH registra eventos de sesión; Pi ofrece /session, /resume, /tree y /fork. | Guarda el cambio probado y una nota de entrega. El historial aporta contexto, pero no restaura archivos editados. |
| Coste y velocidad | Modelo, indicaciones, extensiones y esperas de aprobación influyen en el resultado. | Escribe lo observado o «no medido». Una tarea sintética no establece una clasificación general. |
Pausa, continúa y recupera con un procedimiento claro
Antes de parar, pide objetivo, archivos cambiados, resultados exactos y siguiente paso. En DSH abre la sesión guardada y comprueba el espacio. En Pi usa pi -c en ese proyecto para continuar la última sesión, o pi -r para elegir. /tree y /fork crean ramas del historial, no revierten archivos. Conserva el intento antes de restaurar únicamente la implementación del ejercicio.
cp report.mjs report.attempt.mjs
cp report.original.mjs report.mjs
node --test report.test.mjsDeben reaparecer los dos fallos iniciales: es una prueba deliberada de recuperación. Guarda report.attempt.mjs para comparar. En un repositorio real utiliza una rama o árbol de trabajo limpio y una restauración por archivo revisada; no apliques estas sobrescrituras a trabajo ajeno al ejemplo.
Elige después de revisar un resultado completo
Prueba DSH si encajan un espacio web compartido, estados visibles de sesión y herramientas, y flujos compuestos. Prueba Pi si prefieres tu entorno de terminal, un arranque CLI explícito y un núcleo pequeño ampliable. Decide después de completar la misma tarea y leer el diff. Ninguna interfaz garantiza un cambio correcto ni vuelve seguro un código no fiable por sí sola.
Harness/versión:
Modelo/proveedor:
Espacio y archivos iniciales:
Herramientas/permisos efectivos:
Indicaciones y aprobaciones adicionales:
Pruebas: __ fallos iniciales; __ aprobadas al final
Total observado:
Archivos cambiados:
Tiempo/uso comunicado (o no medido):
Recuperación:
Limitaciones:Continúa con un objetivo concreto
Consulta la documentación oficial
Preguntas comunes
Antes de realizar un cambio
Respuestas sobre formatos, compatibilidad, evidencia y reversión.
¿Qué cubre esta guía?
Esta guía cubre: Fuentes fijadas de DSH Alpha y documentación oficial actual de CLI, sesiones y extensiones de Pi; Ejemplo sintético de pedidos, corrección de referencia y restauración de archivos ejecutados localmente; No se presenta una comparativa de modelos ni un resultado real de un servicio externo
¿Por dónde debo empezar?
Empieza con un trabajo observable: un informe cuenta pedidos reembolsados por error. Prepara dos copias independientes, elige el mismo modelo si ambos entornos lo permiten y conserva las pruebas de aceptación. Compararás el trabajo necesario para obtener un cambio revisable, no dos descripciones comerciales.
¿Qué límite debo tener presente?
Los pasos de DSH usan 0.1.3-alpha.1 compilado desde d347e703908d0406b7a7ef80e3a0e594d86b2215. Los comandos de Pi se contrastaron con la documentación oficial el 6 de septiembre de 2026. El ejemplo de pedidos y su corrección se ejecutaron localmente; no se compararon los prompts DSH/Pi mediante ejecuciones de modelos.
¿Tres pruebas aprobadas demuestran que un Harness es mejor?
No: solo prueban que esa implementación satisface esas comprobaciones. Amplía las tareas y mantén constantes modelo, entradas y criterios antes de generalizar.
¿Puedo compartir archivos de sesión entre DSH y Pi?
No presupongas que sus formatos son compatibles. Copia el proyecto y una nota de texto, conservando las sesiones propias de cada herramienta. La migración de DSH Alpha no importa sesiones de Pi.
¿Necesito un plugin plan-mode?
No. Basta inspeccionar, editar y probar. Consulta el ejemplo de Pi si te resulta útil; cargar una extensión requiere evaluar su confianza por separado.
Continuar aprendiendo
Continuar a partir de la evidencia verificada
Compare los artefactos publicados o regrese a la documentación de instalación.