Skills Agentes

V3 Core Implementation

Implementación de los módulos core de claude-flow v3. Aplica dominios DDD, patrones de arquitectura limpia, inyección de dependencias y una base TypeScript modular con testing exhaustivo.

Estrellas
69.4k

en todo el repo

Actividad
27

0–100, la ruta de este skill

Actualizado
hace 6 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
5.5k tok

45 tok en reposo

Paquete
1 archivo

22 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add ruvnet/ruflo --skill v3-core-implementation --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Implementa los módulos core de claude-flow v3 siguiendo Domain-Driven Design (entidades, value objects, agregados).
  • Define dominios acotados (task-management, session-management, health-monitoring) con repositorios e inyección de dependencias.
  • Provee casos de uso de aplicación con publicación de eventos de dominio.
  • Incluye pruebas unitarias e de integración para la lógica de dominio.

Úsalo cuando

  • Vas a implementar los módulos core de claude-flow v3 con arquitectura DDD.
  • Necesitas diseñar entidades, value objects o repositorios siguiendo clean architecture.
  • Quieres implementar casos de uso con inyección de dependencias y testing exhaustivo.

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Implementa el dominio de gestión de tareas con entidades y repositorios
    • Crea el caso de uso AssignTaskUseCase con inyección de dependencias
    • Escribe tests unitarios para la entidad Task

    SKILL.md

    En inglés

    V3 Core Implementation

    What This Skill Does

    Implements the core TypeScript modules for claude-flow v3 following Domain-Driven Design principles, clean architecture patterns, and modern TypeScript best practices with comprehensive test coverage.

    Quick Start

    # Initialize core implementation
    Task("Core foundation", "Set up DDD domain structure and base classes", "core-implementer")
    
    # Domain implementation (parallel)
    Task("Task domain", "Implement task management domain with entities and services", "core-implementer")
    Task("Session domain", "Implement session management domain", "core-implementer")
    Task("Health domain", "Implement health monitoring domain", "core-implementer")
    

    Core Implementation Architecture

    Domain Structure

    src/
    ├── core/
    │   ├── kernel/                     # Microkernel pattern
    │   │   ├── claude-flow-kernel.ts
    │   │   ├── domain-registry.ts
    │   │   └── plugin-loader.ts
    │   │
    │   ├── domains/                    # DDD Bounded Contexts
    │   │   ├── task-management/
    │   │   │   ├── entities/
    │   │   │   ├── value-objects/
    │   │   │   ├── services/
    │   │   │   ├── repositories/
    │   │   │   └── events/
    │   │   │
    │   │   ├── session-management/
    │   │   ├── health-monitoring/
    │   │   ├── lifecycle-management/
    │   │   └── event-coordination/
    │   │
    │   ├── shared/                     # Shared kernel
    │   │   ├── domain/
    │   │   │   ├── entity.ts
    │   │   │   ├── value-object.ts
    │   │   │   ├── domain-event.ts
    │   │   │   └── aggregate-root.ts
    │   │   │
    │   │   ├── infrastructure/
    │   │   │   ├── event-bus.ts
    │   │   │   ├── dependency-container.ts
    │   │   │   └── logger.ts
    │   │   │
    │   │   └── types/
    │   │       ├── common.ts
    │   │       ├── errors.ts
    │   │       └── interfaces.ts
    │   │
    │   └── application/                # Application services
    │       ├── use-cases/
    │       ├── commands/
    │       ├── queries/
    │       └── handlers/
    

    Base Domain Classes

    Entity Base Class

    // src$core$shared$domain$entity.ts
    export abstract class Entity<T> {
      protected readonly _id: T;
      private _domainEvents: DomainEvent[] = [];
    
      constructor(id: T) {
        this._id = id;
      }
    
      get id(): T {
        return this._id;
      }
    
      public equals(object?: Entity<T>): boolean {
        if (object == null || object == undefined) {
          return false;
        }
    
        if (this === object) {
          return true;
        }
    
        if (!(object instanceof Entity)) {
          return false;
        }
    
        return this._id === object._id;
      }
    
      protected addDomainEvent(domainEvent: DomainEvent): void {
        this._domainEvents.push(domainEvent);
      }
    
      public getUncommittedEvents(): DomainEvent[] {
        return this._domainEvents;
      }
    
      public markEventsAsCommitted(): void {
        this._domainEvents = [];
      }
    }
    

    Value Object Base Class

    // src$core$shared$domain$value-object.ts
    export abstract class ValueObject<T> {
      protected readonly props: T;
    
      constructor(props: T) {
        this.props = Object.freeze(props);
      }
    
      public equals(object?: ValueObject<T>): boolean {
        if (object == null || object == undefined) {
          return false;
        }
    
        if (this === object) {
          return true;
        }
    
        return JSON.stringify(this.props) === JSON.stringify(object.props);
      }
    
      get value(): T {
        return this.props;
      }
    }
    

    Aggregate Root

    // src$core$shared$domain$aggregate-root.ts
    export abstract class AggregateRoot<T> extends Entity<T> {
      private _version: number = 0;
    
      get version(): number {
        return this._version;
      }
    
      protected incrementVersion(): void {
        this._version++;
      }
    
      public applyEvent(event: DomainEvent): void {
        this.addDomainEvent(event);
        this.incrementVersion();
      }
    }
    

    Task Management Domain Implementation

    Task Entity

    // src$core$domains$task-management$entities$task.entity.ts
    import { AggregateRoot } from '../../..$shared$domain$aggregate-root';
    import { TaskId } from '..$value-objects$task-id.vo';
    import { TaskStatus } from '..$value-objects$task-status.vo';
    import { Priority } from '..$value-objects$priority.vo';
    import { TaskAssignedEvent } from '..$events$task-assigned.event';
    
    interface TaskProps {
      id: TaskId;
      description: string;
      priority: Priority;
      status: TaskStatus;
      assignedAgentId?: string;
      createdAt: Date;
      updatedAt: Date;
    }
    
    export class Task extends AggregateRoot<TaskId> {
      private props: TaskProps;
    
      private constructor(props: TaskProps) {
        super(props.id);
        this.props = props;
      }
    
      static create(description: string, priority: Priority): Task {
        const task = new Task({
          id: TaskId.create(),
          description,
          priority,
          status: TaskStatus.pending(),
          createdAt: new Date(),
          updatedAt: new Date()
        });
    
        return task;
      }
    
      static reconstitute(props: TaskProps): Task {
        return new Task(props);
      }
    
      public assignTo(agentId: string): void {
        if (this.props.status.equals(TaskStatus.completed())) {
          throw new Error('Cannot assign completed task');
        }
    
        this.props.assignedAgentId = agentId;
        this.props.status = TaskStatus.assigned();
        this.props.updatedAt = new Date();
    
        this.applyEvent(new TaskAssignedEvent(
          this.id.value,
          agentId,
          this.props.priority
        ));
      }
    
      public complete(result: TaskResult): void {
        if (!this.props.assignedAgentId) {
          throw new Error('Cannot complete unassigned task');
        }
    
        this.props.status = TaskStatus.completed();
        this.props.updatedAt = new Date();
    
        this.applyEvent(new TaskCompletedEvent(
          this.id.value,
          result,
          this.calculateDuration()
        ));
      }
    
      // Getters
      get description(): string { return this.props.description; }
      get priority(): Priority { return this.props.priority; }
      get status(): TaskStatus { return this.props.status; }
      get assignedAgentId(): string | undefined { return this.props.assignedAgentId; }
      get createdAt(): Date { return this.props.createdAt; }
      get updatedAt(): Date { return this.props.updatedAt; }
    
      private calculateDuration(): number {
        return this.props.updatedAt.getTime() - this.props.createdAt.getTime();
      }
    }
    

    Task Value Objects

    // src$core$domains$task-management$value-objects$task-id.vo.ts
    export class TaskId extends ValueObject<string> {
      private constructor(value: string) {
        super({ value });
      }
    
      static create(): TaskId {
        return new TaskId(crypto.randomUUID());
      }
    
      static fromString(id: string): TaskId {
        if (!id || id.length === 0) {
          throw new Error('TaskId cannot be empty');
        }
        return new TaskId(id);
      }
    
      get value(): string {
        return this.props.value;
      }
    }
    
    // src$core$domains$task-management$value-objects$task-status.vo.ts
    type TaskStatusType = 'pending' | 'assigned' | 'in_progress' | 'completed' | 'failed';
    
    export class TaskStatus extends ValueObject<TaskStatusType> {
      private constructor(status: TaskStatusType) {
        super({ value: status });
      }
    
      static pending(): TaskStatus { return new TaskStatus('pending'); }
      static assigned(): TaskStatus { return new TaskStatus('assigned'); }
      static inProgress(): TaskStatus { return new TaskStatus('in_progress'); }
      static completed(): TaskStatus { return new TaskStatus('completed'); }
      static failed(): TaskStatus { return new TaskStatus('failed'); }
    
      get value(): TaskStatusType {
        return this.props.value;
      }
    
      public isPending(): boolean { return this.value === 'pending'; }
      public isAssigned(): boolean { return this.value === 'assigned'; }
      public isInProgress(): boolean { return this.value === 'in_progress'; }
      public isCompleted(): boolean { return this.value === 'completed'; }
      public isFailed(): boolean { return this.value === 'failed'; }
    }
    
    // src$core$domains$task-management$value-objects$priority.vo.ts
    type PriorityLevel = 'low' | 'medium' | 'high' | 'critical';
    
    export class Priority extends ValueObject<PriorityLevel> {
      private constructor(level: PriorityLevel) {
        super({ value: level });
      }
    
      static low(): Priority { return new Priority('low'); }
      static medium(): Priority { return new Priority('medium'); }
      static high(): Priority { return new Priority('high'); }
      static critical(): Priority { return new Priority('critical'); }
    
      get value(): PriorityLevel {
        return this.props.value;
      }
    
      public getNumericValue(): number {
        const priorities = { low: 1, medium: 2, high: 3, critical: 4 };
        return priorities[this.value];
      }
    }
    

    Domain Services

    Task Scheduling Service

    // src$core$domains$task-management$services$task-scheduling.service.ts
    import { Injectable } from '../../..$shared$infrastructure$dependency-container';
    import { Task } from '..$entities$task.entity';
    import { Priority } from '..$value-objects$priority.vo';
    
    @Injectable()
    export class TaskSchedulingService {
      public prioritizeTasks(tasks: Task[]): Task[] {
        return tasks.sort((a, b) =>
          b.priority.getNumericValue() - a.priority.getNumericValue()
        );
      }
    
      public canSchedule(task: Task, agentCapacity: number): boolean {
        if (agentCapacity <= 0) return false;
    
        // Critical tasks always schedulable
        if (task.priority.equals(Priority.critical())) return true;
    
        // Other logic based on capacity
        return true;
      }
    
      public calculateEstimatedDuration(task: Task): number {
        // Simple heuristic - would use ML in real implementation
        const baseTime = 300000; // 5 minutes
        const priorityMultiplier = {
          low: 0.5,
          medium: 1.0,
          high: 1.5,
          critical: 2.0
        };
    
        return baseTime * priorityMultiplier[task.priority.value];
      }
    }
    

    Repository Interfaces & Implementations

    Task Repository Interface

    // src$core$domains$task-management$repositories$task.repository.ts
    export interface ITaskRepository {
      save(task: Task): Promise<void>;
      findById(id: TaskId): Promise<Task | null>;
      findByAgentId(agentId: string): Promise<Task[]>;
      findByStatus(status: TaskStatus): Promise<Task[]>;
      findPendingTasks(): Promise<Task[]>;
      delete(id: TaskId): Promise<void>;
    }
    

    SQLite Implementation

    // src$core$domains$task-management$repositories$sqlite-task.repository.ts
    @Injectable()
    export class SqliteTaskRepository implements ITaskRepository {
      constructor(
        @Inject('Database') private db: Database,
        @Inject('Logger') private logger: ILogger
      ) {}
    
      async save(task: Task): Promise<void> {
        const sql = `
          INSERT OR REPLACE INTO tasks (
            id, description, priority, status, assigned_agent_id, created_at, updated_at
          ) VALUES (?, ?, ?, ?, ?, ?, ?)
        `;
    
        await this.db.run(sql, [
          task.id.value,
          task.description,
          task.priority.value,
          task.status.value,
          task.assignedAgentId,
          task.createdAt.toISOString(),
          task.updatedAt.toISOString()
        ]);
    
        this.logger.debug(`Task saved: ${task.id.value}`);
      }
    
      async findById(id: TaskId): Promise<Task | null> {
        const sql = 'SELECT * FROM tasks WHERE id = ?';
        const row = await this.db.get(sql, [id.value]);
    
        return row ? this.mapRowToTask(row) : null;
      }
    
      async findPendingTasks(): Promise<Task[]> {
        const sql = 'SELECT * FROM tasks WHERE status = ? ORDER BY priority DESC, created_at ASC';
        const rows = await this.db.all(sql, ['pending']);
    
        return rows.map(row => this.mapRowToTask(row));
      }
    
      private mapRowToTask(row: any): Task {
        return Task.reconstitute({
          id: TaskId.fromString(row.id),
          description: row.description,
          priority: Priority.fromString(row.priority),
          status: TaskStatus.fromString(row.status),
          assignedAgentId: row.assigned_agent_id,
          createdAt: new Date(row.created_at),
          updatedAt: new Date(row.updated_at)
        });
      }
    }
    

    Application Layer

    Use Case Implementation

    // src$core$application$use-cases$assign-task.use-case.ts
    @Injectable()
    export class AssignTaskUseCase {
      constructor(
        @Inject('TaskRepository') private taskRepository: ITaskRepository,
        @Inject('AgentRepository') private agentRepository: IAgentRepository,
        @Inject('DomainEventBus') private eventBus: DomainEventBus,
        @Inject('Logger') private logger: ILogger
      ) {}
    
      async execute(command: AssignTaskCommand): Promise<AssignTaskResult> {
        try {
          // 1. Validate command
          await this.validateCommand(command);
    
          // 2. Load aggregates
          const task = await this.taskRepository.findById(command.taskId);
          if (!task) {
            throw new TaskNotFoundError(command.taskId);
          }
    
          const agent = await this.agentRepository.findById(command.agentId);
          if (!agent) {
            throw new AgentNotFoundError(command.agentId);
          }
    
          // 3. Business logic
          if (!agent.canAcceptTask(task)) {
            throw new AgentCannotAcceptTaskError(command.agentId, command.taskId);
          }
    
          task.assignTo(command.agentId);
          agent.acceptTask(task.id);
    
          // 4. Persist changes
          await Promise.all([
            this.taskRepository.save(task),
            this.agentRepository.save(agent)
          ]);
    
          // 5. Publish domain events
          const events = [
            ...task.getUncommittedEvents(),
            ...agent.getUncommittedEvents()
          ];
    
          for (const event of events) {
            await this.eventBus.publish(event);
          }
    
          task.markEventsAsCommitted();
          agent.markEventsAsCommitted();
    
          // 6. Return result
          this.logger.info(`Task ${command.taskId.value} assigned to agent ${command.agentId}`);
    
          return AssignTaskResult.success({
            taskId: task.id,
            agentId: command.agentId,
            assignedAt: new Date()
          });
    
        } catch (error) {
          this.logger.error(`Failed to assign task ${command.taskId.value}:`, error);
          return AssignTaskResult.failure(error);
        }
      }
    
      private async validateCommand(command: AssignTaskCommand): Promise<void> {
        if (!command.taskId) {
          throw new ValidationError('Task ID is required');
        }
        if (!command.agentId) {
          throw new ValidationError('Agent ID is required');
        }
      }
    }
    

    Dependency Injection Setup

    Container Configuration

    // src$core$shared$infrastructure$dependency-container.ts
    import { Container } from 'inversify';
    import { TYPES } from '.$types';
    
    export class DependencyContainer {
      private container: Container;
    
      constructor() {
        this.container = new Container();
        this.setupBindings();
      }
    
      private setupBindings(): void {
        // Repositories
        this.container.bind<ITaskRepository>(TYPES.TaskRepository)
          .to(SqliteTaskRepository)
          .inSingletonScope();
    
        this.container.bind<IAgentRepository>(TYPES.AgentRepository)
          .to(SqliteAgentRepository)
          .inSingletonScope();
    
        // Services
        this.container.bind<TaskSchedulingService>(TYPES.TaskSchedulingService)
          .to(TaskSchedulingService)
          .inSingletonScope();
    
        // Use Cases
        this.container.bind<AssignTaskUseCase>(TYPES.AssignTaskUseCase)
          .to(AssignTaskUseCase)
          .inSingletonScope();
    
        // Infrastructure
        this.container.bind<ILogger>(TYPES.Logger)
          .to(ConsoleLogger)
          .inSingletonScope();
    
        this.container.bind<DomainEventBus>(TYPES.DomainEventBus)
          .to(InMemoryDomainEventBus)
          .inSingletonScope();
      }
    
      get<T>(serviceIdentifier: symbol): T {
        return this.container.get<T>(serviceIdentifier);
      }
    
      bind<T>(serviceIdentifier: symbol): BindingToSyntax<T> {
        return this.container.bind<T>(serviceIdentifier);
      }
    }
    

    Modern TypeScript Configuration

    Strict TypeScript Setup

    // tsconfig.json
    {
      "compilerOptions": {
        "target": "ES2022",
        "lib": ["ES2022"],
        "module": "NodeNext",
        "moduleResolution": "NodeNext",
        "declaration": true,
        "outDir": ".$dist",
        "strict": true,
        "exactOptionalPropertyTypes": true,
        "noImplicitReturns": true,
        "noFallthroughCasesInSwitch": true,
        "noUncheckedIndexedAccess": true,
        "noImplicitOverride": true,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "skipLibCheck": true,
        "forceConsistentCasingInFileNames": true,
        "resolveJsonModule": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "baseUrl": ".",
        "paths": {
          "@/*": ["src/*"],
          "@core/*": ["src$core/*"],
          "@shared/*": ["src$core$shared/*"],
          "@domains/*": ["src$core$domains/*"]
        }
      },
      "include": ["src/**/*"],
      "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"]
    }
    

    Testing Implementation

    Domain Unit Tests

    // src$core$domains$task-management/__tests__$entities$task.entity.test.ts
    describe('Task Entity', () => {
      let task: Task;
    
      beforeEach(() => {
        task = Task.create('Test task', Priority.medium());
      });
    
      describe('creation', () => {
        it('should create task with pending status', () => {
          expect(task.status.isPending()).toBe(true);
          expect(task.description).toBe('Test task');
          expect(task.priority.equals(Priority.medium())).toBe(true);
        });
    
        it('should generate unique ID', () => {
          const task1 = Task.create('Task 1', Priority.low());
          const task2 = Task.create('Task 2', Priority.low());
    
          expect(task1.id.equals(task2.id)).toBe(false);
        });
      });
    
      describe('assignment', () => {
        it('should assign to agent and change status', () => {
          const agentId = 'agent-123';
    
          task.assignTo(agentId);
    
          expect(task.assignedAgentId).toBe(agentId);
          expect(task.status.isAssigned()).toBe(true);
        });
    
        it('should emit TaskAssignedEvent when assigned', () => {
          const agentId = 'agent-123';
    
          task.assignTo(agentId);
    
          const events = task.getUncommittedEvents();
          expect(events).toHaveLength(1);
          expect(events[0]).toBeInstanceOf(TaskAssignedEvent);
        });
    
        it('should not allow assignment of completed task', () => {
          task.assignTo('agent-123');
          task.complete(TaskResult.success('done'));
    
          expect(() => task.assignTo('agent-456'))
            .toThrow('Cannot assign completed task');
        });
      });
    });
    

    Integration Tests

    // src$core$domains$task-management/__tests__$integration$task-repository.integration.test.ts
    describe('TaskRepository Integration', () => {
      let repository: SqliteTaskRepository;
      let db: Database;
    
      beforeEach(async () => {
        db = new Database(':memory:');
        await setupTasksTable(db);
        repository = new SqliteTaskRepository(db, new ConsoleLogger());
      });
    
      afterEach(async () => {
        await db.close();
      });
    
      it('should save and retrieve task', async () => {
        const task = Task.create('Test task', Priority.high());
    
        await repository.save(task);
        const retrieved = await repository.findById(task.id);
    
        expect(retrieved).toBeDefined();
        expect(retrieved!.id.equals(task.id)).toBe(true);
        expect(retrieved!.description).toBe('Test task');
        expect(retrieved!.priority.equals(Priority.high())).toBe(true);
      });
    
      it('should find pending tasks ordered by priority', async () => {
        const lowTask = Task.create('Low priority', Priority.low());
        const highTask = Task.create('High priority', Priority.high());
    
        await repository.save(lowTask);
        await repository.save(highTask);
    
        const pending = await repository.findPendingTasks();
    
        expect(pending).toHaveLength(2);
        expect(pending[0].id.equals(highTask.id)).toBe(true); // High priority first
        expect(pending[1].id.equals(lowTask.id)).toBe(true);
      });
    });
    

    Performance Optimizations

    Entity Caching

    // src$core$shared$infrastructure$entity-cache.ts
    @Injectable()
    export class EntityCache<T extends Entity<any>> {
      private cache = new Map<string, { entity: T; timestamp: number }>();
      private readonly ttl: number = 300000; // 5 minutes
    
      set(id: string, entity: T): void {
        this.cache.set(id, { entity, timestamp: Date.now() });
      }
    
      get(id: string): T | null {
        const cached = this.cache.get(id);
        if (!cached) return null;
    
        // Check TTL
        if (Date.now() - cached.timestamp > this.ttl) {
          this.cache.delete(id);
          return null;
        }
    
        return cached.entity;
      }
    
      invalidate(id: string): void {
        this.cache.delete(id);
      }
    
      clear(): void {
        this.cache.clear();
      }
    }
    

    Success Metrics

    • Domain Isolation: 100% clean dependency boundaries
    • Test Coverage: >90% unit test coverage for domain logic
    • Type Safety: Strict TypeScript compilation with zero any types
    • Performance: <50ms average use case execution time
    • Memory Efficiency: <100MB heap usage for core domains
    • Plugin Architecture: Modular domain loading capability

    Related V3 Skills

    • v3-ddd-architecture - DDD architectural design
    • v3-mcp-optimization - MCP server integration
    • v3-memory-unification - AgentDB repository integration
    • v3-swarm-coordination - Swarm domain implementation

    Usage Examples

    Complete Core Implementation

    # Full core module implementation
    Task("Core implementation",
         "Implement all core domains with DDD patterns and comprehensive testing",
         "core-implementer")
    

    Domain-Specific Implementation

    # Single domain implementation
    Task("Task domain implementation",
         "Implement task management domain with entities, services, and repositories",
         "core-implementer")
    

    Reproducido de ruvnet/ruflo bajo licencia MIT. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Detalles

    Creador
    ruvnet
    Licencia
    MIT
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    ruvnet/ruflo
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de ruvnet/ruflo

    Este repo incluye 275 skills. Si instalas uno, normalmente ya tienes los demás.

    Inspecciona y audita genomas GEPA: carga y valida un genoma, renderiza el system prompt que compila, o clasifica los modos de fallo de una transcripción de ejecución.

    Costo de contexto al activarse
    833 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 días
    Permisos
    herramientas desarrollo

    Completion de un solo turno contra el modelo deepseek-chat de DeepSeek vía /v1/chat/completions. Lee DEEPSEEK_API_KEY y degrada con status:degraded si falta o la API no responde. Para tareas sin razonamiento.

    Costo de contexto al activarse
    566 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 días
    Permisos
    automatizacion

    Completion en modo razonamiento contra deepseek-reasoner (R1) de DeepSeek. Devuelve el chain-of-thought por separado de la respuesta final. Lee DEEPSEEK_API_KEY y degrada si falta o la API no responde.

    Costo de contexto al activarse
    627 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 días
    Permisos
    automatizacion

    Construye o reconstruye el índice de ADRs y su grafo de dependencias ejecutando scripts/import.mjs, en vez de cientos de llamadas MCP.

    Costo de contexto al activarse
    866 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 27 días
    herramientas desarrollo

    Crea un nuevo Architecture Decision Record con numeración secuencial y registro en AgentDB.

    Costo de contexto al activarse
    680 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 27 días
    herramientas desarrollo

    Muestra el estado de la integración AGNTCY/SLIM/CASA: si los paquetes están instalados, qué transporte está activo y si el enforcement de CASA está habilitado.

    Costo de contexto al activarse
    443 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 26 días
    devops infraestructura

    Skills relacionados

    Añade descripciones de modelos nuevos del router de HuggingFace a la configuración de chat-ui (prod.yaml y dev.yaml).

    Costo de contexto al activarse
    600 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 5 meses
    herramientas desarrollo

    Crea un nuevo Architecture Decision Record con numeración secuencial y registro en AgentDB.

    Costo de contexto al activarse
    680 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 27 días
    herramientas desarrollo

    Construye o reconstruye el índice de ADRs y su grafo de dependencias ejecutando scripts/import.mjs, en vez de cientos de llamadas MCP.

    Costo de contexto al activarse
    866 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 27 días
    herramientas desarrollo