{ "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" } ] }