{
  "meta": {
    "id": "agile-agent-team",
    "title": "Agile AI Agent Team",
    "subtitle": "Knowledge Coordination with Episteme",
    "version": "4.0.0"
  },
  "actors": {},
  "slides": [
    {
      "type": "title",
      "id": "title"
    },
    {
      "type": "hook",
      "id": "hook",
      "line": "Your agents have amnesia.",
      "subline": "Every correction you make is forgotten by the next session."
    },
    {
      "type": "code",
      "id": "drift-logging",
      "title": "Day 1: You correct the agent",
      "code": "// Agent used console.log\n// You: \"We use winston, not console.log\"\n\nimport { logger } from './logger';\n\nlogger.info('User authenticated', { userId });\n"
    },
    {
      "type": "code",
      "id": "drift-logging-2",
      "title": "Day 30: New session",
      "code": "// Agent writes new code...\n\nconsole.log('User authenticated');\nconsole.log('userId:', userId);\n\n// The correction from Day 1? Gone.\n"
    },
    {
      "type": "code",
      "id": "drift-http",
      "title": "Day 45: You correct again",
      "code": "// Agent used axios\n// You: \"We standardized on fetch\"\n\nconst response = await fetch('/api/users', {\n  headers: { 'Authorization': `Bearer ${token}` }\n});\n"
    },
    {
      "type": "code",
      "id": "drift-http-2",
      "title": "Day 60: Another new session",
      "code": "// Agent writes new code...\n\nimport axios from 'axios';\n\nconst response = await axios.get('/api/users', {\n  headers: { 'Authorization': `Bearer ${token}` }\n});\n\n// Forgot again. Different session, different choices.\n"
    },
    {
      "type": "code",
      "id": "spiral",
      "title": "6 months later: 10 ways to do 1 thing",
      "code": "// Logging\nconsole.log()        // 47 files\nwinston.info()       // 23 files\npino.info()          // 12 files\ndebug()              // 8 files\n\n// HTTP\nfetch()              // 31 files\naxios.get()          // 28 files\ngot()                // 6 files\n\n// Auth\nRS256                // 4 services\nES256                // 3 services\nHS256                // 2 services (why??)\n"
    },
    {
      "type": "hook",
      "id": "spiral-question",
      "line": "Which one is correct?",
      "subline": "Nobody knows. The decision was never recorded."
    },
    {
      "type": "code",
      "id": "catastrophe",
      "title": "The Catastrophe",
      "code": "// Auth service A expects RS256\n// Auth service B was deployed with ES256\n// An agent queried \"what's our JWT algorithm?\"\n// Got the most recent answer: ES256 (from an RFC proposal)\n\nHTTP 401 Unauthorized\n{\n  error: \"invalid_signature\",\n  expected: \"RS256\",\n  received: \"ES256\"\n}\n\n// 3:00 AM. Pager fires. 47-minute outage.\n"
    },
    {
      "type": "code",
      "id": "catastrophe-why",
      "title": "The Root Cause",
      "code": "// The RFC was stored without lifecycle state\n// The query returned the most recent entry\n// No way to distinguish \"proposed\" from \"approved\"\n// The agent treated an idea as truth\n\n// And now you have to audit 9 services\n// to figure out which JWT algorithm is actually correct.\n"
    },
    {
      "type": "hook",
      "id": "fix-intro",
      "line": "What if corrections persisted?",
      "subline": "Across sessions. Across agents. Forever."
    },
    {
      "type": "code",
      "id": "fix-store",
      "title": "Store decisions with context",
      "code": "episteme.assert({\n  subject: \"project/logging\",\n  predicate: \"library\",\n  value: \"winston\",\n\n  lifecycle: \"approved\",      // not proposed, not deprecated\n  confidence: 1.0,            // this is a decision, not a guess\n  source: \"adr-0012\"          // traceable to a decision record\n});\n"
    },
    {
      "type": "code",
      "id": "fix-query",
      "title": "Query with lifecycle filter",
      "code": "// Before writing code, agent checks constraints\n\nconst constraints = await episteme.query({\n  subject: \"project/logging\",\n  lifecycle: \"approved\"\n});\n\n// Returns: { library: \"winston\", confidence: 1.0 }\n\n// Agent uses winston. Every time. Every session.\n"
    },
    {
      "type": "code",
      "id": "fix-diff",
      "title": "The difference",
      "code": "// Without Episteme:\nquery({ subject: \"auth/jwt\", predicate: \"algorithm\" })\n// Returns: ES256 (most recent entry - a proposal)\n\n// With Episteme:\nquery({ subject: \"auth/jwt\", predicate: \"algorithm\", lifecycle: \"approved\" })\n// Returns: RS256 (the actual decision)\n"
    },
    {
      "type": "code",
      "id": "time-travel",
      "title": "Debug what you believed, not what you know now",
      "code": "// Post-incident: what did we believe at 9pm?\n\nepisteme.query({\n  subject: \"auth/jwt\",\n  predicate: \"algorithm\",\n  as_of: \"2024-01-15T21:00:00Z\"\n});\n\n// Returns: ES256 (the belief at incident time)\n\nepisteme.diff({\n  subject: \"auth/jwt\",\n  from: \"2024-01-15T14:00:00Z\",\n  to: \"2024-01-15T21:00:00Z\"\n});\n\n// Shows: RFC proposal added at 2:32pm\n// Root cause identified.\n"
    },
    {
      "type": "code",
      "id": "correction",
      "title": "Fix the record, not just the code",
      "code": "// Mark the bad assertion\nepisteme.supersede({\n  target: \"ax7f3k9...\",\n  reason: \"RFC was proposal, not approved decision\",\n  corrected_by: \"sre-oncall\"\n});\n\n// Add a constraint so it never happens again\nepisteme.assert({\n  subject: \"auth/jwt\",\n  predicate: \"algorithm\",\n  value: \"RS256\",\n  lifecycle: \"approved\",\n  supersedes: \"ax7f3k9...\"\n});\n\n// Future sessions will see this. Forever.\n"
    },
    {
      "type": "vision",
      "id": "vision",
      "title": "Episteme",
      "points": [
        "Claims, not facts. Uncertainty is first-class.",
        "Lifecycle awareness. Proposals ≠ decisions.",
        "Corrections that persist across sessions.",
        "Time travel for incident investigation."
      ],
      "tagline": "Git for Truth"
    }
  ]
}