[{"data":1,"prerenderedAt":1197},["ShallowReactive",2],{"navigation":3,"blog-list":197},[4,18,105],{"title":5,"path":6,"stem":7,"children":8,"page":17},"Blog","\u002Fblog","blog",[9,13],{"title":10,"path":11,"stem":12},"I Believe We Need a New Class of Agents: Officers","\u002Fblog\u002Fofficers-a-new-class-of-agents","blog\u002Fofficers-a-new-class-of-agents",{"title":14,"path":15,"stem":16},"Shared memory for multi-agent AI systems","\u002Fblog\u002Fshared-memory-for-multi-agent-ai","blog\u002Fshared-memory-for-multi-agent-ai",false,{"title":19,"path":20,"stem":21,"children":22,"page":17},"Docs","\u002Fdocs","docs",[23,27,31,60,93,97,101],{"title":24,"path":25,"stem":26},"What is Akashik?","\u002Fdocs\u002Fintroduction","docs\u002F1.introduction",{"title":28,"path":29,"stem":30},"Quickstart","\u002Fdocs\u002Fquickstart","docs\u002F2.quickstart",{"title":32,"path":33,"stem":34,"children":35,"page":17},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F3.concepts",[36,40,44,48,52,56],{"title":37,"path":38,"stem":39},"The Field","\u002Fdocs\u002Fconcepts\u002Ffield","docs\u002F3.concepts\u002F1.field",{"title":41,"path":42,"stem":43},"Writing with Intent","\u002Fdocs\u002Fconcepts\u002Fwriting-with-intent","docs\u002F3.concepts\u002F2.writing-with-intent",{"title":45,"path":46,"stem":47},"Attunement","\u002Fdocs\u002Fconcepts\u002Fattunement","docs\u002F3.concepts\u002F3.attunement",{"title":49,"path":50,"stem":51},"Conflicts","\u002Fdocs\u002Fconcepts\u002Fconflicts","docs\u002F3.concepts\u002F4.conflicts",{"title":53,"path":54,"stem":55},"Draft Lifecycle","\u002Fdocs\u002Fconcepts\u002Fdraft-lifecycle","docs\u002F3.concepts\u002F5.draft-lifecycle",{"title":57,"path":58,"stem":59},"Managing Entries","\u002Fdocs\u002Fconcepts\u002Fmanaging-entries","docs\u002F3.concepts\u002F6.managing-entries",{"title":61,"path":62,"stem":63,"children":64,"page":17},"Reference","\u002Fdocs\u002Freference","docs\u002F4.reference",[65,69,73,77,81,85,89],{"title":66,"path":67,"stem":68},"createField","\u002Fdocs\u002Freference\u002Fcreate-field","docs\u002F4.reference\u002F1.create-field",{"title":70,"path":71,"stem":72},"write \u002F read","\u002Fdocs\u002Freference\u002Fwrite-read","docs\u002F4.reference\u002F2.write-read",{"title":74,"path":75,"stem":76},"attune \u002F reckon","\u002Fdocs\u002Freference\u002Fattune-reckon","docs\u002F4.reference\u002F3.attune-reckon",{"title":78,"path":79,"stem":80},"register \u002F deregister","\u002Fdocs\u002Freference\u002Fregister","docs\u002F4.reference\u002F4.register",{"title":82,"path":83,"stem":84},"draft \u002F commit \u002F discard","\u002Fdocs\u002Freference\u002Fdraft-lifecycle","docs\u002F4.reference\u002F5.draft-lifecycle",{"title":86,"path":87,"stem":88},"retract \u002F supersede","\u002Fdocs\u002Freference\u002Fretract-supersede","docs\u002F4.reference\u002F6.retract-supersede",{"title":90,"path":91,"stem":92},"Errors","\u002Fdocs\u002Freference\u002Ferrors","docs\u002F4.reference\u002F7.errors",{"title":94,"path":95,"stem":96},"Conformance Levels","\u002Fdocs\u002Fconformance","docs\u002F5.conformance",{"title":98,"path":99,"stem":100},"Why Akashik Exists","\u002Fdocs\u002Fwhy","docs\u002F6.why",{"title":102,"path":103,"stem":104},"Roadmap","\u002Fdocs\u002Froadmap","docs\u002F7.roadmap",{"title":106,"path":107,"stem":108,"children":109,"page":17},"Specifications","\u002Fspecifications","specifications",[110],{"title":111,"path":112,"stem":113,"children":114},"Specification v0.1.0-draft","\u002Fspecifications\u002Fdraft","specifications\u002F4.draft\u002F1.index",[115,116,141,182,186,189,193],{"title":111,"path":112,"stem":113},{"title":117,"path":118,"stem":119,"children":120,"page":17},"Types","\u002Fspecifications\u002Fdraft\u002Ftypes","specifications\u002F4.draft\u002F2.types",[121,125,129,133,137],{"title":122,"path":123,"stem":124},"MemoryUnit","\u002Fspecifications\u002Fdraft\u002Ftypes\u002Fmemory-unit","specifications\u002F4.draft\u002F2.types\u002F1.memory-unit",{"title":126,"path":127,"stem":128},"Agent","\u002Fspecifications\u002Fdraft\u002Ftypes\u002Fagent","specifications\u002F4.draft\u002F2.types\u002F2.agent",{"title":130,"path":131,"stem":132},"Scope","\u002Fspecifications\u002Fdraft\u002Ftypes\u002Fscope","specifications\u002F4.draft\u002F2.types\u002F3.scope",{"title":134,"path":135,"stem":136},"Conflict","\u002Fspecifications\u002Fdraft\u002Ftypes\u002Fconflict","specifications\u002F4.draft\u002F2.types\u002F4.conflict",{"title":138,"path":139,"stem":140},"Message Envelope","\u002Fspecifications\u002Fdraft\u002Ftypes\u002Fmessage-envelope","specifications\u002F4.draft\u002F2.types\u002F5.message-envelope",{"title":142,"path":143,"stem":144,"children":145,"page":17},"Operations","\u002Fspecifications\u002Fdraft\u002Foperations","specifications\u002F4.draft\u002F3.operations",[146,150,154,158,162,166,170,174,178],{"title":147,"path":148,"stem":149},"RECORD","\u002Fspecifications\u002Fdraft\u002Foperations\u002Frecord","specifications\u002F4.draft\u002F3.operations\u002F1.record",{"title":151,"path":152,"stem":153},"ATTUNE","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fattune","specifications\u002F4.draft\u002F3.operations\u002F2.attune",{"title":155,"path":156,"stem":157},"REGISTER","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fregister","specifications\u002F4.draft\u002F3.operations\u002F3.register",{"title":159,"path":160,"stem":161},"DEREGISTER","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fderegister","specifications\u002F4.draft\u002F3.operations\u002F4.deregister",{"title":163,"path":164,"stem":165},"DETECT","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fdetect","specifications\u002F4.draft\u002F3.operations\u002F5.detect",{"title":167,"path":168,"stem":169},"MERGE","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fmerge","specifications\u002F4.draft\u002F3.operations\u002F6.merge",{"title":171,"path":172,"stem":173},"SUBSCRIBE","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fsubscribe","specifications\u002F4.draft\u002F3.operations\u002F7.subscribe",{"title":175,"path":176,"stem":177},"REPLAY","\u002Fspecifications\u002Fdraft\u002Foperations\u002Freplay","specifications\u002F4.draft\u002F3.operations\u002F8.replay",{"title":179,"path":180,"stem":181},"COMPACT","\u002Fspecifications\u002Fdraft\u002Foperations\u002Fcompact","specifications\u002F4.draft\u002F3.operations\u002F9.compact",{"title":183,"path":184,"stem":185},"Error Model","\u002Fspecifications\u002Fdraft\u002Ferrors","specifications\u002F4.draft\u002F4.errors",{"title":94,"path":187,"stem":188},"\u002Fspecifications\u002Fdraft\u002Fconformance","specifications\u002F4.draft\u002F5.conformance",{"title":190,"path":191,"stem":192},"Transport Bindings","\u002Fspecifications\u002Fdraft\u002Ftransport","specifications\u002F4.draft\u002F6.transport",{"title":194,"path":195,"stem":196},"Security","\u002Fspecifications\u002Fdraft\u002Fsecurity","specifications\u002F4.draft\u002F7.security",[198,996],{"id":199,"title":14,"author":200,"body":201,"date":990,"description":991,"extension":992,"meta":993,"navigation":332,"path":15,"seo":994,"stem":16,"__hash__":995},"blog\u002Fblog\u002Fshared-memory-for-multi-agent-ai.md","Sahil David",{"type":202,"value":203,"toc":981},"minimark",[204,208,211,219,222,228,233,236,239,242,245,248,252,255,261,267,273,276,280,283,658,661,664,779,782,785,789,792,858,880,884,887,913,920,924,927,930,933,936,939,943,951,971,974,977],[205,206,207],"p",{},"When two AI agents disagree about a fact, the systems lose the disagreement entirely. One agent writes a value. Another writes over it. The first version is gone, along with the reasoning that produced it.",[205,209,210],{},"AI agents are brilliant individuals with amnesia, no way to talk to each other, and no project manager.",[205,212,213,214,218],{},"This is the situation Akashik is built to change. v0.2 ships today, June 20, 2026, on npm as ",[215,216,217],"code",{},"@akashikprotocol\u002Fcore",". It is the Level 0 reference implementation of an open protocol for shared memory in multi-agent AI systems.",[205,220,221],{},"The thesis is one sentence.",[223,224,225],"blockquote",{},[205,226,227],{},"The protocol decides what is relevant and detects disagreement; the agent decides resolution.",[229,230,232],"h2",{"id":231},"what-memory-is-and-what-most-systems-substitute-for-it","What memory is, and what most systems substitute for it",[205,234,235],{},"Two paths dominate multi-agent systems today.",[205,237,238],{},"The first is message passing. Agents talk to each other directly, like Slack threads or HTTP calls. Each agent holds a partial view of the conversation, summarised down to fit context windows. As conversations branch, the summaries diverge. By the third turn, two agents working on the same task have different mental models of what was said. Frameworks like CrewAI and AutoGen optimise this approach and do their job well within its limits. The limit is that long-running coordination eats context, and once context is lost, it is gone.",[205,240,241],{},"The second is shared databases. Agents write to a common store — Redis, Postgres, a vector database. Reads are fast. Writes are durable. But the database has no opinion about meaning. It stores values, not why they were written. Two agents writing to the same key produce a last-write-wins state, and the first agent's view is silently overwritten. The disagreement disappears.",[205,243,244],{},"Neither path carries the reasoning behind a piece of state. An agent reading shared memory cannot tell why the value was written, what question it was answering, or whether another agent has since recorded something that contradicts it.",[205,246,247],{},"Akashik sits between these two paths. It is shared memory rather than shared state — memory because it carries the why of every write, not just the what. The protocol decides what to surface when an agent asks, scored and sorted. When two writes disagree, it surfaces the disagreement explicitly so the agent can reason about it before acting.",[229,249,251],{"id":250},"the-three-primitives","The three primitives",[205,253,254],{},"Three operations carry the protocol. Their names are deliberate.",[205,256,257,260],{},[215,258,259],{},"write"," — record an observation, with an intent string that states why it matters. Intent is mandatory. There is no path through the SDK that produces a state change without an associated intent. The minimum length is enforceable per-field, defaulting to 10 characters. The protocol thesis is that intent makes multi-agent state legible; the design enforces the thesis.",[205,262,263,266],{},[215,264,265],{},"attune"," — receive what is relevant to the calling agent's role and topic, scored and sorted by the protocol. Attune is not a database query. It is a relevance ranking. Each returned entry carries a score and a structured reason explaining why it was surfaced — topic match, role match, recency, intent quality.",[205,268,269,272],{},[215,270,271],{},"reckon"," — the deeper reading operation. Reckon surfaces the same relevant entries that attune would, plus the conflicts among them. Two agents writing different values to the same topic produce a real disagreement; reckon makes that disagreement legible, with the specific keys that differ. The agent then decides resolution.",[205,274,275],{},"These three primitives are enough to build a multi-agent system that does not lose context the way message passing does, and does not lose disagreement the way a shared database does.",[229,277,279],{"id":278},"a-worked-example","A worked example",[205,281,282],{},"Two agents observing the same competitor, recording different prices.",[284,285,290],"pre",{"className":286,"code":287,"language":288,"meta":289,"style":289},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createField } from \"@akashikprotocol\u002Fcore\";\n\nconst field = createField();\n\nawait field.register({ id: \"researcher\", role: \"researcher\" });\nawait field.register({ id: \"fact-checker\", role: \"researcher\" });\n\nawait field.write({\n  entry: { topic: \"competitor-pricing\", price: \"$49\u002Fmo\" },\n  intent: \"documenting competitor pricing observed on g2\",\n  agent: \"researcher\",\n});\n\nawait field.write({\n  entry: { topic: \"competitor-pricing\", price: \"$39\u002Fmo\" },\n  intent: \"fact-checker correction after verifying competitor site directly\",\n  agent: \"fact-checker\",\n});\n","typescript","",[215,291,292,327,334,355,360,416,460,465,481,520,538,554,564,569,584,618,634,649],{"__ignoreMap":289},[293,294,297,301,305,309,312,315,318,321,324],"span",{"class":295,"line":296},"line",1,[293,298,300],{"class":299},"s7zQu","import",[293,302,304],{"class":303},"sMK4o"," {",[293,306,308],{"class":307},"sTEyZ"," createField",[293,310,311],{"class":303}," }",[293,313,314],{"class":299}," from",[293,316,317],{"class":303}," \"",[293,319,217],{"class":320},"sfazB",[293,322,323],{"class":303},"\"",[293,325,326],{"class":303},";\n",[293,328,330],{"class":295,"line":329},2,[293,331,333],{"emptyLinePlaceholder":332},true,"\n",[293,335,337,341,344,347,350,353],{"class":295,"line":336},3,[293,338,340],{"class":339},"spNyl","const",[293,342,343],{"class":307}," field ",[293,345,346],{"class":303},"=",[293,348,308],{"class":349},"s2Zo4",[293,351,352],{"class":307},"()",[293,354,326],{"class":303},[293,356,358],{"class":295,"line":357},4,[293,359,333],{"emptyLinePlaceholder":332},[293,361,363,366,369,372,375,378,381,385,388,390,393,395,398,401,403,405,407,409,411,414],{"class":295,"line":362},5,[293,364,365],{"class":299},"await",[293,367,368],{"class":307}," field",[293,370,371],{"class":303},".",[293,373,374],{"class":349},"register",[293,376,377],{"class":307},"(",[293,379,380],{"class":303},"{",[293,382,384],{"class":383},"swJcz"," id",[293,386,387],{"class":303},":",[293,389,317],{"class":303},[293,391,392],{"class":320},"researcher",[293,394,323],{"class":303},[293,396,397],{"class":303},",",[293,399,400],{"class":383}," role",[293,402,387],{"class":303},[293,404,317],{"class":303},[293,406,392],{"class":320},[293,408,323],{"class":303},[293,410,311],{"class":303},[293,412,413],{"class":307},")",[293,415,326],{"class":303},[293,417,419,421,423,425,427,429,431,433,435,437,440,442,444,446,448,450,452,454,456,458],{"class":295,"line":418},6,[293,420,365],{"class":299},[293,422,368],{"class":307},[293,424,371],{"class":303},[293,426,374],{"class":349},[293,428,377],{"class":307},[293,430,380],{"class":303},[293,432,384],{"class":383},[293,434,387],{"class":303},[293,436,317],{"class":303},[293,438,439],{"class":320},"fact-checker",[293,441,323],{"class":303},[293,443,397],{"class":303},[293,445,400],{"class":383},[293,447,387],{"class":303},[293,449,317],{"class":303},[293,451,392],{"class":320},[293,453,323],{"class":303},[293,455,311],{"class":303},[293,457,413],{"class":307},[293,459,326],{"class":303},[293,461,463],{"class":295,"line":462},7,[293,464,333],{"emptyLinePlaceholder":332},[293,466,468,470,472,474,476,478],{"class":295,"line":467},8,[293,469,365],{"class":299},[293,471,368],{"class":307},[293,473,371],{"class":303},[293,475,259],{"class":349},[293,477,377],{"class":307},[293,479,480],{"class":303},"{\n",[293,482,484,487,489,491,494,496,498,501,503,505,508,510,512,515,517],{"class":295,"line":483},9,[293,485,486],{"class":383},"  entry",[293,488,387],{"class":303},[293,490,304],{"class":303},[293,492,493],{"class":383}," topic",[293,495,387],{"class":303},[293,497,317],{"class":303},[293,499,500],{"class":320},"competitor-pricing",[293,502,323],{"class":303},[293,504,397],{"class":303},[293,506,507],{"class":383}," price",[293,509,387],{"class":303},[293,511,317],{"class":303},[293,513,514],{"class":320},"$49\u002Fmo",[293,516,323],{"class":303},[293,518,519],{"class":303}," },\n",[293,521,523,526,528,530,533,535],{"class":295,"line":522},10,[293,524,525],{"class":383},"  intent",[293,527,387],{"class":303},[293,529,317],{"class":303},[293,531,532],{"class":320},"documenting competitor pricing observed on g2",[293,534,323],{"class":303},[293,536,537],{"class":303},",\n",[293,539,541,544,546,548,550,552],{"class":295,"line":540},11,[293,542,543],{"class":383},"  agent",[293,545,387],{"class":303},[293,547,317],{"class":303},[293,549,392],{"class":320},[293,551,323],{"class":303},[293,553,537],{"class":303},[293,555,557,560,562],{"class":295,"line":556},12,[293,558,559],{"class":303},"}",[293,561,413],{"class":307},[293,563,326],{"class":303},[293,565,567],{"class":295,"line":566},13,[293,568,333],{"emptyLinePlaceholder":332},[293,570,572,574,576,578,580,582],{"class":295,"line":571},14,[293,573,365],{"class":299},[293,575,368],{"class":307},[293,577,371],{"class":303},[293,579,259],{"class":349},[293,581,377],{"class":307},[293,583,480],{"class":303},[293,585,587,589,591,593,595,597,599,601,603,605,607,609,611,614,616],{"class":295,"line":586},15,[293,588,486],{"class":383},[293,590,387],{"class":303},[293,592,304],{"class":303},[293,594,493],{"class":383},[293,596,387],{"class":303},[293,598,317],{"class":303},[293,600,500],{"class":320},[293,602,323],{"class":303},[293,604,397],{"class":303},[293,606,507],{"class":383},[293,608,387],{"class":303},[293,610,317],{"class":303},[293,612,613],{"class":320},"$39\u002Fmo",[293,615,323],{"class":303},[293,617,519],{"class":303},[293,619,621,623,625,627,630,632],{"class":295,"line":620},16,[293,622,525],{"class":383},[293,624,387],{"class":303},[293,626,317],{"class":303},[293,628,629],{"class":320},"fact-checker correction after verifying competitor site directly",[293,631,323],{"class":303},[293,633,537],{"class":303},[293,635,637,639,641,643,645,647],{"class":295,"line":636},17,[293,638,543],{"class":383},[293,640,387],{"class":303},[293,642,317],{"class":303},[293,644,439],{"class":320},[293,646,323],{"class":303},[293,648,537],{"class":303},[293,650,652,654,656],{"class":295,"line":651},18,[293,653,559],{"class":303},[293,655,413],{"class":307},[293,657,326],{"class":303},[205,659,660],{},"Two writes on the same topic. Two different prices. In a shared database, the second write overwrites the first; the researcher's observation is gone. In Akashik, both writes persist, each with its intent attached.",[205,662,663],{},"A third agent now reckons with the field before acting:",[284,665,667],{"className":286,"code":666,"language":288,"meta":289,"style":289},"const result = await field.reckon({\n  agent: \"writer\",\n  topic: \"competitor-pricing\",\n});\n\nconsole.log(result.conflicts);\n\u002F\u002F → [{\n\u002F\u002F     a: \u003Cresearcher entry>,\n\u002F\u002F     b: \u003Cfact-checker entry>,\n\u002F\u002F     keys: [\"price\"]\n\u002F\u002F   }]\n",[215,668,669,691,706,721,729,733,753,759,764,769,774],{"__ignoreMap":289},[293,670,671,673,676,678,681,683,685,687,689],{"class":295,"line":296},[293,672,340],{"class":339},[293,674,675],{"class":307}," result ",[293,677,346],{"class":303},[293,679,680],{"class":299}," await",[293,682,368],{"class":307},[293,684,371],{"class":303},[293,686,271],{"class":349},[293,688,377],{"class":307},[293,690,480],{"class":303},[293,692,693,695,697,699,702,704],{"class":295,"line":329},[293,694,543],{"class":383},[293,696,387],{"class":303},[293,698,317],{"class":303},[293,700,701],{"class":320},"writer",[293,703,323],{"class":303},[293,705,537],{"class":303},[293,707,708,711,713,715,717,719],{"class":295,"line":336},[293,709,710],{"class":383},"  topic",[293,712,387],{"class":303},[293,714,317],{"class":303},[293,716,500],{"class":320},[293,718,323],{"class":303},[293,720,537],{"class":303},[293,722,723,725,727],{"class":295,"line":357},[293,724,559],{"class":303},[293,726,413],{"class":307},[293,728,326],{"class":303},[293,730,731],{"class":295,"line":362},[293,732,333],{"emptyLinePlaceholder":332},[293,734,735,738,740,743,746,748,751],{"class":295,"line":418},[293,736,737],{"class":307},"console",[293,739,371],{"class":303},[293,741,742],{"class":349},"log",[293,744,745],{"class":307},"(result",[293,747,371],{"class":303},[293,749,750],{"class":307},"conflicts)",[293,752,326],{"class":303},[293,754,755],{"class":295,"line":462},[293,756,758],{"class":757},"sHwdD","\u002F\u002F → [{\n",[293,760,761],{"class":295,"line":467},[293,762,763],{"class":757},"\u002F\u002F     a: \u003Cresearcher entry>,\n",[293,765,766],{"class":295,"line":483},[293,767,768],{"class":757},"\u002F\u002F     b: \u003Cfact-checker entry>,\n",[293,770,771],{"class":295,"line":522},[293,772,773],{"class":757},"\u002F\u002F     keys: [\"price\"]\n",[293,775,776],{"class":295,"line":540},[293,777,778],{"class":757},"\u002F\u002F   }]\n",[205,780,781],{},"The writer sees both entries, ranked by relevance, and sees the conflict between them. The protocol does not pick a winner. It surfaces the disagreement clearly. The writer agent — which knows things the protocol cannot know, like that fact-checker observations supersede initial research — decides what to do.",[205,783,784],{},"This is the case Akashik is built to handle. Not a fancy database query. Not a more elegant message bus. A protocol that treats disagreement as information, not as noise.",[229,786,788],{"id":787},"what-shipped-in-v02","What shipped in v0.2",[205,790,791],{},"The v0.2 release reaches full Level 0 conformance against the Akashik Protocol Specification, plus four Level 1 operations that complete natural lifecycle stories.",[793,794,795,803,814,831,842,850],"ul",{},[796,797,798,802],"li",{},[799,800,801],"strong",{},"Standard message envelope."," Every operation is wrapped in a typed envelope before processing. The wire format is locked even though v0.2 does not yet cross a transport.",[796,804,805,813],{},[799,806,807,809,810,371],{},[215,808,374],{}," and ",[215,811,812],{},"deregister"," Agents declare identity and role. Sessions are tracked. Registration is optional in v0.2 — v0.1 code that never registers still works — but role-aware relevance scoring is unlocked by registration.",[796,815,816,819,820,823,824,823,827,830],{},[799,817,818],{},"Draft lifecycle."," ",[215,821,822],{},"draft",", ",[215,825,826],{},"commit",[215,828,829],{},"discard",". Agents can record observations privately, review, and either publish or discard. Drafts are visible only to their author until committed.",[796,832,833,841],{},[799,834,835,809,838,371],{},[215,836,837],{},"retract",[215,839,840],{},"supersede"," Withdraw a committed entry, or replace it with a newer one. Supersession chains resolve: agents always see the latest in any chain, never the intermediate versions.",[796,843,844,849],{},[799,845,846,848],{},[215,847,271],{}," — mechanical conflict detection."," Two entries on the same topic with disagreeing primitive values produce a surfaced conflict. The protocol detects; the agent decides.",[796,851,852,857],{},[799,853,854,855,371],{},"Relevance scoring on ",[215,856,265],{}," Topic match, role match, recency, and intent quality contribute to a single score per entry. Entries are returned sorted by score, with the breakdown attached.",[205,859,860,861,868,869,874,875,371],{},"Full surface documentation lives in the ",[862,863,867],"a",{"href":864,"rel":865},"https:\u002F\u002Fgithub.com\u002Fakashikprotocol\u002Fcore\u002Fblob\u002Fmain\u002Fdocs\u002FATTUNE.md",[866],"nofollow","API reference",", the ",[862,870,873],{"href":871,"rel":872},"https:\u002F\u002Fgithub.com\u002Fakashikprotocol\u002Fcore\u002Fblob\u002Fmain\u002Fdocs\u002FRECKON.md",[866],"reckon deep-dive",", and the ",[862,876,879],{"href":877,"rel":878},"https:\u002F\u002Fgithub.com\u002Fakashikprotocol\u002Fcore\u002Fblob\u002Fmain\u002Fspecs\u002Froadmap.md",[866],"conformance comparison",[229,881,883],{"id":882},"what-v02-deliberately-does-not-do","What v0.2 deliberately does not do",[205,885,886],{},"The protocol is layered into four conformance levels, and v0.2 reaches the first one fully. Each level adds capability that does not depend on the next being available. Reading the levels honestly means stating what is missing.",[793,888,889,895,901,907],{},[796,890,891,894],{},[799,892,893],{},"No persistent storage."," Fields are in-memory only. Persistence arrives in v0.3 with Level 1 conformance.",[796,896,897,900],{},[799,898,899],{},"No event log."," Operation history is not preserved beyond what current state reconstructs. Also v0.3.",[796,902,903,906],{},[799,904,905],{},"No vector embeddings or semantic relevance."," v0.2's scoring is feature-weighted; semantic scoring arrives in v0.4 with Level 2.",[796,908,909,912],{},[799,910,911],{},"No transport bindings."," The envelope is constructed and validated, but does not cross a wire. Transport is v0.5 with Level 3.",[205,914,915,916,371],{},"These absences are scoped, not accidental. Each one maps to a specific conformance level that arrives with its own release. The full roadmap is published at ",[862,917,919],{"href":877,"rel":918},[866],"github.com\u002Fakashikprotocol\u002Fcore\u002Fblob\u002Fmain\u002Fspecs\u002Froadmap.md",[229,921,923],{"id":922},"why-this-order-matters","Why this order matters",[205,925,926],{},"I shipped v0.1 deliberately small. Three primitives, mandatory intent, the foundation of the protocol's vocabulary. v0.2 expanded the surface because the foundation was stable enough to build on, not because the calendar said it was time.",[205,928,929],{},"The temptation when building a protocol is to ship everything at once. Persistence, semantic relevance, transport bindings, authentication — all in the first public release, because the gaps look like incompleteness.",[205,931,932],{},"Akashik is deliberately built the other way. Each conformance level is shipped when it can be implemented honestly at that level. The mechanical conflict detection in v0.2 is not a stepping stone away from semantic detection; it is the foundation that semantic detection (in v0.4) builds on. The in-memory implementation in v0.2 is not a placeholder for persistence; it is the shape that a persistent adapter (in v0.3) plugs into without rewriting.",[205,934,935],{},"This is the discipline that produced v0.2 with 280 tests, full Level 0 conformance, and a clean architectural foundation. It is the same discipline that will produce v0.3, v0.4, v0.5, and eventually v1.0.",[205,937,938],{},"It is also the discipline that lets other implementations follow. The Akashik Protocol Specification is canonical. This SDK is one implementation. Anyone can build an implementation in any language at any conformance level, and the conformance ratchet — once a level is claimed, that level's requirements are permanent commitments — keeps every implementation honest.",[229,940,942],{"id":941},"try-it","Try it",[284,944,949],{"className":945,"code":947,"language":948},[946],"language-text","npm install @akashikprotocol\u002Fcore\n","text",[215,950,947],{"__ignoreMap":289},[205,952,953,954,959,960,965,966,371],{},"Then read the ",[862,955,958],{"href":956,"rel":957},"https:\u002F\u002Fgithub.com\u002Fakashikprotocol\u002Fcore",[866],"README",", run the ",[862,961,964],{"href":962,"rel":963},"https:\u002F\u002Fgithub.com\u002Fakashikprotocol\u002Fcore\u002Fblob\u002Fmain\u002Fexamples\u002Fconflict.ts",[866],"conflict example",", and build something with it. The protocol is open. The reference implementation is on npm. The spec is at ",[862,967,970],{"href":968,"rel":969},"https:\u002F\u002Fgithub.com\u002Fakashikprotocol\u002Fspec",[866],"github.com\u002Fakashikprotocol\u002Fspec",[205,972,973],{},"Tell me what breaks. I will read every issue.",[205,975,976],{},"— Sahil David",[978,979,980],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":289,"searchDepth":296,"depth":329,"links":982},[983,984,985,986,987,988,989],{"id":231,"depth":329,"text":232},{"id":250,"depth":329,"text":251},{"id":278,"depth":329,"text":279},{"id":787,"depth":329,"text":788},{"id":882,"depth":329,"text":883},{"id":922,"depth":329,"text":923},{"id":941,"depth":329,"text":942},"2026-06-21","Akashik is shared memory for multi-agent AI systems. Not a shared database. Not a message bus. A third thing.","md",{},{"title":14,"description":991},"MqQW3wxvmwqavbWrJN30OasebExgkE6fSTO34SQlqIU",{"id":997,"title":10,"author":200,"body":998,"date":1192,"description":1193,"extension":992,"meta":1194,"navigation":332,"path":11,"seo":1195,"stem":12,"__hash__":1196},"blog\u002Fblog\u002Fofficers-a-new-class-of-agents.md",{"type":202,"value":999,"toc":1183},[1000,1003,1006,1010,1013,1016,1019,1022,1025,1028,1032,1035,1038,1041,1044,1047,1050,1053,1056,1060,1063,1066,1069,1072,1076,1079,1082,1088,1094,1100,1106,1113,1117,1120,1123,1126,1130,1133,1136,1139,1142,1145,1148,1151,1155,1158,1165,1168,1171,1174,1177,1180],[205,1001,1002],{},"Every major AI agent framework ships with the same assumption baked in: if the agent completes the task, the job is done.",[205,1004,1005],{},"That assumption is wrong. And it is going to cost people.",[229,1007,1009],{"id":1008},"the-gap-we-should-be-talking-about","The gap we should be talking about",[205,1011,1012],{},"Right now, across every serious AI project, the architecture looks roughly the same. You have agents. Those agents have tools. And you have an orchestrator deciding which agent does what, in what order, to get a task done.",[205,1014,1015],{},"The orchestrator is good at its job. It routes. It sequences. It delegates. It optimises for one thing: task completion.",[205,1017,1018],{},"But here is the question no one is asking.",[205,1020,1021],{},"Who is checking whether the completed task actually serves the person who requested it?",[205,1023,1024],{},"Not whether it ran successfully. Not whether the code compiles or the email was sent. Whether the outcome is in your best interest.",[205,1026,1027],{},"That layer does not exist. Not in any agent framework shipping today.",[229,1029,1031],{"id":1030},"orchestration-is-not-governance","Orchestration is not governance",[205,1033,1034],{},"This is a distinction that matters more than most people realise.",[205,1036,1037],{},"An orchestrator decides what your agents do. It plans, delegates, and sequences. It is a project manager.",[205,1039,1040],{},"But a project manager is not a fiduciary. A project manager does not ask: \"Should we be doing this at all?\" They ask: \"What is the most efficient way to get this done?\"",[205,1042,1043],{},"Those are very different questions.",[205,1045,1046],{},"Think about what happens when you give a coding agent a simple instruction: \"Fix the login bug.\" The agent fixes it. Then it notices the auth module could use some refactoring. So it starts refactoring. The orchestrator sees a subtask and routes it. Nobody flags that you asked for a bug fix and your agent just expanded scope into a critical system.",[205,1048,1049],{},"Or this. You have two agents running in parallel. Agent A updates an API schema. Agent B is building frontend components against the old schema. The orchestrator gave them both valid tasks. Neither agent can see what the other is doing. By the time you notice, both have been working at cross purposes for twenty minutes.",[205,1051,1052],{},"Or this. Your agent finishes a task and wants to push directly to main. On your solo project, fine. On a team repo with PR norms, that is a reputational risk the agent has no concept of.",[205,1054,1055],{},"The orchestrator did its job in every one of these scenarios. The agents completed their tasks. And the outcome still did not serve you.",[229,1057,1059],{"id":1058},"what-is-missing-is-the-fiduciary-duty","What is missing is the fiduciary duty",[205,1061,1062],{},"The concept comes from corporate law. An Officer of a company owes a fiduciary duty to the entity they serve. Not a duty to complete tasks. A duty of loyalty, care, and good faith toward the principal's interests.",[205,1064,1065],{},"That is exactly what AI agent systems need.",[205,1067,1068],{},"Not another orchestrator. Not smarter agents. Not better prompts. A dedicated supervisory layer whose only job is to ask: \"Does this action serve my principal?\"",[205,1070,1071],{},"I am calling this layer an Officer.",[229,1073,1075],{"id":1074},"how-an-officer-works","How an Officer works",[205,1077,1078],{},"An Officer sits between your agents and the outside world. Every action an agent wants to take routes through the Officer first. Nothing reaches the principal or triggers an external action without a ruling. The Officer does not do the work. It governs the work.",[205,1080,1081],{},"On every proposed action, the Officer makes one of four rulings:",[205,1083,1084,1087],{},[799,1085,1086],{},"Approve."," The action clearly serves your interests and is within bounds. Proceed.",[205,1089,1090,1093],{},[799,1091,1092],{},"Modify."," The action is directionally right but needs adjustment. The Officer rewrites the parameters before execution.",[205,1095,1096,1099],{},[799,1097,1098],{},"Escalate."," The action is ambiguous, high-stakes, or outside the Officer's confidence. It asks you directly before proceeding.",[205,1101,1102,1105],{},[799,1103,1104],{},"Veto."," The action violates your constraints, conflicts with your interests, or exceeds authority. Blocked, with a reason logged.",[205,1107,1108,1109,1112],{},"This is not a static rule engine. The Officer reasons about context. It weighs tradeoffs. It knows that a ",[215,1110,1111],{},"git push"," means something different on a solo repo than on a team codebase. It knows that running the full integration test suite for a one-line CSS fix is a waste of your time and money. It knows that when your agent starts expanding scope, that is a decision you should be making, not the agent.",[229,1114,1116],{"id":1115},"why-this-is-not-the-same-as-guardrails","Why this is not the same as guardrails",[205,1118,1119],{},"Guardrails are rules. They are binary. If X, block. If Y, allow.",[205,1121,1122],{},"An Officer is judgment. It has the full picture. It knows your stated interests, your authority boundaries, what every agent in the system is doing, and what has happened so far in the session. It makes contextual decisions, not pattern matches.",[205,1124,1125],{},"And critically, it knows when to decide and when to defer. A guardrail never asks you for input. An Officer escalates when the stakes are high enough or the answer is genuinely ambiguous. That is not a limitation. That is the feature.",[229,1127,1129],{"id":1128},"why-this-matters-now","Why this matters now",[205,1131,1132],{},"I did not arrive at this from theory. While building multi-agent systems, I kept hitting the same wall.",[205,1134,1135],{},"I would architect a system where every agent was well-scoped, every tool was correctly wired, and every orchestration flow was clean. And still, the system would produce outcomes that technically completed the task but missed the point. An agent would make a decision that was locally correct but globally wrong. Two agents would work at cross purposes because neither could see the full picture. Actions that should have been flagged would sail through because no layer existed to flag them.",[205,1137,1138],{},"The pattern was always the same. The agents were fine. The orchestration was fine. What was missing was someone asking: \"But should we?\"",[205,1140,1141],{},"Here is where we are in the stack. MCP standardised how agents talk to tools. That was Layer 1. A2A is standardising how agents talk to each other. That is Layer 2. Shared memory and context protocols like Akashik are emerging as Layer 3.",[205,1143,1144],{},"But there is no Layer 0. No foundational layer that governs whether the work being done across all those layers actually serves the human at the top.",[205,1146,1147],{},"Officers is Layer 0. The governance layer that should have existed before any of the others.",[205,1149,1150],{},"The frameworks are maturing fast. Agents are getting more autonomous by the month. And the window between \"agents that need hand-holding\" and \"agents that can cause real damage unsupervised\" is closing faster than most people realise. The time to build the accountability layer is before you need it, not after the first incident.",[229,1152,1154],{"id":1153},"what-is-next","What is next",[205,1156,1157],{},"Officers should exist as both an open specification and an SDK. That is where I am taking this.",[205,1159,1160,1161,1164],{},"My initial thoughts: the easiest way to start is an ",[215,1162,1163],{},"officer.md"," file in the root of your project. It defines who the principal is, what their interests are, what agents are allowed to do autonomously, what requires approval, and what is off-limits. That single file gives any Officer-aware system enough context to govern your agents on your behalf.",[205,1166,1167],{},"The SDK wraps any agent system's tool execution layer so the Officer can evaluate actions at runtime using that context.",[205,1169,1170],{},"The spec will be open. Not because governance should be a product moat, but because it should be infrastructure. In the same way MCP became the standard for tool connectivity because it was open, Officers should become the standard for agent accountability because anyone can adopt it. If your agents can act, they should be governed. That should not depend on which vendor you chose.",[205,1172,1173],{},"Every agent system today is optimised for capability. How fast can the agents move? How many tools can they access? How complex a task can they handle?",[205,1175,1176],{},"Let's optimise for trust. For the confidence that what your agents produce actually serves you. For the certainty that when you step away, the system is not just completing tasks but protecting your interests.",[205,1178,1179],{},"That is what Officers change. And I believe it is the most important missing layer in the entire agent stack. And if it is not this, then what is the layer that makes you trust your agents when you are not watching?",[205,1181,1182],{},"~ Sahil David",{"title":289,"searchDepth":296,"depth":329,"links":1184},[1185,1186,1187,1188,1189,1190,1191],{"id":1008,"depth":329,"text":1009},{"id":1030,"depth":329,"text":1031},{"id":1058,"depth":329,"text":1059},{"id":1074,"depth":329,"text":1075},{"id":1115,"depth":329,"text":1116},{"id":1128,"depth":329,"text":1129},{"id":1153,"depth":329,"text":1154},"2026-04-06","Every agent framework optimises for task completion. But who checks whether the completed task actually serves the person who requested it? That layer does not exist yet.",{},{"title":10,"description":1193},"z9vNFR2yWrmgOD52XAhvZQ9SrxdfMoIXBdww3uAu1Ng",1782825661465]