[ A ]
Arkiv Agent Memory
Multi-agent pipeline · Kaolin testnet
Live · Chain 60138453025
01 · Overview
Five agents. One memory layer.
You give a GitHub repo URL. Five agents run in sequence. No agent receives another agent's output as a function call. The only way they communicate is through Arkiv — a blockchain memory layer. Remove Arkiv and the system breaks. Agent 5 (the ETHLisbon addition) publishes the final tracker row to the public dashboard.
GITHUB REPO URL
github.com/fabianferno/clink
AGENT 1 · README READER
click to explore →
ARKIV
WRITES
AGENT 2 · CODE ANALYZER
click to explore →
ARKIV
WRITES
AGENT 3 · ARKIV EXPERT
click to explore →
ARKIV
READS + WRITES
AGENT 4 · REPORTER
click to explore →
ARKIV
READS + WRITES
(30 days)
AGENT 5 · TRACKER PUSHER
click to explore →
ARKIV
READS + WRITES
(30d · public)
Sequential execution · Kaolin testnet · Chain ID 60138453025 · Wallet 0xa618...1C6
02 · The memory layer
What is an entity?
An entity is a row in a database table — except no company controls the database. It lives on the Arkiv blockchain, it is queryable by attributes, and it automatically deletes itself after a set time. This is what the agents use as shared memory.
ARKIV KAOLIN · LIVE ENTITIES
readme-summary0x4a2f...c91b4m 32s
payloadiThe actual data stored. A JSON object encoded to bytes. Contains the agent's findings from this run.attributesiKey-value tags used for querying. Like column indexes in a database. You filter by these with eq() or gte().TTLiTime-to-live. The chain auto-deletes this entity after N blocks. No manual cleanup needed by the developer.owneriThe wallet that created this entity. 0xa618...1C6. Only the owner can update or delete it.
code-analysis0x8d1e...a04c1m 58s
payloadiThe actual data stored. A JSON object encoded to bytes. Contains the agent's findings from this run.attributesiKey-value tags used for querying. Like column indexes in a database. You filter by these with eq() or gte().TTLiTime-to-live. The chain auto-deletes this entity after N blocks. No manual cleanup needed by the developer.owneriThe wallet that created this entity. 0xa618...1C6. Only the owner can update or delete it.
arkiv-signal0x36f2...01b01m 12s
payloadiThe actual data stored. A JSON object encoded to bytes. Contains the agent's findings from this run.attributesiKey-value tags used for querying. Like column indexes in a database. You filter by these with eq() or gte().TTLiTime-to-live. The chain auto-deletes this entity after N blocks. No manual cleanup needed by the developer.owneriThe wallet that created this entity. 0xa618...1C6. Only the owner can update or delete it.
final-report0x899818...cce830 days
payloadiThe actual data stored. A JSON object encoded to bytes. Contains the agent's findings from this run.attributesiKey-value tags used for querying. Like column indexes in a database. You filter by these with eq() or gte().TTLiTime-to-live. The chain auto-deletes this entity after N blocks. No manual cleanup needed by the developer.owneriThe wallet that created this entity. 0xa618...1C6. Only the owner can update or delete it.
Final report — survives 30 days. Working memory from Agents 1, 2, and 3 has already expired.
tracker-row0xb1bdeb6c...4f1230 days
payloadiThe actual data stored. A JSON object encoded to bytes. Contains the agent's findings from this run.attributesiKey-value tags used for querying. Like column indexes in a database. You filter by these with eq() or gte().TTLiTime-to-live. The chain auto-deletes this entity after N blocks. No manual cleanup needed by the developer.owneriThe wallet that created this entity. 0xa618...1C6. Only the owner can update or delete it.
Tracker row — Agent 5 publishes this for the public ETHLisbon dashboard. Same 30d TTL.
03 · Under the hood
How Agent 3 reads from Arkiv.
Agent 3 has no access to Agent 1 or Agent 2's variables. It receives only a session label. It builds a query and executes it against the Kaolin chain. Here is exactly what happens.
result.entities → [
{
key: "0x4a2f...c91b",
payload: { name: "clink", usesArkiv: true },
attributes: [{ key: "type", value: "readme-summary" }],
expiresAtBlock: 2441849
}
]
eq() means exactly equal to. gte() means greater than or equal to — useful for filtering by score, date, or any number. These are filter functions from the Arkiv SDK passed into .where() in the query builder.