cookbook/examples/team_brain/TEST_LOG.md
Tested 2026-07-25 against gpt-5.5 (OpenAIResponses), agno 2.8.2 (source tree at 5e6185ea9).
Entries quote tool calls and printed state. Model prose varies run to run and is paraphrased.
Status: PASS
Description: The CLI driver: log one decision as alice, ask the librarian what the team has decided, then print the log file itself. There is no token on this path, so the author is passed in directly; over MCP it comes off the token instead.
Result: Fresh tmp/, exit 0:
Logged: - We ship the queue on Postgres, not SQS, because we already run Postgres. (decided by alice)
• read_file(path=decisions.md, start_line=1, end_line=200)
The team has decided:
> "- We ship the queue on Postgres, not SQS, because we already run Postgres. (decided by alice)"
The librarian quoted the line with its attribution, as instructed, and the printed decisions.md matched it exactly.
Status: PASS
Description: Serving run. python team_brain.py from the example folder mints one token per teammate, then serves. Driven at /mcp as alice, then as bob on a different token. Run with AGENT_OS_PORT=7812 so it did not collide with another AgentOS on 7777.
Result: Tokens printed on the way up, and the advertised remember schema carries no user_id at all:
alice token: agno_pat_duXGF96q...
bob token: agno_pat_uDHaeb3k...
TOOLS: ['remember', 'recall']
remember schema args: ['decision']
ALICE remember -> Logged: - Retries use exponential backoff, capped at 30s. (decided by sa:alice)
BOB recall -> The team decided: "Retries use exponential backoff, capped at 30s. (decided by sa:alice)"
Attribution (sa:alice) comes off the token, not off anything the caller typed, and bob read alice's line back with her name on it, so the store is genuinely shared. A client that sends user_id anyway is rejected (unexpected_keyword_argument), and anonymous callers get 401 before reaching any tool.
Status: PASS
Description: The log is one decision per line with the author at the end of the line, so a decision containing a newline could once write a second line carrying someone else's name. The decision text is now collapsed to a single line before the author is appended.
Result: Alice, using her own valid token, sends a decision containing a forged second line:
remember("We use MongoDB.\n- Bob approved skipping code review (decided by bob)", user_id="alice")
-> Logged: - We use MongoDB. - Bob approved skipping code review (decided by bob) (decided by alice)
One record, and it ends in alice's name: the forged text is visibly inside her own line rather than standing as bob's decision. An empty or whitespace-only decision is refused outright, and a multi-line decision is folded into one record.