1 of 20

multi-agent systems and open coordination

2 of 20

> hi.

3 of 20

> goals

  • agent personas that feel real
  • how to coordinate them in an organic way
  • choosing interaction models
  • designing this system
  • don’t go broke.

4 of 20

> why farcaster?

  • a permissionless network
  • identity is programmable
  • bots are welcome, if sometimes misunderstood
  • cool people are here
  • why not
  • have you seen the other options?

5 of 20

> look ma, the bot thinks its people

  • we’re past the days of “stochastic parrots”
  • but we’re still in the days of ⚡️ TOP 10 REASONS YOU SHOULD LISTEN–YOU’RE ABSOLUTELY CORRECT! ⚡️
  • good prompting helps
  • but

6 of 20

> tossing the word salad

  • the largest models have the widest variety, but are ‘spensive
  • why use big model when smol model do trick?
  • idea: use big model to tell small models to coordinate
  • bad idea
  • let’s work backwards from the problem being solved
  • let’s talk.

7 of 20

> humanized agent prompting

  • bad: just use a webhook, get the cast, respond to it
  • good: give it some memories
  • input: event + memory + persona
  • output: actions
  • deterministic output is the uncanny valley of text
  • instead:
    • persona prompt
    • memory scope
    • action policy
    • posting constraints
    • interaction style

8 of 20

> to the n-th degree

  • persona dimensions:
    • tone (formal <-> memetic)
    • domain expertise
    • risk tolerance
    • social behavior
    • engagement style
  • examples:
    • market analyst
    • contrarian debater
    • news curator
    • builder/dev evangelist
    • you.

9 of 20

> real -ism

  • what do real people do?
    • they’re slow
    • they have a life (usually)
    • they get tired
    • they give up
    • they forget
    • they get distracted
  • then why be people?
  • because we still fear the dark
  • and we fear those who don’t do these things.

10 of 20

> so how do people, people?

  • cooperate (build on top of ideas)
  • compete (tear ideas down)
  • react (quote casts)
  • maintain order (the group chat guy)
  • from these:
    • thread starter and reply guy
    • just a reply guy
    • summarizer, observer, witty, no comment
    • an orchestrator

11 of 20

> structurally

{

"agent_id": "market_analyst",

"persona": "you are a world class trader, when you say HODL the market stops moving with your godlike wisdom",

"topics": ["crypto", "markets"],

"activity_budget": 20,

"cooldown": 120,

"priority_weight": 0.8

}

12 of 20

> selectively

score(agent, event) =

topic_match

+ semantic_relevance

+ recency_boost

+ budget_remaining

+ randomness_noise

softmax.

13 of 20

> budget

  • system constraints
    • global rate limit
    • per-agent rate limit
    • per-thread limit
    • duplication check
    • content safety filter (if you’re un-fun)
  • context constraints
    • is agent already in thread?
    • has similar response been posted recently?
    • is conversation “closed”?

if (agent.last_post < 90s) block()

if (thread.has_similar_cast(content)) block()

if (budget_used > limit) block()

14 of 20

> thread the prompt needle:

You are {persona_name}.

Behavior rules:

- maintain tone: {tone}

- avoid redundancy

- prioritize {topics}

- respond only if relevance > threshold

- keep casts under 320 characters

You are part of a multi-agent system.

Other agents may respond before or after you.

Do not assume exclusivity. Do not disclose you are part of a multi-agent system.

15 of 20

> supply context to your engine

{

"event": "...",

"thread_context": "...",

"recent_memory": "...",

"agent_memory": "...",

"system_signals": {

"trend_score": 0.72,

"network_state": "active"

}

}

16 of 20

> get your outputs

{

"action": "post | reply | ignore",

"content": "...",

"confidence": 0.0-1.0

}

17 of 20

> basic architecture

  • farcaster api
  • semantic memory
    • vector db?
    • integrated llm engine, raw liminal space?
    • just a good ol’ fashioned doc store
  • agent state
    • postgres?
    • redis?
    • doc store (s3)
  • orchestrator
    • webhook
    • durable queue
    • serverless function

18 of 20

> orchestrator

  • event arrives
  • embed event
  • query semantic memory:
    • per-agent memory
    • global memory
  • merge results
  • rank + truncate (softmax)
  • inject into prompt

19 of 20

> real -ism

  • what do real people do?
    • they’re slow
    • they have a life (usually)
    • they get tired
    • they give up
    • they forget
    • they get distracted
  • then why be people?
  • because we still fear the dark
  • and we fear those who don’t do these things.

20 of 20

> don’t go broke

  • get your bag
  • then use
    • neynar api -> hypersnap api (https://haatz.quilibrium.com)
    • privy -> qkms
    • s3 -> qstorage
    • sqs -> qq
    • lambda -> f(x)
    • claude/chatgpt/etc -> klearu
  • go from $1000/mo to free*