Patrones de Diseño
Flujo de TrabajoIntermedio

Enrutamiento de tareas agente-humano

Cómo decidir qué tareas delegar a agentes en lugar de reservarlas para ingenieros humanos basándose en el riesgo, la complejidad y la disponibilidad de contexto.

Resumen

El Enrutamiento de tareas agente-humano es un marco de decisión para asignar sistemáticamente tareas de desarrollo al ejecutor adecuado: agentes totalmente autónomos, agentes asistidos por humanos o ingenieros humanos que trabajan solos. El marco aplica el pilar de Ingeniería Híbrida del Agentic Development Handbook para construir una matriz de enrutamiento que evalúa cada tarea en cuatro dimensiones: integridad de las especificaciones, cobertura de patrones, radio de impacto y novedad.

Sin un marco de enrutamiento, los equipos se basan en la intuición. Algunos ingenieros delegan en exceso, enviando trabajos ambiguos o de alto riesgo a agentes que agotan el Token Budget sin producir resultados utilizables. Otros delegan de menos, implementando manualmente tareas que los agentes podrían manejar en una fracción del tiempo. Un enfoque de enrutamiento estructurado maximiza el Operator Leverage Ratio al dirigir cada tarea al ejecutor mejor equipado para manejarla.

La decisión de enrutamiento ocurre antes de que comience la ejecución del agente —durante el Daily Flow Sync o el Spec Engineering Block semanal— y alimenta directamente el proceso de asignación de la Live Spec. El Core Nucleus (Arquitecto de Contexto, Gestor de Flujo y Agente Operador principal) colabora en las decisiones de enrutamiento, mientras que el Gestor de Flujo realiza un seguimiento de los resultados para perfeccionar la matriz con el tiempo.

Problema

Los equipos que adoptan la Agentic Engineering se enfrentan a un problema persistente de asignación: ¿qué tareas deben manejar los agentes y cuáles los humanos?

  • Delegar en exceso desperdicia tokens y tiempo. Cuando los agentes reciben tareas con especificaciones vagas, falta de contexto o alta novedad, generan resultados de baja calidad que requieren extensas correcciones humanas. El Correction Ratio se dispara. La frecuencia de las Rescue Mission aumenta. El equipo pasa más tiempo arreglando el resultado del agente de lo que habría pasado escribiendo el código ellos mismos.

  • Delegar de menos desperdicia la capacidad humana. Cuando los ingenieros implementan manualmente tareas bien patronadas y totalmente especificadas —endpoints CRUD, variaciones de componentes, generación de pruebas, documentación— dejan la capacidad del agente sin utilizar. El Operator Leverage Ratio se estanca porque los humanos están realizando trabajos que los agentes manejan de manera confiable.

  • Sin bucle de retroalimentación. Sin realizar un seguimiento de qué decisiones de enrutamiento llevaron a buenos resultados y cuáles no, el equipo no puede mejorar con el tiempo. Se repiten las mismas tareas mal enrutadas. Los mismos ingenieros siguen rescatando las mismas categorías de agentes bloqueados.

  • Decisiones inconsistentes. Diferentes miembros del equipo aplican diferentes modelos mentales para la asignación de tareas. Un ingeniero delega de forma agresiva; otro apenas utiliza agentes. El equipo carece de un vocabulario compartido para discutir los límites de la delegación.

Solución

Implementar una matriz de enrutamiento de cuatro dimensiones que califique cada tarea y asocie la puntuación a uno de los tres modos de ejecución:

  1. Auto-agent — El agente se ejecuta de forma autónoma con puertas Eval Harness estándar. Participación humana mínima más allá de la revisión final.
  2. Assisted-agent — El agente se ejecuta con monitoreo humano activo. El Agente Operador revisa el resultado en puntos de control y proporciona correcciones a mitad de la tarea.
  3. Human-only — El ingeniero humano implementa la tarea directamente. El agente puede asistir con subtareas (generación de pruebas, documentación) pero no es el responsable de la implementación.

Las cuatro dimensiones de enrutamiento son:

DimensiónPreguntaPuntuación Baja (1)Puntuación Alta (5)
Spec Completeness¿Qué tan completa está la Live Spec?Requisitos vagos, sin criterios de aceptaciónContrato de comportamiento completo, criterios de aceptación comprobables, alcance definido
Pattern Coverage¿Contiene la base de código implementaciones similares?Sin precedentes, primero en su tipoExisten múltiples Golden Samples para este patrón exacto
Blast Radius¿Cuál es el impacto si el resultado es incorrecto?Rompe rutas críticas, afecta datos de producción, implicaciones de seguridadCambio aislado, fácilmente reversible, sin dependencias descendentes
Novelty¿Cuánto juicio creativo se requiere?Requiere decisiones arquitectónicas, análisis de compensaciones, requisitos ambiguosAplicación directa de patrones y reglas conocidos

Califique cada dimensión del 1 al 5. Sume las puntuaciones:

Puntuación TotalDecisión de Enrutamiento
16-20Auto-agent
10-15Assisted-agent
4-9Human-only

Implementación

1

2

3

4

5

Ejemplos de Código

Complete Routing Integration
// scripts/task-router.ts
import { readFileSync } from "fs";
import { parse } from "yaml";

interface RoutingConfig {
  task_classifications: {
    auto_agent: TaskType[];
    assisted_agent: TaskType[];
    human_only: TaskType[];
  };
}

interface TaskType {
  name: string;
  spec_completeness: number;
  pattern_coverage: number;
  blast_radius: number;
  novelty: number;
  notes?: string;
}

interface TaskScore {
  specCompleteness: number;
  patternCoverage: number;
  blastRadius: number;
  novelty: number;
}

type RouteDecision = "auto-agent" | "assisted-agent" | "human-only";

function loadConfig(path: string): RoutingConfig {
  const raw = readFileSync(path, "utf-8");
  return parse(raw) as RoutingConfig;
}

function scoreToRoute(score: TaskScore): RouteDecision {
  if (score.blastRadius <= 1) return "human-only";
  if (score.specCompleteness <= 2) return "human-only";

  const total =
    score.specCompleteness +
    score.patternCoverage +
    score.blastRadius +
    score.novelty;

  if (total >= 16) return "auto-agent";
  if (total >= 10) return "assisted-agent";
  return "human-only";
}

function findSimilarTask(
  description: string,
  config: RoutingConfig
): { route: RouteDecision; match: TaskType } | null {
  const allTasks = [
    ...config.task_classifications.auto_agent.map((t) => ({
      ...t,
      route: "auto-agent" as RouteDecision,
    })),
    ...config.task_classifications.assisted_agent.map((t) => ({
      ...t,
      route: "assisted-agent" as RouteDecision,
    })),
    ...config.task_classifications.human_only.map((t) => ({
      ...t,
      route: "human-only" as RouteDecision,
    })),
  ];

  const descLower = description.toLowerCase();
  const match = allTasks.find((t) =>
    t.name.toLowerCase().split(" ").some((word) => descLower.includes(word))
  );

  if (match) {
    return { route: match.route, match };
  }
  return null;
}

// Usage
const config = loadConfig("task-routing-config.yaml");
const suggestion = findSimilarTask("Add new CRUD endpoint for orders", config);

if (suggestion) {
  console.log(`Suggested route: ${suggestion.route}`);
  console.log(`Based on: ${suggestion.match.name}`);
  console.log(`Notes: ${suggestion.match.notes || "None"}`);
} else {
  console.log("No matching classification found. Score manually.");
}
Routing Decisions Log
# routing-log.yaml — Track decisions for retrospective analysis
entries:
  - date: "2026-02-20"
    task: "Add pagination to /api/products endpoint"
    scores:
      spec_completeness: 5
      pattern_coverage: 5
      blast_radius: 4
      novelty: 5
    route: "auto-agent"
    outcome: "passed-first-attempt"
    correction_needed: false

  - date: "2026-02-20"
    task: "Implement OAuth2 PKCE flow"
    scores:
      spec_completeness: 4
      pattern_coverage: 2
      blast_radius: 1
      novelty: 2
    route: "human-only"
    outcome: "completed-by-human"
    notes: "Security-critical path, blast radius override"

  - date: "2026-02-21"
    task: "Refactor UserService to repository pattern"
    scores:
      spec_completeness: 4
      pattern_coverage: 3
      blast_radius: 3
      novelty: 3
    route: "assisted-agent"
    outcome: "completed-after-2-corrections"
    correction_needed: true
    notes: "Agent missed edge case in error handling"

Consideraciones

Beneficios
  • **Higher token efficiency.** By routing only well-specified, well-patterned tasks to autonomous agents, teams avoid burning [[token-budget]] on tasks where agents are likely to fail. Token spend correlates with successful output rather than wasted retries.
  • **Fewer rescue missions.** Systematic routing prevents the most common cause of [[rescue-mission]] escalations — agents receiving tasks they are not equipped to handle given the available context. When rescue missions do occur, the routing log helps diagnose why.
  • **Humans focus on high-value work.** Engineers spend their time on architectural decisions, novel problem-solving, and security-critical implementations — work where human judgment adds the most value. Routine implementations flow to agents.
  • **Measurable improvement over time.** The routing log creates a feedback loop. Teams can see which task types consistently succeed as auto-agent and which consistently require human intervention. Over months, the routing matrix becomes increasingly accurate.
  • **Shared delegation vocabulary.** The four-dimension scoring system gives the team a common language for discussing task assignment. "This task scores 2 on pattern coverage" is more actionable than "I do not think the agent can handle this."
Desafíos
  • **Initial classification effort.** Building the task classification catalog and calibrating scores requires a time investment during the first two weeks. Start with 5-10 common task types and expand gradually.
  • **Edge cases resist clean scoring.** Some tasks score well on three dimensions but poorly on one — a well-specified, well-patterned task with a high blast radius. The hard rules (blast radius override) help, but edge cases still require human judgment during the Daily Flow Sync.
  • **Routing boundaries shift as context improves.** A task type that starts as "human-only" may become "assisted-agent" after the team builds relevant [[golden-samples]] and context. Review the classification catalog monthly to keep it current.
  • **Over-reliance on the matrix.** The routing matrix is a decision aid, not a replacement for engineering judgment. If an experienced engineer's instinct conflicts with the matrix score, investigate why. The instinct may be incorporating a factor the matrix does not capture.
  • **Requires consistent scoring.** Different team members may score the same task differently. Calibrate by scoring 10 recent tasks together as a team during the first Spec Engineering Block. Discuss disagreements to align on scoring standards.