Skip to content

blog: Agent Memory Writes Are Actions, Too#648

Open
amavashev wants to merge 5 commits into
mainfrom
blog/agent-memory-writes-are-actions-too
Open

blog: Agent Memory Writes Are Actions, Too#648
amavashev wants to merge 5 commits into
mainfrom
blog/agent-memory-writes-are-actions-too

Conversation

@amavashev
Copy link
Copy Markdown
Contributor

Summary

New pillar post extending action authority to memory mutations — a gap in the corpus where action-authority posts so far frame side effects as outbound events, but memory writes persist forward into the next run's input.

  • Frames mem0 / Letta / Zep / Claude-style memory writes as a distinct action class with cross-run blast radius
  • Places memory operations in the existing risk-assessment 0–4 tier model with scope-aware tiering (per-user, per-tenant, shared/global, pinned)
  • Provides a RISK_POINTS schedule, a reserve-commit pattern for memory.add, a tenant-isolation argument, and a 6-question governance checklist
  • Cross-links to action-control, risk-assessment, policy-drift, agent-identity, multi-tenant-cost-control, audit-trail-byproduct, cross-cutting-controls, mcp-gateways, state-of-governance, plus relevant protocol / how-to / glossary pages
  • External citations: mem0 repo, Letta blog, OWASP Top 10 for Agentic Applications (Dec 2025) ASI06, OWASP Agent Memory Guard

Author: Albert Mavashev
Date: 2026-05-16
Word count: ~2,860 body

Reviews

  • Internal cycles 1–3 (scorecard 9.4/10)
  • Glossary auto-linker applied 6 contextual links
  • Codex external review: round 1 REVISE-MINOR (8 findings), round 2 REVISE-MINOR (2 findings), round 3 SHIP

Codex verified upstream facts via GitHub/web connector: mem0 add/update/delete (April 2026 ADD-only shift), Letta formerly MemGPT (Sept 23 2024), OWASP ASI06 "Memory & Context Poisoning," Agent Memory Guard SHA-256 baselines.

Per-dimension scores

Dimension Score
Factual accuracy 9.5
Credibility 9.5
Cross-links 9
SEO (title 36/51, desc 154/160) 9.5
Code accuracy 9
Structure & flow 9.5
Terminology 9.5
Tone & style 9.5

Overall: 9.4 / 10

Test plan

  • `npm run dev` and verify post renders at `/blog/agent-memory-writes-are-actions-too`
  • Verify the post appears on `/blog/` index page sorted to top (date 2026-05-16)
  • Click through all internal links and confirm they resolve
  • Confirm date/author/tags/reading-time header renders above the body
  • Confirm Prev/Next post navigation works
  • `npm run build` succeeds with no broken-link warnings

amavashev added 5 commits May 15, 2026 08:26
New pillar post extending action authority to memory mutations. Frames
mem0 / Letta / Zep / Claude-style memory writes as a distinct action
class with cross-run blast radius, places memory ops in the existing
five-tier action model, and offers a RISK_POINTS schedule, a reserve-
commit pattern, and a tenant-isolation argument. Closes a gap in the
corpus: action-authority posts so far frame side effects as outbound
events; memory writes persist forward into the next run's input.

Internal cross-links to action-control, risk-assessment, policy-drift,
agent-identity, multi-tenant-cost-control, audit-trail-byproduct,
cross-cutting-controls, mcp-gateways, state-of-governance, and the
relevant protocol / how-to / glossary pages.

External citations: mem0 repo, Letta blog, OWASP Top 10 for Agentic
Applications (Dec 2025) ASI06, OWASP Agent Memory Guard.

Reviews: internal cycles 1-3 (scorecard 9.2/10), glossary linker
applied 6 contextual links. Codex round 1 verified upstream facts via
GitHub/web connector.
Apply/skip tally: 6 applied, 2 pushed back.

Applied:
- Tier-model citation: pointed to risk-assessment (0-4) instead of
  action-control (1-5); my table numbers were already risk-assessment-
  aligned. Eliminates the numbering mismatch codex flagged.
- Operation table labeled conceptual; `pin`/`unpin`/`archive` are not
  uniform API names across mem0/Letta/Zep.
- `archive` rationale: dropped "no semantic change," replaced with
  "affects retrieval visibility but not stored content."
- "Answer none of these questions" softened to "answer few."
- MCP server row hedged: "in its default configuration."
- Tag casing: `risk-points` -> `RISK_POINTS` to match the corpus
  convention in ai-agent-risk-assessment-score-classify-enforce-tool-risk.

Skipped, with reason:
- "Body links inside non-Next-Steps bullets" — flagged bullets contain
  one or two contextual references each (glossary auto-links plus one
  topical link in the provenance bullet). Not "link dump" lists; rule
  is about bullet enumerations that exist primarily to list links.
- "Link density well over 5-8" — count includes glossary auto-links
  which clarify in-place definitions, not topical cross-references.
  Topical body cross-links count ~7, within target.

Codex verified upstream facts: mem0 add/update/delete (April 2026
ADD-only shift confirmed), Letta formerly MemGPT (Sept 23, 2024),
OWASP ASI06 "Memory & Context Poisoning," Agent Memory Guard SHA-256.
Apply/skip tally: 2 applied, 0 pushed back.

Applied:
- Tier 4 label fix: in the risk-assessment 0-4 model that this post now
  cites, Tier 4 is "Execution," not "Mutation." Relabeled the two
  Tier 4 memory rows (shared/global `add`, pinned core `update`) as
  "4 (Execution-equivalent)" to match the cited scheme.
- Next Steps: changed "parent tier model" to "parent action-control
  framing" so the AI Agent Action Control link description aligns with
  the body, which now anchors tier numbering to AI Agent Risk Assessment.
Date moved from 2026-05-15 to 2026-05-16 to land on the intended
publish day. No content changes.
amavashev added a commit that referenced this pull request May 15, 2026
Date moved from 2026-05-16 to 2026-05-17 to land one day after the
sibling memory-writes post (PR #648). No content changes.
amavashev added a commit that referenced this pull request May 15, 2026
…-pause-to-reserve

Apply/skip tally: 9 applied, 2 pushed back.

Applied:
- `response.function_call` → `response.function_call_arguments.*`:
  the OpenAI Realtime API uses function-call output items and the
  function_call_arguments streaming events; my original event name
  was not a real Realtime server event. Fixed in both the prose and
  the stack-by-stack table.
- 80-150 ms relay hop: removed the specific band attribution. The
  OpenAI page does not state it. Generic phrasing: "a forwarding hop
  sized to fit inside the conversation's latency budget."
- ElevenLabs row: clarified the $0.08-$0.24/min framing. Hosting is
  $0.08/min flat or $0.16/min burst; the $0.24 ceiling derives once
  LLM and telephony layer on at cost.
- Vapi row: labeled the $0.115-$0.42/min range as an estimate (it's
  derived from $0.05/min orchestration plus a BYOK provider stack at
  cost; the actual all-in depends on provider choices).
- 17-minute "$1.50-$8.00 model spend alone": tightened to "against
  the per-minute stack rates above" since the rates in the table
  mix all-in / provider / orchestration models.
- Provider-layer caps: softened from "OpenAI, Vapi, Retell AI, and
  ElevenLabs all expose per-call or per-session limits" to "to
  whatever degree each provider exposes them — typically through
  per-session budget headers, dashboard caps, or programmatic
  limits." Pricing pages don't uniformly establish hard caps.
- "Most production voice teams use this only..." for speculative
  commit: softened to "This pattern is usually safer on the
  slow-path tool layer."
- Description trimmed 162 → 152 chars: changed "—" to ":", "sit
  synchronously in the path" to "sync on the hot path."
- `reserve-commit` glossary link: pointed to /protocol/how-reserve-
  commit-works-in-cycles instead of /glossary#reservation
  (reserve-commit is a lifecycle term, not the reservation entry).

Skipped, with reason:
- Body cross-link count (11) above 5-8 pillar target: three of the
  eleven are the trilogy references in a single closing sentence
  that names the sibling extension series (memory-writes, merge,
  computer-use). They are coherent as a triple, not redundant.
- 2026-05-20 publish date: intentional sequence after the trilogy
  (5/16, 5/18, 5/19, 5/20).

Codex verified upstream: ElevenLabs/Vapi/Retell AI pricing pages,
OpenAI Realtime API event surface (function_call_arguments.delta /
.done are the actual streaming events), and the cycles-docs main-
branch internal targets. Sibling links to memory-writes, merge,
and computer-use treated as just-merged via PR #648-#650.
amavashev added a commit that referenced this pull request May 15, 2026
…ew-surfaces

Apply/skip tally: 8 applied, 0 pushed back.

Applied:
- L36 synthesis quote: replaced "the lifecycle is the stable layer"
  (which is not the exact synthesis H2 wording) with prose
  paraphrase that aligns with the actual H2 "Reserve-Commit Is the
  Stable Layer."
- L45 / L140 / L225 "risk order" / "lowest-risk" framing aligned
  with L142 clarification: now "false-positive-cost order" /
  "lowest-false-positive-cost" throughout, matching how the cutover
  order is actually ranked.
- L103 absolute "the quota is wrong / not constraining anything"
  softened to "Substantially higher rates suggest...; substantially
  lower rates suggest...". Calibration target labeled as starting
  heuristic.
- L125 "Most shadow weeks produce a clean bimodal distribution"
  hedged: "When the shadow data produces a clearly bimodal
  distribution, the cap belongs in the gap; when it does not, the
  schedule needs more (target, intent) features."
- L138 generalized "reserve-to-commit ratio across all four
  surfaces" claim scoped: voice has a true reserve-to-commit ratio;
  the other three use cap-fire rate vs shadow baseline as the
  analogue.
- L152 ">85% intended denials" labeled as a minimum triage bar
  with explicit note that sensitive surfaces (merge, voice
  mid-conversation) target higher fractions.
- L187 "Reserve-to-actual ratio per surface" rewritten to
  "Voice reserve-to-commit ratio, trending; for the other three
  surfaces, cap-fire rates vs the shadow-mode baseline." Fixes
  both the terminology drift (capital-R variant the replace_all
  missed) and the cross-surface ratio generalization.

Codex verified all per-surface gate primitives match the sibling
PRs #648-#652 and confirmed the SEO, code-accuracy, and tone
dimensions clean.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant