Documentation / QUAD Workflow / Assignment Agent

QUAD Assignment Agent

Intelligent Task Assignment with Learning from Human Behavior

Part of QUADβ„’ (Quick Unified Agentic Development) Methodology Β© 2025 Suman Addanke / A2 Vibe Creators LLC


Table of Contents

  • Overview
  • Assignment Flow
  • Trigger Sources (Complete Reference)
  • Circle Detection Methods
  • Within-Circle Assignment
  • Learning Mechanism (Detailed)
  • QUAD Web Application Integration
  • Configuration Reference

  • Overview

    The Assignment Agent is responsible for:

  • Detecting which Circle a sub-task belongs to
  • Assigning to specific person within that circle
  • Learning from reassignments to improve over time
  • β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    ASSIGNMENT AGENT OVERVIEW                                 β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    β”‚                                                                              β”‚
    β”‚   SOURCE OF TRUTH (Requirement)                                              β”‚
    β”‚          β”‚                                                                   β”‚
    β”‚          β–Ό                                                                   β”‚
    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                                          β”‚
    β”‚   β”‚ Story Agent  β”‚  Creates story with sub-tasks                            β”‚
    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                                          β”‚
    β”‚          β”‚                                                                   β”‚
    β”‚          β”‚ event: "story.expanded"                                          β”‚
    β”‚          β–Ό                                                                   β”‚
    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
    β”‚   β”‚                     ASSIGNMENT AGENT                                  β”‚  β”‚
    β”‚   β”‚                                                                       β”‚  β”‚
    β”‚   β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”‚  β”‚
    β”‚   β”‚  β”‚   DETECT    β”‚    β”‚   ASSIGN    β”‚    β”‚   LEARN     β”‚               β”‚  β”‚
    β”‚   β”‚  β”‚   CIRCLE    β”‚ ──►│   PERSON    β”‚ ──►│   FROM      β”‚               β”‚  β”‚
    β”‚   β”‚  β”‚             β”‚    β”‚             β”‚    β”‚   FEEDBACK  β”‚               β”‚  β”‚
    β”‚   β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β”‚  β”‚
    β”‚   β”‚                                                                       β”‚  β”‚
    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
    β”‚          β”‚                                                                   β”‚
    β”‚          β–Ό                                                                   β”‚
    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
    β”‚   β”‚  QUAD WEB APP: Human reviews & approves (HYBRID mode)                 β”‚  β”‚
    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
    β”‚          β”‚                                                                   β”‚
    β”‚          β–Ό                                                                   β”‚
    β”‚   Sub-tasks assigned in Jira/GitHub/Azure DevOps                            β”‚
    β”‚                                                                              β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Assignment Flow

    Complete Flow with All Steps

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    ASSIGNMENT FLOW (Detailed)                                β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    

    STEP 1: TRIGGER RECEIVED ════════════════════════════════════════════════════════════════════════════════

    Trigger sources (see full list below): β€’ Jira webhook: issue.created β€’ Slack message: #requirements channel β€’ Email: from pm@company.com β€’ Story Agent event: story.expanded

    Trigger payload contains: { source: "story-agent", event: "story.expanded", payload: { story_id: "RETAIL-456", story_title: "User Wishlist Feature", sub_tasks: [ { id: "ST-1", title: "Design DB schema for wishlists" }, { id: "ST-2", title: "Build React wishlist component" }, { id: "ST-3", title: "Create REST API endpoints" }, { id: "ST-4", title: "Write integration tests" }, { id: "ST-5", title: "Deploy to staging environment" } ] } }

    STEP 2: DETECT CIRCLE FOR EACH SUB-TASK ════════════════════════════════════════════════════════════════════════════════

    For each sub_task, Assignment Agent determines circle:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Sub-Task β”‚ Detection Method β”‚ Circle β”‚ Confidence β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ "Design DB schema..." β”‚ AI analyzed β”‚ 1 β”‚ 94% β”‚ β”‚ "Build React wishlist..." β”‚ AI analyzed β”‚ 2 β”‚ 91% β”‚ β”‚ "Create REST API..." β”‚ AI analyzed β”‚ 2 β”‚ 88% β”‚ β”‚ "Write integration tests..." β”‚ AI analyzed β”‚ 3 β”‚ 96% β”‚ β”‚ "Deploy to staging..." β”‚ AI analyzed β”‚ 4 β”‚ 97% β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    STEP 3: ASSIGN PERSON WITHIN CIRCLE ════════════════════════════════════════════════════════════════════════════════

    For each sub_task, select person from circle members:

    Circle 1 (Management): [Alice, Frank] Circle 2 (Development): [Bob, Carol, Greg] Circle 3 (QA): [Dave, Helen] Circle 4 (Infrastructure): [Eve, Ivan]

    Assignment Logic: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Sub-Task β”‚ Circle β”‚ Method β”‚ Selected β”‚ Why β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ Design DB schema β”‚ 1 β”‚ Skill match β”‚ Alice β”‚ DB skill: 0.9 β”‚ β”‚ Build React β”‚ 2 β”‚ Round-robin β”‚ Bob β”‚ Next in rotation β”‚ β”‚ Create REST API β”‚ 2 β”‚ Learned affinity β”‚ Carol β”‚ API affinity +3 β”‚ β”‚ Write tests β”‚ 3 β”‚ Round-robin β”‚ Dave β”‚ Next in rotation β”‚ β”‚ Deploy staging β”‚ 4 β”‚ Round-robin β”‚ Eve β”‚ Next in rotation β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    STEP 4: PRESENT FOR APPROVAL (HYBRID MODE) ════════════════════════════════════════════════════════════════════════════════

    QUAD Web App shows:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ASSIGNMENT REVIEW [Approve All] [Cancel] β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ β”‚ β”‚ Story: "User Wishlist Feature" [RETAIL-456] β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ β˜‘ ST-1: Design DB schema β†’ Circle 1 β†’ @Alice (94% conf) [Edit β–Ό]β”‚ β”‚ β”‚ β”‚ β˜‘ ST-2: Build React wishlist β†’ Circle 2 β†’ @Bob (91% conf) [Edit β–Ό]β”‚ β”‚ β”‚ β”‚ β˜‘ ST-3: Create REST API β†’ Circle 2 β†’ @Carol (88% conf) [Edit β–Ό]β”‚ β”‚ β”‚ β”‚ β˜‘ ST-4: Write integration testsβ†’ Circle 3 β†’ @Dave (96% conf) [Edit β–Ό]β”‚ β”‚ β”‚ β”‚ β˜‘ ST-5: Deploy to staging β†’ Circle 4 β†’ @Eve (97% conf) [Edit β–Ό]β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ πŸ’‘ Carol suggested for API task based on 3 previous reassignments β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    STEP 5: EXECUTE ASSIGNMENT ════════════════════════════════════════════════════════════════════════════════

    After approval, Assignment Agent: 1. Updates Jira/GitHub with assignee for each sub-task 2. Notifies assignees via Slack/Email 3. Records assignment for future learning

    STEP 6: MONITOR FOR REASSIGNMENTS ════════════════════════════════════════════════════════════════════════════════

    Assignment Agent watches for: β€’ Jira webhook: issue.updated (assignee changed) β€’ GitHub: issue reassigned β€’ Manual changes in any tool

    When reassignment detected β†’ LEARN (see Learning Mechanism section)

    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


    Trigger Sources (Complete Reference)

    All Trigger Options with Context

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    TRIGGER SOURCES (COMPLETE)                                β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    
  • SLACK TRIGGERS
  • ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ CHANNEL MESSAGE β”‚ Specific channel β”‚ Story Agent β”‚ #requirementsβ”‚ β”‚ CHANNEL MESSAGE β”‚ Any public channel β”‚ Story Agent β”‚ * β”‚ β”‚ CHANNEL MESSAGE β”‚ Private channel β”‚ Story Agent β”‚ #core-team β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ DIRECT MESSAGE β”‚ From specific person β”‚ Any agent β”‚ @PM-John β”‚ β”‚ DIRECT MESSAGE β”‚ From any person β”‚ Any agent β”‚ * β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ THREAD REPLY β”‚ In specific thread β”‚ Story Agent β”‚ Thread ID β”‚ β”‚ THREAD REPLY β”‚ Any thread β”‚ Story Agent β”‚ * β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ MENTION β”‚ @QUAD mentioned β”‚ Route by cmd β”‚ @QUAD expand β”‚ β”‚ MENTION β”‚ @StoryAgent mentioned β”‚ Story Agent β”‚ @StoryAgent β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ EMOJI REACTION β”‚ Specific emoji β”‚ Custom β”‚ :rocket: β”‚ β”‚ EMOJI REACTION β”‚ On specific channel β”‚ Custom β”‚ :approve: β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ FILE SHARED β”‚ In specific channel β”‚ Doc Agent β”‚ #docs β”‚ β”‚ FILE SHARED β”‚ File type filter β”‚ Doc Agent β”‚ .pdf, .md β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Configuration Example:

    yaml slack: triggers: # Monitor specific channel for requirements requirements-channel: type: CHANNEL_MESSAGE channel: "#requirements" filter: contains_keywords: [requirement, story, feature, need] target_agent: story-agent context: project: auto-detect # From channel topic or message priority: P2 # Default priority

    # Monitor PM direct messages pm-directs: type: DIRECT_MESSAGE from: - "@john.pm" - "@sarah.pm" target_agent: story-agent context: source: "PM Direct" priority: P1

    # React to approve emoji emoji-approval: type: EMOJI_REACTION emoji: ":white_check_mark:" channel: "#pr-reviews" target_agent: deploy-agent context: action: "approve-and-merge"

    # Any mention of @QUAD bot quad-mention: type: MENTION mention: "@QUAD" target_agent: router # Routes based on command

    2. EMAIL TRIGGERS
    ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ FROM SPECIFIC PERSON β”‚ Exact email β”‚ Story Agent β”‚ pm@company β”‚ β”‚ FROM DOMAIN β”‚ Wildcard domain β”‚ Story Agent β”‚ *@client.com β”‚ β”‚ FROM GROUP β”‚ Distribution list β”‚ Story Agent β”‚ pms@company β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ TO SPECIFIC ADDRESS β”‚ Sent to this inbox β”‚ Any agent β”‚ req@company β”‚ β”‚ TO GROUP β”‚ Sent to group β”‚ Any agent β”‚ dev@company β”‚ β”‚ CC/BCC β”‚ Copied to address β”‚ Any agent β”‚ audit@ β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ SUBJECT CONTAINS β”‚ Keywords in subject β”‚ Story Agent β”‚ "REQ:", "CR:"β”‚ β”‚ SUBJECT PATTERN β”‚ Regex pattern β”‚ Story Agent β”‚ "^REQ-\d+" β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ BODY CONTAINS β”‚ Keywords in body β”‚ Story Agent β”‚ "Please impl"β”‚ β”‚ ATTACHMENT TYPE β”‚ File type attached β”‚ Doc Agent β”‚ .pdf, .doc β”‚ β”‚ ATTACHMENT NAME β”‚ File name pattern β”‚ Doc Agent β”‚ "spec_*.pdf" β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ LABEL/FOLDER β”‚ Gmail label or folder β”‚ Any agent β”‚ "Inbox/Reqs" β”‚ β”‚ UNREAD ONLY β”‚ Only unread emails β”‚ Any agent β”‚ true/false β”‚ β”‚ THREAD β”‚ Part of specific threadβ”‚ Same agent β”‚ Thread ID β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Configuration Example:

    yaml email: connection: type: IMAP # or MS_GRAPH for Office 365 host: imap.company.com credentials: $EMAIL_CREDENTIALS

    triggers: # From any PM in the company pm-requirements: type: FROM_GROUP group: "pm-team@company.com" subject_contains: ["requirement", "story", "feature"] target_agent: story-agent context: source: "PM Email" priority: auto-detect # Parse from subject/body

    # From client domain client-requests: type: FROM_DOMAIN domain: "*.bigclient.com" target_agent: story-agent context: source: "Client Request" priority: P1 notify: ["@pm-lead", "#client-requests"]

    # Emails to specific requirements inbox requirements-inbox: type: TO_ADDRESS address: "requirements@company.com" target_agent: story-agent context: auto_respond: true # Send "We received your request"

    # Attachments containing specs spec-documents: type: ATTACHMENT_TYPE patterns: [".pdf", ".docx"] attachment_name_contains: ["spec", "requirement", "prd"] target_agent: doc-agent context: action: "extract-and-create-stories"

    # Specific folder/label in Gmail/Outlook inbox-requirements-folder: type: LABEL label: "Inbox/Requirements" # Gmail label or Outlook folder target_agent: story-agent context: mark_as_read: true

    3. JIRA TRIGGERS
    ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ ISSUE CREATED β”‚ New issue β”‚ Story Agent β”‚ type: Story β”‚ β”‚ ISSUE UPDATED β”‚ Issue modified β”‚ Story Agent β”‚ desc changed β”‚ β”‚ ISSUE TRANSITIONED β”‚ Status changed β”‚ Assignment β”‚ To: Ready β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ ASSIGNEE CHANGED β”‚ Reassignment β”‚ Learn Agent β”‚ A β†’ B β”‚ β”‚ COMMENT ADDED β”‚ New comment β”‚ Any agent β”‚ @QUAD expand β”‚ β”‚ ATTACHMENT ADDED β”‚ File attached β”‚ Doc Agent β”‚ *.pdf β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ SPRINT STARTED β”‚ Sprint begins β”‚ Assignment β”‚ Sprint 5 β”‚ β”‚ SPRINT ENDED β”‚ Sprint ends β”‚ Report Agent β”‚ Sprint 5 β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ PROJECT SPECIFIC β”‚ Only this project β”‚ Any agent β”‚ RETAIL β”‚ β”‚ ISSUE TYPE β”‚ Story, Bug, Task β”‚ Any agent β”‚ Story only β”‚ β”‚ LABEL ADDED β”‚ Specific label β”‚ Any agent β”‚ "needs-ai" β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Configuration Example:

    yaml jira: webhook_url: "/api/webhooks/jira"

    triggers: # New story created story-created: event: issue.created filter: project: ["RETAIL", "PLATFORM"] issueType: ["Story", "Epic"] target_agent: story-agent context: action: "expand-story"

    # Issue transitioned to "Ready for Dev" ready-for-dev: event: issue.transitioned filter: to_status: "Ready for Dev" target_agent: assignment-agent context: action: "assign-to-circles"

    # Assignee changed (for learning) reassignment-detected: event: issue.updated filter: field_changed: "assignee" target_agent: learning-agent context: action: "record-reassignment"

    # Comment with @QUAD mention quad-comment: event: comment.created filter: body_contains: "@QUAD" target_agent: router context: action: "parse-command"

    4. GITHUB TRIGGERS
    ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ PR OPENED β”‚ New pull request β”‚ Review Agent β”‚ To main β”‚ β”‚ PR UPDATED β”‚ New commits pushed β”‚ Review Agent β”‚ Re-review β”‚ β”‚ PR REVIEW β”‚ Review submitted β”‚ Deploy Agent β”‚ Approved β”‚ β”‚ PR MERGED β”‚ PR merged β”‚ Deploy Agent β”‚ To main β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ ISSUE CREATED β”‚ New issue β”‚ Story Agent β”‚ Bug report β”‚ β”‚ ISSUE LABELED β”‚ Label added β”‚ Any agent β”‚ "needs-triageβ”‚ β”‚ ISSUE ASSIGNED β”‚ Assignment changed β”‚ Learn Agent β”‚ A β†’ B β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ PUSH β”‚ Code pushed β”‚ Build Agent β”‚ To develop β”‚ β”‚ PUSH TO BRANCH β”‚ Specific branch β”‚ Deploy Agent β”‚ To main β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ DISCUSSION β”‚ Discussions feature β”‚ Doc Agent β”‚ RFC created β”‚ β”‚ RELEASE β”‚ Release created β”‚ Deploy Agent β”‚ v1.2.0 β”‚ β”‚ WORKFLOW RUN β”‚ CI/CD workflow β”‚ Monitor Agentβ”‚ Failed β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  • MICROSOFT TEAMS TRIGGERS
  • ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ CHANNEL MESSAGE β”‚ Specific channel β”‚ Story Agent β”‚ Requirements β”‚ β”‚ CHAT MESSAGE β”‚ 1:1 or group chat β”‚ Any agent β”‚ From PM β”‚ β”‚ @MENTION β”‚ Bot mentioned β”‚ Router β”‚ @QUAD expand β”‚ β”‚ ADAPTIVE CARD β”‚ Card button clicked β”‚ Any agent β”‚ "Approve" β”‚ β”‚ FILE SHARED β”‚ In channel β”‚ Doc Agent β”‚ *.pdf β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  • SCHEDULED TRIGGERS (CRON)
  • ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ DAILY β”‚ Every day at time β”‚ Report Agent β”‚ 6:00 AM β”‚ β”‚ WEEKLY β”‚ Every week on day β”‚ Review Agent β”‚ Mon 9:00 AM β”‚ β”‚ CUSTOM CRON β”‚ Cron expression β”‚ Any agent β”‚ /15 * β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ STALE CHECK β”‚ Find stale items β”‚ Reminder Agt β”‚ > 3 days old β”‚ β”‚ SPRINT START β”‚ When sprint begins β”‚ Assignment β”‚ Auto-assign β”‚ β”‚ SPRINT END β”‚ Before sprint ends β”‚ Report Agent β”‚ Generate rpt β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Configuration Example:

    yaml scheduled: triggers: # Daily standup reminder daily-standup: cron: "0 9 1-5" # 9 AM Mon-Fri target_agent: reminder-agent context: action: "send-standup-reminder" channel: "#daily-standup"

    # Weekly stale story check stale-check: cron: "0 10 MON" # 10 AM Monday target_agent: cleanup-agent context: action: "find-stale-stories" threshold_days: 7 notify: ["@pm-lead"]

    # Re-assign unassigned tasks every 4 hours unassigned-check: cron: "0 /4 " # Every 4 hours target_agent: assignment-agent context: action: "assign-unassigned" filter: "status = 'Ready' AND assignee IS NULL"

    7. MANUAL TRIGGERS
    ═══════════════════════════════════════════════════════════════════════════════

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Trigger Type β”‚ Context β”‚ Target Agent β”‚ Example β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ CLI COMMAND β”‚ Terminal β”‚ Any agent β”‚ quad invoke β”‚ β”‚ IDE RIGHT-CLICK β”‚ VS Code context menu β”‚ Any agent β”‚ Expand story β”‚ β”‚ QUAD WEB APP β”‚ Button click β”‚ Any agent β”‚ "Assign All" β”‚ β”‚ KEYBOARD SHORTCUT β”‚ IDE hotkey β”‚ Any agent β”‚ Cmd+Shift+Q β”‚ β”‚ CHAT COMMAND β”‚ Claude/Copilot β”‚ Any agent β”‚ /quad expand β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


    Circle Detection Methods

    All Options with Configuration

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    CIRCLE DETECTION METHODS                                  β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    

    METHOD 1: RULE-BASED (Simple, Fast) ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Define keyword β†’ circle mappings 2. Scan sub-task title/description for keywords 3. First match wins (or weighted scoring)

    yaml circle_detection: method: RULE_BASED rules: circle_1: # Management keywords: [database, schema, migration, requirement, spec, design] weight: 1.0 circle_2: # Development keywords: [UI, frontend, React, Angular, Vue, backend, API, REST, service] weight: 1.0 circle_3: # QA keywords: [test, QA, validation, verify, check, bug, defect] weight: 1.0 circle_4: # Infrastructure keywords: [deploy, kubernetes, docker, infra, CI, CD, pipeline, monitor] weight: 1.0

    fallback: circle_2 # Default if no match

    Pros: Fast, predictable, easy to debug
    Cons: Misses nuanced tasks, requires maintenance

    METHOD 2: AI-BASED (Intelligent, Recommended) DEFAULT ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Send sub-task to AI (Gemini/Claude/GPT) 2. AI classifies based on understanding, not just keywords 3. Returns circle + confidence score

    yaml circle_detection: method: AI_BASED # DEFAULT ai_provider: gemini # or openai, anthropic

    prompt_template: | You are a QUAD methodology expert. Classify this sub-task into one of 4 circles:

    Circle 1 (Management): BA work, requirements, specifications, database design Circle 2 (Development): UI code, API code, frontend, backend implementation Circle 3 (QA): Testing, validation, quality assurance, bug verification Circle 4 (Infrastructure): Deployment, CI/CD, monitoring, operations

    Sub-task: "{sub_task_title}" Description: "{sub_task_description}"

    Respond with JSON: { "circle": 1-4, "confidence": 0.0-1.0, "reasoning": "brief explanation" }

    min_confidence: 0.7 # Below this, ask human fallback: RULE_BASED # If AI fails

    Pros: Understands context, handles edge cases
    Cons: Slower, costs API calls, may need tuning

    METHOD 3: EXPLICIT TAGS (Pre-labeled by Story Agent) ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Story Agent adds circle hint when creating sub-tasks 2. Assignment Agent just reads the hint 3. No additional detection needed

    yaml circle_detection: method: EXPLICIT_TAGS tag_field: "circle" # Field name in sub-task

    # Story Agent config to add tags story_agent: add_circle_hints: true circle_hint_field: "circle"

    Example sub-task from Story Agent:
    json { "title": "Build React wishlist component", "circle": 2, "circle_confidence": 0.95 }
    Pros: No duplicate processing, consistent
    Cons: Requires Story Agent to be accurate

    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


    Within-Circle Assignment

    All Options with Configuration

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    WITHIN-CIRCLE ASSIGNMENT METHODS                          β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    

    METHOD 1: ROUND-ROBIN (Simple, Fair) DEFAULT ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Maintain pointer to "next person" in each circle 2. Assign to next person, advance pointer 3. Wrap around when end reached

    yaml within_circle: method: ROUND_ROBIN # DEFAULT

    # State stored per circle state: circle_1: members: [alice, frank] next_index: 0 circle_2: members: [bob, carol, greg] next_index: 1 # Carol is next

    Example:
      Task 1 β†’ Bob (index 0)
      Task 2 β†’ Carol (index 1)
      Task 3 β†’ Greg (index 2)
      Task 4 β†’ Bob (index 0, wrapped)

    METHOD 2: SKILLS MATCH (Smart, Complex) ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Extract required skills from sub-task 2. Match against person skill profiles 3. Assign to best skill match

    yaml within_circle: method: SKILLS_MATCH

    # Person skill profiles profiles: bob: skills: react: 0.9 typescript: 0.8 css: 0.6 circle: 2 carol: skills: nodejs: 0.9 rest_api: 0.95 postgresql: 0.8 circle: 2 greg: skills: react: 0.7 angular: 0.9 testing: 0.6 circle: 2

    # How to extract skills from task skill_extraction: method: AI # or KEYWORD ai_prompt: "Extract technical skills needed for: {task_title}"

    Example:
      Task: "Build React wishlist component"
      Skills needed: [react, typescript]

    Scores: Bob: react(0.9) + typescript(0.8) = 1.7 ← BEST Carol: react(0.0) + typescript(0.0) = 0.0 Greg: react(0.7) + typescript(0.0) = 0.7

    Assign to: Bob

    METHOD 3: ROUND-ROBIN + SKILLS (Hybrid) ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Filter circle members by minimum skill match 2. Round-robin among filtered members 3. If no skill match, fallback to pure round-robin

    yaml within_circle: method: ROUND_ROBIN_SKILLS # Hybrid

    min_skill_score: 0.5 # Need at least 50% skill match

    # If multiple people have skills, round-robin among them # If nobody has skills, round-robin among all

    Example:
      Task: "Build React wishlist component"
      Skills needed: [react]

    Filtering: Bob: react(0.9) >= 0.5 βœ“ Include Carol: react(0.0) < 0.5 βœ— Exclude Greg: react(0.7) >= 0.5 βœ“ Include

    Round-robin pool: [Bob, Greg] Next in rotation: Bob Assign to: Bob

    METHOD 4: LOAD BALANCE (Capacity-based) ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Count current assigned tasks per person 2. Assign to person with least tasks 3. Optionally weight by task complexity

    yaml within_circle: method: LOAD_BALANCE

    # How to count load load_calculation: method: TASK_COUNT # or STORY_POINTS include_statuses: [TODO, IN_PROGRESS] # Don't count Done max_load: 5 # Max tasks per person

    # If tie, use round-robin tiebreaker: ROUND_ROBIN

    Example:
      Current load:
        Bob:   3 tasks
        Carol: 1 task  ← LEAST
        Greg:  2 tasks

    Assign to: Carol

    METHOD 5: MANUAL (Circle Lead Decides) ═══════════════════════════════════════════════════════════════════════════════

    How it works: 1. Assign to circle (not person) 2. Circle lead gets notified 3. Circle lead manually assigns to person

    yaml within_circle: method: MANUAL

    circle_leads: circle_1: alice circle_2: bob circle_3: dave circle_4: eve

    notification: channel: slack message: "New task for Circle {circle}: {task_title}"

    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


    Learning Mechanism (Detailed)

    EXACTLY How Learning Works

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    LEARNING MECHANISM (DETAILED)                             β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    

    OVERVIEW ════════════════════════════════════════════════════════════════════════════════

    The Assignment Agent learns from human behavior: β€’ Reassignments (A β†’ B means B is better for this type) β€’ Completion times (fast = good match) β€’ Explicit feedback (optional rating)

    This improves future assignments without manual configuration.

    STEP 1: DATA COLLECTION ════════════════════════════════════════════════════════════════════════════════

    What we collect for each task:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ TASK RECORD β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ task_id: "ST-123" β”‚ β”‚ task_title: "Create REST API for wishlist" β”‚ β”‚ task_description: "Build endpoints for CRUD operations..." β”‚ β”‚ β”‚ β”‚ # Extracted features (by AI or rules) β”‚ β”‚ detected_skills: ["rest_api", "nodejs", "postgresql"] β”‚ β”‚ detected_circle: 2 β”‚ β”‚ detected_complexity: "MEDIUM" β”‚ β”‚ detected_type: "IMPLEMENTATION" β”‚ β”‚ β”‚ β”‚ # Assignment history β”‚ β”‚ original_assignee: "bob" β”‚ β”‚ original_timestamp: "2025-01-15T10:00:00Z" β”‚ β”‚ original_method: "ROUND_ROBIN" β”‚ β”‚ β”‚ β”‚ # Reassignment (if happened) β”‚ β”‚ reassigned_to: "carol" β”‚ β”‚ reassigned_timestamp: "2025-01-15T14:30:00Z" β”‚ β”‚ reassigned_by: "bob" # Self-reassigned β”‚ β”‚ reassignment_reason: "Carol has more API experience" # From comment β”‚ β”‚ β”‚ β”‚ # Completion data β”‚ β”‚ completed_by: "carol" β”‚ β”‚ completed_timestamp: "2025-01-16T16:00:00Z" β”‚ β”‚ completion_time_hrs: 25.5 β”‚ β”‚ quality_rating: null # Optional β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Storage:

    sql CREATE TABLE assignment_learning_data ( id UUID PRIMARY KEY, task_id VARCHAR NOT NULL, task_title TEXT,

    -- Feature extraction detected_skills JSONB, -- ["rest_api", "nodejs"] detected_circle INTEGER, detected_complexity VARCHAR, -- LOW, MEDIUM, HIGH detected_type VARCHAR, -- IMPLEMENTATION, TEST, DEPLOY

    -- Original assignment original_assignee VARCHAR, original_timestamp TIMESTAMP, original_method VARCHAR, -- ROUND_ROBIN, SKILLS_MATCH, etc.

    -- Reassignment (nullable) was_reassigned BOOLEAN DEFAULT FALSE, reassigned_to VARCHAR, reassigned_timestamp TIMESTAMP, reassigned_by VARCHAR, reassignment_reason TEXT,

    -- Completion completed_by VARCHAR, completed_timestamp TIMESTAMP, completion_time_hours DECIMAL,

    -- Metadata created_at TIMESTAMP DEFAULT NOW() );

    STEP 2: FEATURE EXTRACTION
    ════════════════════════════════════════════════════════════════════════════════

    From each task, we extract:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Feature Type β”‚ How Extracted β”‚ Example Values β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ Skills β”‚ AI analysis or β”‚ ["react", "typescript", "api"] β”‚ β”‚ β”‚ keyword matching β”‚ β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ Task Type β”‚ AI classification β”‚ IMPLEMENTATION, TEST, CONFIG, β”‚ β”‚ β”‚ β”‚ DOCUMENTATION, DEPLOY, REVIEW β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ Complexity β”‚ AI analysis or β”‚ LOW, MEDIUM, HIGH β”‚ β”‚ β”‚ story points β”‚ β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ Keywords β”‚ TF-IDF extraction β”‚ ["wishlist", "crud", "rest"] β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ Circle β”‚ Circle detection β”‚ 1, 2, 3, 4 β”‚ β”‚ β”‚ method β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    STEP 3: BUILDING AFFINITY SCORES ════════════════════════════════════════════════════════════════════════════════

    For each person, we maintain affinity scores:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ PERSON AFFINITY MODEL β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ β”‚ β”‚ person_id: "carol" β”‚ β”‚ circle: 2 β”‚ β”‚ β”‚ β”‚ skill_affinity: β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ Skill β”‚ Score β”‚ Data Points β”‚ Last Updated β”‚ Trend β”‚β”‚ β”‚ │─────────────────────────────────────────────────────────────────────────││ β”‚ β”‚ rest_api β”‚ +3.2 β”‚ 12 β”‚ 2025-01-15 β”‚ ↑ (improving) β”‚β”‚ β”‚ β”‚ nodejs β”‚ +2.1 β”‚ 8 β”‚ 2025-01-14 β”‚ β†’ (stable) β”‚β”‚ β”‚ β”‚ postgresql β”‚ +1.5 β”‚ 5 β”‚ 2025-01-12 β”‚ ↑ (improving) β”‚β”‚ β”‚ β”‚ react β”‚ -0.8 β”‚ 3 β”‚ 2025-01-10 β”‚ ↓ (declining) β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚ β”‚ task_type_affinity: β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ Type β”‚ Score β”‚ Data Points β”‚ Trend β”‚β”‚ β”‚ │─────────────────────────────────────────────────────────────────────────││ β”‚ β”‚ IMPLEMENTATION β”‚ +2.5 β”‚ 15 β”‚ β†’ (stable) β”‚β”‚ β”‚ β”‚ TEST β”‚ -1.2 β”‚ 4 β”‚ ↓ (avoid) β”‚β”‚ β”‚ β”‚ DOCUMENTATION β”‚ +0.3 β”‚ 2 β”‚ β†’ (neutral) β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚ β”‚ complexity_affinity: β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚ β”‚ β”‚ Complexity β”‚ Avg Completion Time β”‚ vs Expected β”‚ Trend β”‚β”‚ β”‚ │─────────────────────────────────────────────────────────────────────────││ β”‚ β”‚ HIGH β”‚ 18.5 hours β”‚ -20% faster β”‚ ↑ Good at complex β”‚β”‚ β”‚ β”‚ MEDIUM β”‚ 8.2 hours β”‚ On par β”‚ β†’ β”‚β”‚ β”‚ β”‚ LOW β”‚ 3.1 hours β”‚ +10% slower β”‚ ↓ Bored? β”‚β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Storage:

    sql CREATE TABLE person_affinity ( person_id VARCHAR NOT NULL, affinity_type VARCHAR NOT NULL, -- 'skill', 'task_type', 'complexity' affinity_key VARCHAR NOT NULL, -- 'rest_api', 'IMPLEMENTATION', 'HIGH'

    score DECIMAL DEFAULT 0, -- Positive = good, Negative = avoid data_points INTEGER DEFAULT 0, -- How many samples last_updated TIMESTAMP,

    PRIMARY KEY (person_id, affinity_type, affinity_key) );

    STEP 4: UPDATE ALGORITHM
    ════════════════════════════════════════════════════════════════════════════════

    When reassignment happens:

    EVENT: Task "ST-123" reassigned from Bob to Carol Reason: "Carol has more API experience"

    ALGORITHM:

  • Extract features from task:
  • skills = ["rest_api", "nodejs"] type = "IMPLEMENTATION" complexity = "MEDIUM"
  • Update Bob's affinity (NEGATIVE signal):
  • For each skill in ["rest_api", "nodejs"]: bob.skill_affinity[skill].score -= REASSIGN_PENALTY # -1.0 bob.skill_affinity[skill].data_points += 1

    bob.task_type_affinity["IMPLEMENTATION"].score -= REASSIGN_PENALTY

  • Update Carol's affinity (POSITIVE signal):
  • For each skill in ["rest_api", "nodejs"]: carol.skill_affinity[skill].score += REASSIGN_BONUS # +1.5 carol.skill_affinity[skill].data_points += 1

    carol.task_type_affinity["IMPLEMENTATION"].score += REASSIGN_BONUS

  • Apply decay to old data:
  • For all affinities older than 30 days: affinity.score *= DECAY_FACTOR # 0.9
    Constants (configurable):
    yaml learning: reassign_penalty: 1.0 # Negative score when reassigned away reassign_bonus: 1.5 # Positive score when reassigned to completion_bonus: 0.5 # Bonus for completing assigned task fast_completion_bonus: 1.0 # Extra bonus for fast completion decay_factor: 0.9 # How much old data fades decay_period_days: 30 # Apply decay every N days min_data_points: 5 # Need N samples before using affinity
    STEP 5: INFERENCE (USING LEARNED DATA)
    ════════════════════════════════════════════════════════════════════════════════
    

    When assigning a new task:

    NEW TASK: "Build GraphQL API for orders" CIRCLE: 2 (Development) MEMBERS: [bob, carol, greg]

  • Extract features:
  • skills = ["graphql", "nodejs", "api"] type = "IMPLEMENTATION" complexity = "HIGH"
  • Calculate score for each person:
  • Bob's Score: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ skill_affinity["graphql"] = 0.0 (no data) β”‚ β”‚ skill_affinity["nodejs"] = -0.5 (some negatives)β”‚ β”‚ skill_affinity["api"] = -1.2 β”‚ β”‚ task_type_affinity["IMPL"] = +0.3 β”‚ β”‚ complexity_affinity["HIGH"] = -0.8 β”‚ β”‚ ───────────────────────────────────────────────────────│ β”‚ TOTAL = -2.2 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Carol's Score: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ skill_affinity["graphql"] = +0.8 β”‚ β”‚ skill_affinity["nodejs"] = +2.1 β”‚ β”‚ skill_affinity["api"] = +3.2 β”‚ β”‚ task_type_affinity["IMPL"] = +2.5 β”‚ β”‚ complexity_affinity["HIGH"] = +1.2 β”‚ β”‚ ───────────────────────────────────────────────────────│ β”‚ TOTAL = +9.8 ← HIGHEST β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Greg's Score: β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ skill_affinity["graphql"] = +1.5 β”‚ β”‚ skill_affinity["nodejs"] = +0.5 β”‚ β”‚ skill_affinity["api"] = +0.8 β”‚ β”‚ task_type_affinity["IMPL"] = +1.0 β”‚ β”‚ complexity_affinity["HIGH"] = +0.2 β”‚ β”‚ ───────────────────────────────────────────────────────│ β”‚ TOTAL = +4.0 β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

  • Combine with base method:
  • If method = ROUND_ROBIN: Next in rotation: Bob But Carol's score (+9.8) vs Bob's (-2.2) difference > THRESHOLD (5.0) OVERRIDE: Suggest Carol instead Confidence: 95% (large score difference)

    If method = SKILLS_MATCH: Base skill match would pick Carol anyway Learning confirms: Carol with +9.8

  • Return suggestion:
  • { "suggested_assignee": "carol", "confidence": 0.95, "reasoning": "Based on 12 historical reassignments, Carol is highly effective with API tasks. Last 5 similar tasks completed 20% faster than average.", "alternative": "greg", "round_robin_would_be": "bob" }
    STEP 6: FEEDBACK LOOP
    ════════════════════════════════════════════════════════════════════════════════
    

    After task completion:

    TASK COMPLETED: "Build GraphQL API for orders" ASSIGNEE: Carol TIME: 12 hours (expected: 16 hours = 25% faster)

    UPDATE AFFINITIES:

  • Carol completed (as assigned) - small positive:
  • carol.skill_affinity["graphql"].score += COMPLETION_BONUS # +0.5 carol.skill_affinity["nodejs"].score += COMPLETION_BONUS carol.skill_affinity["api"].score += COMPLETION_BONUS
  • Fast completion - extra positive:
  • time_ratio = 12/16 = 0.75 (25% faster) if time_ratio < 0.9: # At least 10% faster carol.all_affinities += FAST_BONUS * (1 - time_ratio) # +0.25
  • Update completion time stats:
  • carol.complexity_affinity["HIGH"].avg_time = (old_avg * old_count + 12) / (old_count + 1)
    VISUALIZATION: LEARNING DASHBOARD
    ════════════════════════════════════════════════════════════════════════════════
    

    QUAD Web App shows learning insights:

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ ASSIGNMENT LEARNING INSIGHTS β”‚ │──────────────────────────────────────────────────────────────────────────────│ β”‚ β”‚ β”‚ Circle 2 (Development) - 3 members β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ SKILL HEATMAP (darker = stronger affinity) β”‚ β”‚ β”‚ β”‚ ──────────────────────────────────────────────────────────────────── β”‚ β”‚ β”‚ β”‚ React Node.js API GraphQL SQL Testing β”‚ β”‚ β”‚ β”‚ Bob β–ˆβ–ˆβ–ˆβ–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘ β–‘β–‘β–‘β–‘β–‘ β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–‘β–‘ β”‚ β”‚ β”‚ β”‚ Carol β–‘β–‘β–‘β–‘β–‘ β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆ β–ˆβ–ˆβ–ˆβ–ˆβ–‘ β–ˆβ–ˆβ–ˆ β–‘β–‘β–‘β–‘β–‘ β”‚ β”‚ β”‚ β”‚ Greg β–ˆβ–ˆβ–ˆβ–ˆβ–‘ β–‘β–‘β–‘β–‘β–‘ β–ˆβ–ˆβ–‘ β–‘β–‘β–‘β–‘β–‘ β–‘β–‘β–‘ β–ˆβ–ˆβ–ˆβ–ˆβ–‘ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ β”‚ Legend: β–ˆβ–ˆβ–ˆβ–ˆβ–ˆ = Strong positive β–‘β–‘β–‘β–‘β–‘ = Neutral β–‘β–‘β–‘β–‘β–‘ = Negative β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ RECENT LEARNINGS β”‚ β”‚ β”‚ β”‚ ──────────────────────────────────────────────────────────────────── β”‚ β”‚ β”‚ β”‚ β€’ Carol reassigned 3 API tasks from Bob this month (+3.0 affinity) β”‚ β”‚ β”‚ β”‚ β€’ Greg excels at testing tasks, 30% faster than average β”‚ β”‚ β”‚ β”‚ β€’ Bob prefers React tasks, 2 self-reassigns from API tasks β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ β”‚ β”‚ RECOMMENDATIONS β”‚ β”‚ β”‚ β”‚ ──────────────────────────────────────────────────────────────────── β”‚ β”‚ β”‚ β”‚ β€’ Consider updating Bob's skill profile to exclude "api" β”‚ β”‚ β”‚ β”‚ β€’ Carol may be overloaded with API tasks (80% of assignments) β”‚ β”‚ β”‚ β”‚ β€’ Greg has capacity for more complex tasks β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β”‚ β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜


    QUAD Web Application Integration

    Central Hub for All Tools

    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β”‚                    QUAD WEB APPLICATION                                      β”‚
    β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
    β”‚                                                                              β”‚
    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
    β”‚  β”‚  INTEGRATIONS                                              [+ Add]  β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”β”‚    β”‚
    β”‚  β”‚  β”‚ β”Œβ”€β”€β”€β”€β” Jira           Connected  βœ“   Webhook: Active           β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”‚JIRAβ”‚ RETAIL, PLATFORM projects                    [Configure]β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β””β”€β”€β”€β”€β”˜                                                          β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”Œβ”€β”€β”€β”€β” GitHub         Connected  βœ“   Webhook: Active           β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”‚ GH β”‚ org/retail-app, org/platform                 [Configure]β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β””β”€β”€β”€β”€β”˜                                                          β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”Œβ”€β”€β”€β”€β” Slack          Connected  βœ“   Bot: @QUAD                β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”‚ SL β”‚ #requirements, #pr-reviews               [Configure]    β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β””β”€β”€β”€β”€β”˜                                                          β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”Œβ”€β”€β”€β”€β” Email (O365)   Connected  βœ“   Polling: 5 min            β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”‚ EM β”‚ requirements@company.com                     [Configure]β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β””β”€β”€β”€β”€β”˜                                                          β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”Œβ”€β”€β”€β”€β” Confluence     Connected  βœ“   Spaces: SPECS, DOCS       β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β”‚CONFβ”‚                                              [Configure]β”‚β”‚    β”‚
    β”‚  β”‚  β”‚ β””β”€β”€β”€β”€β”˜                                                          β”‚β”‚    β”‚
    β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜β”‚    β”‚
    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
    β”‚                                                                              β”‚
    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
    β”‚  β”‚  TRIGGER CONFIGURATION                                              β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β”‚  Active Triggers: 12                              [+ Add Trigger]  β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚    β”‚
    β”‚  β”‚  β”‚ Source    β”‚ Event           β”‚ Target Agent   β”‚ Status β”‚ Hits β”‚   β”‚    β”‚
    β”‚  β”‚  │──────────────────────────────────────────────────────────────│   β”‚    β”‚
    β”‚  β”‚  β”‚ Jira      β”‚ issue.created   β”‚ story-agent    β”‚ βœ“ On   β”‚ 145  β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ Slack     β”‚ #requirements   β”‚ story-agent    β”‚ βœ“ On   β”‚ 52   β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ Email     β”‚ from:pm@...     β”‚ story-agent    β”‚ βœ“ On   β”‚ 23   β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ GitHub    β”‚ PR opened       β”‚ review-agent   β”‚ βœ“ On   β”‚ 89   β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ Jira      β”‚ assignee change β”‚ learn-agent    β”‚ βœ“ On   β”‚ 31   β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ Cron      β”‚ Daily 9AM       β”‚ reminder-agent β”‚ βœ“ On   β”‚ 45   β”‚   β”‚    β”‚
    β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚    β”‚
    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
    β”‚                                                                              β”‚
    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
    β”‚  β”‚  PENDING ASSIGNMENTS (Hybrid Mode)                    [Approve All] β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β”‚  Story: "Order Management Enhancement" [RETAIL-789]                 β”‚    β”‚
    β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚    β”‚
    β”‚  β”‚  β”‚ β˜‘ Design order state machine    β†’ C1 β†’ @Alice (92%)  [Edit] β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ β˜‘ Build order list UI           β†’ C2 β†’ @Bob   (88%)  [Edit] β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ β˜‘ Create order API endpoints    β†’ C2 β†’ @Carol (95%)  [Edit] β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ β˜‘ Write order validation tests  β†’ C3 β†’ @Dave  (90%)  [Edit] β”‚   β”‚    β”‚
    β”‚  β”‚  β”‚ β˜‘ Deploy order service          β†’ C4 β†’ @Eve   (94%)  [Edit] β”‚   β”‚    β”‚
    β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β”‚  πŸ’‘ Carol recommended for API (3 reassignments, 95% confidence)     β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
    β”‚                                                                              β”‚
    β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
    β”‚  β”‚  LEARNING INSIGHTS                                     [View All]  β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β”‚  πŸ“Š Total Reassignments Tracked: 31                                 β”‚    β”‚
    β”‚  β”‚  πŸ“ˆ Assignment Accuracy: 87% (no reassignment)                      β”‚    β”‚
    β”‚  β”‚  🎯 Top Learnings:                                                  β”‚    β”‚
    β”‚  β”‚     β€’ Carol: +3.2 API affinity (12 data points)                    β”‚    β”‚
    β”‚  β”‚     β€’ Greg: +2.1 Testing affinity (8 data points)                  β”‚    β”‚
    β”‚  β”‚     β€’ Bob: -1.2 API affinity (5 data points)                       β”‚    β”‚
    β”‚  β”‚                                                                      β”‚    β”‚
    β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
    β”‚                                                                              β”‚
    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

    Configuration Reference

    Complete Configuration File

    <h1 class="text-3xl font-bold text-white mb-8">quad.config.yaml - Assignment Agent Section</h1>
    

    assignment_agent: enabled: true

    # ============================================================================ # MODE: How assignments are handled # ============================================================================ mode: HYBRID # AUTO MANUAL HYBRID (default) # AUTO: Assign without human approval # MANUAL: Always require human to assign # HYBRID: Suggest assignments, human approves in QUAD Web App

    # ============================================================================ # CIRCLE DETECTION: How to determine which circle # ============================================================================ circle_detection: method: AI_BASED # RULE_BASED AI_BASED (default) EXPLICIT_TAGS

    # AI-based config ai: provider: gemini # gemini openai anthropic min_confidence: 0.7 # Below this, flag for human review fallback: RULE_BASED # What to do if AI fails

    # Rule-based config (used as fallback or primary) rules: circle_1: keywords: [database, schema, migration, requirement, spec, design, BA] circle_2: keywords: [UI, frontend, React, backend, API, REST, service, component] circle_3: keywords: [test, QA, validation, verify, bug, defect, quality] circle_4: keywords: [deploy, kubernetes, docker, infra, CI, CD, monitor, ops]

    fallback_circle: 2 # Default if nothing matches

    # ============================================================================ # WITHIN-CIRCLE ASSIGNMENT: How to pick person in circle # ============================================================================ within_circle: method: ROUND_ROBIN # ROUND_ROBIN (default) SKILLS_MATCH # ROUND_ROBIN_SKILLS LOAD_BALANCE MANUAL

    # Skills matching config skills: enabled: true extraction_method: AI # AI | KEYWORD min_match_score: 0.5 # Minimum skill match to consider

    # Load balancing config load_balance: include_statuses: [TODO, IN_PROGRESS] max_tasks_per_person: 5

    # Circle leads (for MANUAL mode) circle_leads: 1: alice 2: bob 3: dave 4: eve

    # ============================================================================ # LEARNING: How to learn from reassignments # ============================================================================ learning: enabled: true

    # What signals to learn from signals: reassignment: true # Task moved to different person self_reassignment: true # Person reassigns their own task completion_time: true # Fast/slow completion explicit_feedback: false # Optional rating (if you have this)

    # Scoring weights weights: reassign_penalty: 1.0 # Negative when reassigned away reassign_bonus: 1.5 # Positive when reassigned to completion_bonus: 0.5 # For completing assigned task fast_completion_bonus: 1.0 # Extra for completing early

    # Data management min_data_points: 5 # Need N samples before trusting affinity decay_factor: 0.9 # Old data fades over time decay_period_days: 30 # Apply decay every N days

    # Override threshold override_threshold: 5.0 # Score difference to override round-robin

    # ============================================================================ # TRIGGERS: What events trigger assignment # ============================================================================ triggers: - event: story.expanded source: story-agent action: assign_sub_tasks

    - event: issue.transitioned source: jira filter: to_status: "Ready for Dev" action: assign_if_unassigned

    - event: issue.updated source: jira filter: field_changed: assignee action: record_reassignment

    # ============================================================================ # NOTIFICATIONS: How to notify about assignments # ============================================================================ notifications: on_assignment: slack: true email: false jira_comment: true

    on_pending_approval: # For HYBRID mode slack: channel: "#assignment-review" mention: "@pm-lead"


    Part of QUADβ„’ (Quick Unified Agentic Development) Methodology Β© 2025 Suman Addanke / A2 Vibe Creators LLC