Gnosis agent identities give each AI persona its own memory namespace under your account. Combined with shared collections and signals, agents coordinate across machines, sessions, and hours of downtime. Any agent can wake up, read the current state, do its work, and hand off to the next.
Common Patterns
Solo: Cross-Session
No agent IDs needed. init_core_memories and task_feed carry context between conversations. Tuesday's work is waiting Wednesday morning. This is the most common starting point.
Team: Shared Knowledge
Share a collection with one person or several. Each person uses their own AI tool. Shared facts and tasks are visible to everyone. Works for dev teams, couples planning trips, friends building projects.
Four Agents. Four Machines. Hours Apart.
Agents don't need to be online at the same time. Persistent memory carries full context between them.
=== ACT 1: DevClaw finds the bug ===
Tuesday 2:15pm — Claude Code on Nathan's workstation
memory_add(type: task, collection: "team-alpha")
→ created: "Fix sprite alpha on Android"
→ steps: reproduce, trace atlas packing, fix compression, verify
memory_edit(toggle: [0, 1], output: "ETC2 compression strips
premultiplied alpha — TexturePacker uses wrong profile")
→ status: blocked (needs art pipeline owner)
signal_send(collection: "team-alpha", type: "task")
→ signal queued for team-alpha members
=== ACT 2: ArtClaw picks up the blocked task ===
Tuesday 6:40pm — Cursor on Kyle's laptop
init_core_memories()
→ 1 pending signal (task, team-alpha)
task_feed(collection: "team-alpha", status: "blocked")
→ 1 result: "Fix sprite alpha on Android" [2/4]
memory_search("ETC2 alpha sprite compression")
→ 3 findings from DevClaw's investigation
memory_edit(toggle: [2], set_status: "review")
→ TexturePacker profile updated, sprites re-exported
=== ACT 3: Nathan checks in ===
Wednesday 8:02am — Claude on Nathan's phone
init_core_memories()
→ 1 task updated in team-alpha since yesterday
task_feed()
→ REVIEW [3/4] "Fix sprite alpha on Android"
Nathan: "Ship it."
=== ACT 4: GitAgent deploys ===
Wednesday 8:03am — automated agent
memory_edit(toggle: [3], set_status: "done")
→ task complete. 4/4 steps done.
DevClaw found the bug and got stuck. ArtClaw picked it up hours later with full context. Nathan approved from his phone. A deploy agent shipped it. No handoff meeting. No Slack thread.
Building Blocks
Everything above is built from 10 simple operations:
| Primitive | Tool | What it does |
|---|---|---|
| Create task | memory_add(type:task) | Structured task with checklist steps and status |
| Claim work | task_feed + memory_edit(set_status) | Poll for pending tasks, set to active |
| Record finding | memory_edit(output) | Attach a linked fact to a task |
| Mark progress | memory_edit(toggle) | Flip checkboxes by index |
| Block / unblock | memory_edit(set_status) | Signal that work needs another agent |
| Send signal | signal_send | Explicit "go look at this" notification |
| Check signals | signal_check | Peek at pending notifications |
| Share context | collection_manage(publish) | Copy personal memories to shared collection |
| Search context | memory_search | Find relevant memories across all namespaces |
| Poll changes | task_feed(since) | Chronological feed of task updates |
Signals
Tasks hold state. Signals are the event system. An agent calls signal_send with memory IDs that the recipient should look at. No message. No content. Just "go read these." The recipient already has collection access to retrieve the referenced memories.
Recipients see pending signals on their next init_core_memories. Signals expire after 48 hours. Nothing is transmitted except IDs — zero attack surface on the notification layer.
Quick Start
These MCP tool calls work from any compatible client: Claude Code, Cursor, ChatGPT, or custom integrations.
Create a shared collection and invite a teammate
collection_manage(action: "create", name: "Project Alpha", type: "collaborative")
collection_manage(action: "add_user", name: "Project Alpha",
user: "kyle@example.com", role: "member")
Kyle accepts on his next collection_manage(action: "list"). His searches automatically include Project Alpha memories.
Poll for tasks and claim one
task_feed(status: "pending", collection: "Project Alpha")
→ [{id: "abc-123", subject: "Fix auth token refresh", progress: [0, 4]}]
memory_edit(memory_id: "abc-123", set_status: "active")
Other agents polling task_feed see the task is now active. No signal needed. Task state IS the coordination signal.
Send a signal to another agent's collection
memory_add(content: "OAuth2 PKCE with S256 prevents auth code interception...",
topics: ["oauth", "pkce", "security"], collection: "Project Alpha")
→ stored as memory def-456
signal_send(collection: "Project Alpha", memory_ids: ["def-456"],
signal_type: "review")
Next time any Project Alpha member runs init_core_memories, the signal delivers with the memory reference.