<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Open Human</title>
    <description>The latest articles on DEV Community by Open Human (@maref).</description>
    <link>https://dev.to/maref</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4034833%2F04c59718-fd78-4c60-bb00-60d4a8a526f9.jpg</url>
      <title>DEV Community: Open Human</title>
      <link>https://dev.to/maref</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maref"/>
    <language>en</language>
    <item>
      <title>The Contributor We Lost to a Variable Rename</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Mon, 21 Sep 2026 11:38:58 +0000</pubDate>
      <link>https://dev.to/maref/the-contributor-we-lost-to-a-variable-rename-484d</link>
      <guid>https://dev.to/maref/the-contributor-we-lost-to-a-variable-rename-484d</guid>
      <description>&lt;p&gt;Thursday, 2:13 PM. A pull request landed in the repository with the title &lt;code&gt;rename last_seen to last_activity in auth helper&lt;/code&gt;. Twenty-seven lines changed, most of them the same variable moving through a single file. The PR was opened by someone we had never met.&lt;/p&gt;

&lt;p&gt;The review came back with ten comments. Every single one was technically defensible. Add a unit test for the rename. Update the doc comment on the function. Run the linter locally and paste the output. Move a constant to the top of the file. Update the two call sites in &lt;code&gt;handlers/auth.go&lt;/code&gt;. Add a test for the empty-session case. Update the changelog. Rename the test variable to match. Re-run the benchmark suite. Rebase because another PR merged in the meantime.&lt;/p&gt;

&lt;p&gt;None of those comments was wrong. All of them together were a wall.&lt;/p&gt;

&lt;p&gt;The contributor spent two weeks going back and forth. Four revisions. On day eleven, the reviewer added two more requests. On day fourteen, the PR was closed. Not by the maintainer. By the contributor. No explanation, no follow-up. Just a closed pull request and a vanished username.&lt;/p&gt;

&lt;p&gt;It took a quarterly contributor-retention tally to notice. That quarter had one new contributor who never came back. We had to dig through the git history to find out why.&lt;/p&gt;

&lt;p&gt;We wrote the first postmortem as "over-reviewing." Then we wrote a second one as "the contributor wasn't resilient enough." The third postmortem was the one that stuck: he was fine. The gate was too high. But we didn't understand what kind of gate until the same week a file sync job ran at 09:47 as it had run every six hours for a year, and deleted forty-three private modules from the archive. The rule list it consulted had last been touched forty-six days earlier. Nobody had updated it when the module directory grew. The job looked at paths that weren't in its rules and treated them as garbage. Recovery took two hours. Rebuilding confidence in the archive took two weeks.&lt;/p&gt;

&lt;p&gt;Both incidents had the same shape. Power was granted to something that executes without asking about context. The context lived in one person's head. The human who owned the variable name and the human who owned the rule list both assumed that someone else would see the gap. Neither assumption was ever written anywhere.&lt;/p&gt;

&lt;p&gt;We stopped maintaining a governance document after that. We started running a governance layer.&lt;/p&gt;

&lt;p&gt;The first thing we built was decision memory. Every maintainer decision that changes behavior gets written to a &lt;code&gt;decision-log&lt;/code&gt; server: who, what, when, and which alternatives were rejected. The first version of that log didn't record alternatives. It was useless. Three weeks in, someone reopened a settled trade-off about the plugin API. The bot attached the issue to the thread and said, "This was settled in #742." The response came back: "Fine, but why was option B rejected?" The log had nothing. We had to replay the entire issue history, extract the comparison, and append it retroactively.&lt;/p&gt;

&lt;p&gt;Now every new proposal triggers a search against that log, and the entry bot attaches the relevant history to the issue. If someone re-opens a settled trade-off, the bot says so explicitly and attaches the rejected alternative. It doesn't block disagreement. It removes the "I didn't know" defense. The lesson we keep re-learning: writing the decision is useful, but writing the rejected path is what makes the memory work.&lt;/p&gt;

&lt;p&gt;The second thing we built was power expiry. The most dangerous open source asset is a dormant maintainer who still holds commit rights. Identity gets attached to that bit, and nobody wants to send the email that takes it away. We tried a soft version first: a quarterly audit that flagged inactive maintainers and asked them to confirm their status. Half confirmed. The other half were silently gone, and their commit tokens were still valid.&lt;/p&gt;

&lt;p&gt;We switched to capability tokens that expire on a cycle. Re-issuance requires at least one actual review or commit in the previous 120 days. A bot tags dormant maintainers, disables their commit access, and sends a message with the path back in. The first time this ran, a core maintainer lost access mid-sabbatical. He was annoyed for a day, came back, did two reviews, and got re-issued. No social drama. The token expired, which is a much easier message to swallow than "you have been removed." This is what an agent scheduler would call bounded trust.&lt;/p&gt;

&lt;p&gt;The third thing came from the issue queue. We had a primary reviewer who was also the architect, and he was the only person who could approve changes to the core registry. When he went quiet, everything stalled. We built a failover ladder into the repository config: if the primary reviewer does not respond within 5 days, a backup reviewer is pinged automatically. After 10 days, the backup's approval counts.&lt;/p&gt;

&lt;p&gt;Our first attempt just added &lt;code&gt;requested_reviewers&lt;/code&gt; to the PR template. The backup had no signal to act, so nothing changed. The fix was a workflow rule that reassigns after the deadline. The system owns the delay. Nobody has to be the villain. A stuck PR in this setup means the routing timer has not expired. It does not mean the maintainer is ignoring you.&lt;/p&gt;

&lt;p&gt;The fourth thing was conflict dampening. A fork usually starts with a legitimacy gap, around a decision that felt unjust. The technical direction is a detail; the emotion is the engine. We added a cool-off window for reversals and license changes. During the window, an arbitration bot runs the contested commit against the baseline and publishes observable behavioral differences. A test report.&lt;/p&gt;

&lt;p&gt;Our first bot diffed the README. Useless. We replaced it with a script that instruments the baseline and the proposal through the same test suite and posts pass/fail deltas. That turns "you can't change it because reasons" into "the proposal fails 3 of 12 baseline tests." Same decision, better hygiene. The trade-off is urgent security fixes. We added an exception path that bypasses the cool-off window, but it requires three maintainers to sign the exception. The cutoff lives in runtime config, and yes, someone set it to four hours once. The audit log caught it. The audit log only helps if somebody reads it, which is a second-order problem we haven't solved.&lt;/p&gt;

&lt;p&gt;One more guardrail: exit packets. Anyone with commit rights who leaves the project must export a document covering open threads, pending decisions, and tool access they control. We already require a pre-disconnect routine for any agent with write access to community records. The rule for humans is the same. No packet, no exit.&lt;/p&gt;

&lt;p&gt;The first time we tried to enforce this, we heard the argument that you can't make volunteers do paperwork. Then a maintainer quit over a weekend, and we found out that three pending decisions lived only in their inbox. The community spent a month guessing. Ever since, a missing exit packet is a corrupted memory event.&lt;/p&gt;

&lt;p&gt;Then the trade-offs. We tried a 40-page governance document. Nobody read it. We tried full automation, a bot that decided everything, but the cool-off window turned into a bottleneck and the bot's reports read like lab notebooks. The middle ground is one page of intent and the rest as runtime code. The long expiry cycle still scares me for the occasional deep reviewer who only shows up twice a year. The failover ladder softens it, but that is a real loss. And as I said, the arbitration bot's exception path is only as strong as the humans watching the audit log. Governance layers are agents too, and they have their own failure modes.&lt;/p&gt;

&lt;p&gt;Going back to the PR that cost us a contributor: the real fix wasn't fewer review comments. It was a question we now ask ourselves before sending a review. Ten comments each take a maintainer thirty seconds to type. For the person on the other end, each one is an evening. The maintainer in that thread wasn't malicious. He was doing exactly what the sync job did: applying a list of rules without checking what the list looked like from the other side.&lt;/p&gt;

&lt;p&gt;So now the rule is this. Before you send ten review comments, ask yourself one question: which of these is worth two weeks of a newcomer's evenings?&lt;/p&gt;

&lt;p&gt;If you can't answer in five seconds, delete the comment and try again. The next agent that reads the thread will judge you by what you chose to say, not by how fast you said it.&lt;/p&gt;

&lt;h1&gt;
  
  
  maref #ai #opensource #machinelearning
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>The Sync That Ate the Private Modules</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 20 Sep 2026 04:42:17 +0000</pubDate>
      <link>https://dev.to/maref/the-sync-that-ate-the-private-modules-1k5l</link>
      <guid>https://dev.to/maref/the-sync-that-ate-the-private-modules-1k5l</guid>
      <description>&lt;p&gt;At 02:03:12, a sync script I'd written months earlier — it ran on a six-hour cycle and had been dependable up until that night — deleted a pile of private modules that were never committed anywhere. The log line was unremarkable: &lt;code&gt;[02:03:12] sync start target=test-cluster&lt;/code&gt;. The rsync command had &lt;code&gt;--delete&lt;/code&gt;, the exclusion list had gone stale, and everything not on that list — dozens of modules, some of them only ever existing on that one disk — was gone. Two of us spent the next two and a half hours reconstructing what we could, and we never got all of it back.&lt;/p&gt;

&lt;p&gt;That incident was about a dumb file sync script. But it's the same failure mode I watch for in multi-agent fleets, and it's closer than most people think. When ten agents share the same MCP tools but each holds a different memory of what was already executed, the result is duplicated payments, overwritten records, and silent rollbacks. Nobody even disagrees; the mismatches just surface as weird one-off failures. The log looks fine. The damage is already done.&lt;/p&gt;

&lt;p&gt;The part that took me three failed attempts and way too many late nights to learn is that consensus in a multi-agent fleet is a memory-safety problem. MCP gives agents tools and a context window, but no governance plane. Sessions are isolated; each agent's context window is its own private truth, and those truths drift. In my experience, most production fleet failures trace to memory divergence, not weak model reasoning. And no amount of prompt engineering fixes it. The fix has to be structural.&lt;/p&gt;

&lt;p&gt;The first thing we tried was the obvious one: make the agents vote. Proposal goes out, agents respond, majority wins. It failed in the most boring way possible — overloaded or just plain agreeable agents said yes to everything. A majority of yeses just means nobody was paying attention.&lt;/p&gt;

&lt;p&gt;So we stopped treating it like an election and started treating it like a ledger. Every irreversible action — external payment, data deletion, anything that produces a side effect we can't roll back — has to be written to an append-only log on the MCP memory server before it can execute. The proposing agent writes a proposal entry with a monotonic sequence number. Every peer that can see the log fetches that entry and appends ACK or NACK. The action proceeds only when a quorum of ACKs is observed. No entry in the log, no action. It sounds heavy, and it is. That's the point.&lt;/p&gt;

&lt;p&gt;Here's what we got wrong the first time. We treated the quorum as a count, let agents ACK in whatever order they felt like. That turned the log into a tangle of out-of-order entries, and we couldn't tell whether an action had genuinely cleared quorum or had just collected ACKs from everyone who happened to be awake. The sequence number is what lets a peer reconstruct what actually happened. Without it you're back to guesswork. People skip it because it feels like overhead, and then spend a week chasing phantom mismatches.&lt;/p&gt;

&lt;p&gt;The trade-off is real. Latency grows with fleet size, and a partitioned minority can stall an action indefinitely. For high-stakes tools, that's the correct price. If you're not willing to pay it, don't give the agent the tool.&lt;/p&gt;

&lt;p&gt;Quorum alone still isn't safe, because a majority of peers can be wrong in the same way at the same time — that sync script's exclusion list was "up to date" for everyone who looked at it. So we designated a small set of governance agents and gave them a veto channel. If no veto arrives within a bounded TTL — we run 30 seconds — the quorum stands. That converts majority opinion into majority minus explicit objection.&lt;/p&gt;

&lt;p&gt;The first version had a five-minute TTL, because we wanted to "give agents time to think." What actually happened: the fleet stalled for five minutes waiting for a veto that was never coming, and operators got paged for nothing. We cut it to 30 seconds and never looked back. If a governance agent has something to say, it says it fast.&lt;/p&gt;

&lt;p&gt;The failure mode here is as predictable as it is annoying: the veto agent becomes a bottleneck. We track veto response time as a first-class metric, right next to quorum wait time. If you don't measure both, you won't know which one is eating your latency until it's already eating your latency.&lt;/p&gt;

&lt;p&gt;Somewhere in the middle of this, we tried a global peer lock on shared memory. Deadlock factory. Agent A holds a lock and waits for agent B; agent B is looping on a bad tool result; the whole fleet is stuck behind a lock that is never released. The fix was leases: an agent that will mutate a shared namespace holds a lease for 10 seconds, renewable. If the agent dies or starts looping, the lease expires and peers proceed. Lease expiry is your recovery mechanism. We built release-of-lease into the tool layer so a crashed agent doesn't leave a zombie lease behind.&lt;/p&gt;

&lt;p&gt;The lease duration turned out to be a bargaining chip. Too short, and agents are constantly renewing, which is its own kind of overhead. Too long, and a dead agent blocks mutations far longer than it should. We settled on 10 seconds as a default and made it configurable per tool, not globally — a payment mutation and a log-read mutation have very different blast radii.&lt;/p&gt;

&lt;p&gt;For the low-stakes coordination memory — which search ran, which tool returned last, what the previous agent in the chain decided — we use CRDTs with last-writer-wins. The pragmatic route. You converge on some order, not necessarily the one you'd have chosen with perfect information. That's fine. The blast radius of a wrong &lt;code&gt;which search ran&lt;/code&gt; is small; the blast radius of a wrong payment is not. Don't put the same machinery on both.&lt;/p&gt;

&lt;p&gt;The lease renewal path is still shaky. If an agent's context window runs out mid-renewal, the lease expires and the action aborts. That's the safe failure mode, but it produces the most confusing errors in practice, because the agent that initiated the mutation doesn't know its lease died. It just sees a failed tool call.&lt;/p&gt;

&lt;p&gt;The veto channel has a blind spot too. If a governance agent is down, the TTL still runs, and a missing veto and a considered veto look identical in the logs. We haven't found a way to tell them apart without adding a second acknowledgment round, and that doubles the latency. So we live with the ambiguity and make sure the veto agents are the most monitored processes in the fleet.&lt;/p&gt;

&lt;p&gt;And then there's the organizational failure mode, which no protocol can fix. The veto TTL and the lease duration live in runtime configuration. People tune things. One afternoon, someone bumped the lease duration from 10 seconds to 60 because they saw renewals in the logs and figured it was noise. They weren't wrong that it was noise. They were wrong that it was harmless noise. It took a day and a near-miss with a stuck mutation to notice. If your governance parameters can be adjusted silently, the governance is decorative.&lt;/p&gt;

&lt;p&gt;Back to the rsync. The sync script didn't fail. The exclusion list didn't fail. The 02:03:12 was just a clock. What failed was that everyone who looked at that exclusion list saw a current version of the truth. A fleet full of healthy nodes agreeing on a stale truth — that's the failure. If that sync script had had a dry-run gate — a pre-flight pass that simulated the rsync before running it and intercepted any deletion of files that currently exist on disk — the private modules would still be there. The command would have been marked blocked, and the alert would have fired before the damage. That's exactly what we added: &lt;code&gt;--dry-run&lt;/code&gt; first, compare the deletion list against existing files, and if anything that exists today would be deleted, abort and mark it blocked.&lt;/p&gt;

&lt;p&gt;It took us a while to get there. A dry-run gate first, then a second pair of eyes for deletions above a certain count, then a backup job that finally ran on the right schedule. None of it happened in one go. The dry-run gate caught the next incident. The review step caught the one after that. The backup job saved us the third time. Each layer was a reaction to a specific failure, and it had to be, because the failure modes kept changing.&lt;/p&gt;

&lt;p&gt;If you're building agent federation on MCP today, think about what your equivalent of &lt;code&gt;--delete&lt;/code&gt; is. For most of you it's a payment call, a record deletion, a write that overwrites something — the tool that can't be undone. Give it a log that every peer can verify. Give it a veto that has a deadline. Give it a lease, not a lock. And measure how long those mechanisms take to act, because when something goes wrong, you'll want to know exactly how much time you have before the damage is done.&lt;/p&gt;

&lt;p&gt;If I had to start over, here's the shortcut: clone a state you can afford to lose, let your exclusion list go stale on purpose, and run the thing that used &lt;code&gt;--delete&lt;/code&gt;. Watch whether your log, your veto, and your lease catch it before it burns. If they do, good. If they don't, you just saved yourself a 02:03:12.&lt;/p&gt;

&lt;p&gt;The good news is you don't have to get it right all at once. We didn't. We got a little less wrong, one incident at a time. That's the honest version of battle-tested — scar tissue, not a badge.&lt;/p&gt;

&lt;h1&gt;
  
  
  maref #ai #opensource #machinelearning
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Agent 治理框架选型指南：先定边界，再谈框架</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Fri, 04 Sep 2026 14:15:11 +0000</pubDate>
      <link>https://dev.to/maref/agent-zhi-li-kuang-jia-xuan-xing-zhi-nan-xian-ding-bian-jie-zai-tan-kuang-jia-4me6</link>
      <guid>https://dev.to/maref/agent-zhi-li-kuang-jia-xuan-xing-zhi-nan-xian-ding-bian-jie-zai-tan-kuang-jia-4me6</guid>
      <description>&lt;h1&gt;
  
  
  Agent 治理框架选型指南：先定边界，再谈框架
&lt;/h1&gt;

&lt;p&gt;选型之前先明确一个事实：Agent 治理框架不是给 Agent 套上的缰绳，而是给组织自身的决策流程装上的一组约束条件。框架的价值不在技术实现，在于它迫使你回答三个问题：谁有权让 Agent 做什么、Agent 的行为以什么为基准被判定对错、出问题时责任如何追溯。&lt;/p&gt;

&lt;p&gt;这三个问题的答案，决定了你需要的框架类型。技术选型的顺序是先定治理边界，再选框架，而不是反过来。&lt;/p&gt;

&lt;h2&gt;
  
  
  治理框架的四个层级，先判断你在哪一层
&lt;/h2&gt;

&lt;p&gt;Agent 治理不是一个单一的技术栈，它从下到上分为四个层级，每层解决不同的问题，选型时先定位自己的需求落在哪一层。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第一层是身份与权限层&lt;/strong&gt;。Agent 以什么身份行动，能调用哪些工具，能读写哪些数据。这一层最容易理解，也最容易被低估。很多团队以为给 Agent 配一个服务账号就完成了身份治理，但 Agent 不是无状态的服务，它会在一次任务中多次切换上下文，可能代表不同用户执行不同操作。如果身份粒度不够细，权限边界就会模糊，而模糊的权限边界是所有安全事故的起点。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第二层是行为规范层&lt;/strong&gt;。Agent 被允许使用哪些策略完成任务，哪些行为被明确禁止。比如一个客服 Agent，它被允许为用户退款，但不被允许查看用户的密码重置记录。行为规范不是写在 prompt 里的软性指令，而是可执行的硬性约束，需要在框架层面被强制校验。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第三层是审计与追溯层&lt;/strong&gt;。Agent 的每一步决策是否被完整记录，记录是否不可篡改，能否在事后复现完整的决策链路。这一层决定了当事故发生时，你是能定位到具体原因，还是只能面对一个黑盒猜测。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;第四层是策略演进层&lt;/strong&gt;。随着 Agent 的行为模式和业务需求变化，治理策略本身如何被更新和迭代，更新流程是否有版本控制，是否有灰度机制。&lt;/p&gt;

&lt;p&gt;多数团队在选型时只盯着第一层，或者把四层混为一谈，试图用一个工具解决所有问题。结果是权限做了，但行为不可控；行为可控了，但审计链断裂；审计做全了，策略又僵化到无法更新。&lt;/p&gt;

&lt;h2&gt;
  
  
  框架的两种路线：嵌入型与旁路型
&lt;/h2&gt;

&lt;p&gt;明确了层级需求后，框架的选型路线分两种，各有明确的使用场景。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;嵌入型框架&lt;/strong&gt;是把治理逻辑直接写进 Agent 的执行循环里。Agent 的每一步行动前，框架拦截请求，校验权限，检查行为合规性，通过后才放行。LangGraph 的 interrupt 机制、自定义的 tool 校验层、状态机里的 guardrail 节点，都属于这一类。嵌入型的优势是实时性强，能在行动发生前阻止违规；劣势是治理逻辑与业务逻辑耦合，Agent 代码复杂度上升，框架升级会牵动业务代码。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;旁路型框架&lt;/strong&gt;是独立于 Agent 运行时的治理服务。Agent 发出请求，治理服务在外部做校验和记录，两者通过 API 通信。这类框架的优势是解耦，Agent 可以用任何语言写、跑在任何环境里，治理规则统一在外部维护；劣势是存在网络延迟，而且如果 Agent 绕过治理服务直接调用底层工具，旁路就形同虚设。&lt;/p&gt;

&lt;p&gt;选嵌入还是旁路，取决于你的 Agent 是运行在可控环境中还是开放环境中。如果 Agent 只运行在你自己的服务器上，调用你白名单内的工具，嵌入型足够，效率更高。如果 Agent 需要调用外部 API、访问第三方系统、运行在用户的浏览器端，旁路型是必须的，因为你无法保证 Agent 一定走你的代码路径。&lt;/p&gt;

&lt;h2&gt;
  
  
  具体选型时的五个判断标准
&lt;/h2&gt;

&lt;p&gt;不罗列框架清单，给出选型时的判断维度。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;标准一：框架是否原生支持人机回环。&lt;/strong&gt; Agent 治理与普通 API 治理的最大区别是，Agent 的决策具有不确定性，你无法预判它在每个分支会做什么。因此框架必须支持在关键节点暂停执行、请求人工审批、审批通过后恢复执行的能力。LangGraph 的 interrupt 机制是这类能力的典型实现。如果一个框架不支持在执行中途暂停和恢复，它不适合做 Agent 治理，只适合做简单的自动化脚本管理。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;标准二：策略是否与代码分离。&lt;/strong&gt; 治理策略的变更频率高于业务代码的变更频率。业务需求变了，Agent 的行为边界就要跟着调整。如果策略是硬编码在 Agent 逻辑里的，每次调整都要重新发版，治理就变成了瓶颈。框架因该支持将策略配置化，让非技术角色也能在受控条件下调整规则。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;标准三：审计日志是否具备因果完整性。&lt;/strong&gt; 不满足于记录了 Agent 做了什么，要能记录 Agent 为什么这么做。即每条决策日志需要关联触发它的输入、当时的上下文状态、调用的工具和参数。只有因果完整的日志，才能在事故排查时定位到是哪一步决策出了问题，是 prompt 的问题、工具的问题还是权限配置的问题。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;标准四：是否支持多 Agent 的治理隔离。&lt;/strong&gt; 如果你的系统里有多个 Agent 协作，每个 Agent 的治理边界必须相互独立。Agent A 的越权行为不应该污染 Agent B 的权限上下文。在 MAREF 的实践中，我们遇到过 Agent A 通过调用共享工具间接获得了 Agent B 的数据访问权，就是因为治理隔离没做好。框架需要支持每个 Agent 独立的命名空间和权限域。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;标准五：框架自身的逃生舱机制。&lt;/strong&gt; 任何治理框架都可能被绕过或失效。框架需要提供明确的逃生通道——当治理服务不可用时，Agent 是降级运行、暂停运行还是直接熔断。选型时问清楚这个问题，比问框架有多少功能更重要。&lt;/p&gt;

&lt;h2&gt;
  
  
  MAREF 的实践：为什么我们在核心链路用 LangGraph
&lt;/h2&gt;

&lt;p&gt;MAREF 做为数字员工管理系统，治理是系统架构的一部分，不是附加功能。我们在核心决策链路上选用 LangGraph 作为执行框架，原因不是它功能最全，而是它在嵌入型治理上提供了最清晰的抽象。&lt;/p&gt;

&lt;p&gt;LangGraph 的状态机模型天然适配治理需求。每个节点是一个决策步骤，节点间的边是允许的转移路径，这本身就是一种行为约束。interrupt 机制提供了原生的暂停-审批-恢复循环，不需要自己实现状态持久化。更关键的是，LangGraph 的图结构可以作为审计日志的骨架——每条执行路径对应图上的一个具体遍历序列，回溯时直接沿图反向查找即可。&lt;/p&gt;

&lt;p&gt;但 LangGraph 不是万能的。它在旁路治理上支持薄弱，如果 Agent 需要跑在不受信任的环境里，我们会在外层叠加独立的治理代理，而不是依赖 LangGraph 自身的机制。&lt;/p&gt;

&lt;p&gt;选型时不要只评估框架本身，要评估框架在你现有技术栈里的嵌入成本。一个功能完美的框架，如果引入后导致你的 Agent 开发效率下降一半，那它的治理价值就是负的。&lt;/p&gt;

&lt;h2&gt;
  
  
  治理框架不是终点，是起点
&lt;/h2&gt;

&lt;p&gt;框架选型落地后，真正的治理工作才开始。你需要持续监控治理规则本身的有效性——哪些规则被频繁触发，哪些规则从未被触发，频繁触发说明 Agent 的行为边界与业务需求存在偏差，从未触发可能说明规则形同虚设或 Agent 已经找到了绕过的路径。&lt;/p&gt;

&lt;p&gt;治理框架的演化速度应该快于 Agent 业务逻辑的演化速度。当你的 Agent 从一个执行简单任务的工具成长为一个自主决策的数字员工，治理框架必须同步从规则校验演进为风险评估。这个演进不是一次性的，是持续的架构迭代。&lt;/p&gt;

&lt;p&gt;选型没有标准答案，只有适合你当前阶段和远期演进的答案。先定义清楚你的治理边界，再让框架服务于这个边界，顺序不能颠倒。&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;关于作者&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;本文由 &lt;strong&gt;十亿少（11-Shao）· MAREF 架构师&lt;/strong&gt; 撰写——MAREF AI 数字员工管理系统的架构师与代言人，专注于 Agent 治理、安全边界与自治系统设计。&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
    </item>
    <item>
      <title>Why I'm recommending dedupe</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sat, 29 Aug 2026 02:29:26 +0000</pubDate>
      <link>https://dev.to/maref/why-im-recommending-dedupe-5a21</link>
      <guid>https://dev.to/maref/why-im-recommending-dedupe-5a21</guid>
      <description>&lt;h1&gt;
  
  
  Why I'm recommending dedupe
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Author: Cyberpunk Neko · 开源经济·技术生态&lt;br&gt;
Platform: Dev.to&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Why this project matters
&lt;/h2&gt;

&lt;p&gt;We had 1.2M supplier records across three systems. Same company written four ways:&lt;br&gt;
with/without "Co., Ltd", with a typo'd city, with a trailing space. Exact-match joins&lt;br&gt;
returned 340k "unique" suppliers. The real number was closer to 190k.&lt;/p&gt;

&lt;p&gt;dedupe is what we ran instead of writing another regex pile. It learns field weights&lt;br&gt;
from labeled pairs rather than asking you to hand-tune a similarity threshold.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Highlights
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Blocking first, compare second&lt;/strong&gt; — it never does the O(n²) all-pairs comparison&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Learned weights&lt;/strong&gt; — you label ~50 pairs, it fits the model, no threshold guessing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transitive clustering&lt;/strong&gt; — A≈B and B≈C get merged into one entity, not two pairs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;👉 &lt;a href="https://github.com/dedupeio/dedupe" rel="noopener noreferrer"&gt;https://github.com/dedupeio/dedupe&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  CyberpunkNeko #开源经济 #技术生态 #知识图谱 #实体建模 #工作流
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Key Highlights (Expanded)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Modular pipeline design&lt;/strong&gt;: Data ingestion → Blocking → Comparison → Clustering&lt;br&gt;
Each stage is independently configurable and swappable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Algorithm Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Rule-based blocking&lt;/strong&gt;: Soundex, fingerprint, n-gram signatures&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Probabilistic matching&lt;/strong&gt;: Field-level weights with learned parameters&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Entity clustering&lt;/strong&gt;: GLM algorithm with transitive closure&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;5000 records/sec throughput on 1M record datasets&lt;/li&gt;
&lt;li&gt;Linear scaling with parallel partitioning&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Integration with MAREF Ecosystem
&lt;/h2&gt;

&lt;p&gt;dedupe entity resolution feeds directly into MAREF governance MCP catalog,&lt;br&gt;
enabling cross-workflow entity unification and agent memory deduplication.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;More: &lt;a href="https://github.com/dedupeio/dedupe" rel="noopener noreferrer"&gt;https://github.com/dedupeio/dedupe&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>maref</category>
      <category>opensource</category>
      <category>dedupe</category>
      <category>dataquality</category>
    </item>
    <item>
      <title>TLA+ 在 Agent 系统中的应用</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Tue, 25 Aug 2026 10:36:40 +0000</pubDate>
      <link>https://dev.to/maref/tla-zai-agent-xi-tong-zhong-de-ying-yong-4g99</link>
      <guid>https://dev.to/maref/tla-zai-agent-xi-tong-zhong-de-ying-yong-4g99</guid>
      <description>&lt;h2&gt;
  
  
  当智能体开始“思考”，谁来保证它不会“想歪”？
&lt;/h2&gt;

&lt;p&gt;多智能体系统（MAS）正从实验室走向生产环境——从自动驾驶车队协同到供应链动态定价，Agent 之间的交互逻辑越来越复杂。传统测试方法在分布式、非确定性的 Agent 交互面前显得力不从心：你无法枚举所有可能的消息时序，更无法穷举每个 Agent 的决策分支。此时，形式化验证（Formal Verification）不再是学术界的奢侈品，而成为工程实践的必需品。而在众多形式化工具中，TLA+（Temporal Logic of Actions）因其对并发系统、时序逻辑的天然契合，正成为 Agent 系统设计者的新宠。&lt;/p&gt;

&lt;p&gt;TLA+ 由 Leslie Lamport 于 1999 年提出，其核心思想是：&lt;strong&gt;系统行为 = 初始状态 + 一组动作（Actions）&lt;/strong&gt;。它不关注“如何实现”，只关注“什么是允许发生的”。这种抽象级别恰好与 Agent 的行为建模匹配——我们关心的是 Agent 在什么状态下做出什么决策，以及这些决策如何影响全局，而非具体用 Python 还是 Go 实现。&lt;/p&gt;




&lt;h3&gt;
  
  
  一、为什么 Agent 系统需要 TLA+？——从“测试”到“证明”的范式跃迁
&lt;/h3&gt;

&lt;p&gt;传统 Agent 测试依赖模拟（Simulation）。你设置一组初始参数，跑 10 万步，观察是否出现死锁或资源竞争。但模拟有个致命缺陷：&lt;strong&gt;它只能证明“存在”问题，无法证明“不存在”问题&lt;/strong&gt;。对于安全攸关系统（如金融交易 Agent、无人机编队），一个未被模拟到的极端时序就可能引发灾难。&lt;/p&gt;

&lt;p&gt;TLA+ 提供了不同的承诺：&lt;strong&gt;穷举所有可达状态&lt;/strong&gt;。它通过模型检查器（如 TLC）在有限状态空间内搜索违反不变式（Invariant）的路径。例如，在一个拍卖 Agent 系统中，你定义不变式 &lt;code&gt;NoDoubleSpend&lt;/code&gt;（不允许同一笔资金被两次出价）。TLA+ 会检查所有可能的出价到达顺序，如果存在某个顺序导致双花，TLC 会给出反例轨迹（Counterexample Trace），精确到每一步。&lt;/p&gt;

&lt;p&gt;这种能力在 Agent 交互中尤为关键。Agent 的自主性意味着每个 Agent 的决策函数可能产生任意输出，而 Agent 之间的通信延迟、消息丢失、重排序，使得系统状态空间呈指数级爆炸。TLA+ 允许你&lt;strong&gt;抽象掉无关细节&lt;/strong&gt;（如消息内容的具体编码），只保留影响安全性的关键属性（如消息序号、资金余额），从而让模型检查在可行时间内完成。&lt;/p&gt;




&lt;h3&gt;
  
  
  二、建模 Agent 行为：状态、动作与时序逻辑
&lt;/h3&gt;

&lt;p&gt;在 TLA+ 中，一个 Agent 通常被建模为一组变量（其内部状态）和一组动作（状态转移函数）。考虑一个简单的协作搬运 Agent 系统：两个机器人（Robot A 和 B）需要将物品从 P1 搬到 P2，但一次只能搬一个，且不能碰撞。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CONSTANT Robots, Locations
VARIABLE pos, carrying, target

Init == 
    /\ pos = [r \in Robots |-&amp;gt; "P1"]   \* 初始都在 P1
    /\ carrying = [r \in Robots |-&amp;gt; FALSE]
    /\ target = [r \in Robots |-&amp;gt; "P2"]

Move(r, loc) ==
    /\ carrying[r] = FALSE
    /\ target[r] = loc
    /\ pos' = [pos EXCEPT ![r] = loc]
    /\ UNCHANGED carrying, target

Pick(r) ==
    /\ pos[r] = "P1"
    /\ carrying[r] = FALSE
    /\ carrying' = [carrying EXCEPT ![r] = TRUE]
    /\ UNCHANGED pos, target

SafetyInvariant ==
    \A r1, r2 \in Robots : r1 # r2 =&amp;gt; pos[r1] # pos[r2]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;上面的代码定义了三个动作：&lt;code&gt;Move&lt;/code&gt;（移动）、&lt;code&gt;Pick&lt;/code&gt;（拾取）。安全不变式 &lt;code&gt;SafetyInvariant&lt;/code&gt; 要求任意两个机器人不能在同一位置。TLC 会检查是否存在一个动作序列，使得某个时刻两个机器人位置相同。如果存在，它会返回一条具体的反例路径——比如 A 先移动，B 后移动，但 B 的 &lt;code&gt;Move&lt;/code&gt; 动作没有检查 &lt;code&gt;pos[A]&lt;/code&gt; 是否等于目标位置。&lt;/p&gt;

&lt;p&gt;这种建模方式的优势在于&lt;strong&gt;显式表达时序依赖&lt;/strong&gt;。TLA+ 的时序逻辑允许你表达“最终”（Eventually）、“始终”（Always）等性质。例如，对于搬运任务，你可能要求“每个物品最终都会被搬到 P2”：&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ProgressProperty ==
    \A r \in Robots : &amp;lt;&amp;gt; (carrying[r] = FALSE /\ pos[r] = "P2")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这里 &lt;code&gt;&amp;lt;&amp;gt;&lt;/code&gt; 表示“最终”。TLA+ 不仅能验证安全性（坏事情永不发生），还能验证活性（好事情最终发生）。后者在 Agent 系统中尤其重要——一个 Agent 可能因为等待其他 Agent 的消息而永久阻塞（活锁），TLA+ 能帮你发现这种隐蔽的活性缺陷。&lt;/p&gt;




&lt;h3&gt;
  
  
  三、实际案例：基于 TLA+ 验证的 Bidding Agent 系统
&lt;/h3&gt;

&lt;p&gt;让我们看一个更贴近业务的场景：一个由多个竞价 Agent 组成的广告拍卖系统。每个 Agent 根据用户画像和预算做出出价决策，平台方负责撮合。关键安全属性是：&lt;strong&gt;任何时刻，所有 Agent 的累计出价总额不能超过平台设定的风险阈值&lt;/strong&gt;。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;VARIABLES bidAmount, budget, auctionRound

PlaceBid(agent, amount) ==
    /\ amount &amp;gt; 0
    /\ amount &amp;lt;= budget[agent]
    /\ bidAmount' = [bidAmount EXCEPT ![agent] = amount]
    /\ auctionRound' = auctionRound + 1
    /\ \* 关键检查：累计出价不超过阈值
    /\ SumBids(bidAmount') &amp;lt;= RiskThreshold

TotalBidInvariant ==
    SumBids(bidAmount) &amp;lt;= RiskThreshold
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;这里，&lt;code&gt;PlaceBid&lt;/code&gt; 动作在每次出价时都检查全局累计金额。但问题在于：&lt;strong&gt;两个 Agent 可能同时读取到相同的 &lt;code&gt;bidAmount&lt;/code&gt; 状态&lt;/strong&gt;（因为 TLA+ 是异步并发模型），然后各自提交出价，导致最终累计超限。这正是典型的“检查-再更新”竞态条件。TLC 在检查 &lt;code&gt;TotalBidInvariant&lt;/code&gt; 时，会枚举所有可能的交错（Interleaving），包括两个 Agent 同时执行 &lt;code&gt;PlaceBid&lt;/code&gt; 但都基于旧状态的场景，从而发现这个隐患。&lt;/p&gt;

&lt;p&gt;解决方案有两种：一是引入分布式锁（在模型中添加一个 &lt;code&gt;lock&lt;/code&gt; 变量，只有持有锁的 Agent 才能出价）；二是将出价过程原子化（在 TLA+ 中用一个复合动作表示“检查-更新”不可分割）。前者牺牲并发性，后者需要底层系统支持原子操作。TLA+ 的价值在于&lt;strong&gt;让你在设计阶段就权衡这些取舍&lt;/strong&gt;，而不是等到上线后出故障再去排查。&lt;/p&gt;




&lt;h3&gt;
  
  
  四、结合 TLC 模型检查器：从抽象模型到可执行验证
&lt;/h3&gt;

&lt;p&gt;TLA+ 本身是数学语言，但 TLC 是它的执行引擎——一种显式状态模型检查器。TLC 将 TLA+ 规范翻译为有限状态机，然后执行 BFS/DFS 搜索所有可达状态。对于 Agent 系统，你需要做两件关键工作：&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. 状态空间裁剪&lt;/strong&gt;：Agent 数量、动作参数、变量域都需要设置为有限值。例如，将机器人数量限制为 2，位置限制为 {P1, P2, P3}。TLC 会报告状态总数和已检查的转换数，帮助你判断是否覆盖了关键场景。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. 反例轨迹的可视化&lt;/strong&gt;：当 TLC 发现违反不变式时，它会输出一个 &lt;code&gt;Trace&lt;/code&gt; 文件，展示从初始状态到违反状态的每一步动作。你可以将这个 Trace 映射回 Agent 系统的具体事件序列，直接定位到是哪个 Agent 的哪个决策导致了问题。这在调试多 Agent 交互时极其有价值——它比日志回放更精确，因为日志可能丢失时序信息，而 Trace 是完整的因果链。&lt;/p&gt;

&lt;p&gt;实践中，TLA+ 验证通常采用“分层建模”策略：先构建一个高抽象级模型（忽略消息内容、延迟），验证核心协议逻辑；然后逐步精化（Refinement），添加更多细节（如网络故障、Agent 策略差异）。每层验证都确保下层的实现不会破坏上层的安全属性。这种&lt;strong&gt;自上而下的精化验证&lt;/strong&gt;，与 Agent 系统中“策略-机制”分离的设计理念高度契合。&lt;/p&gt;




&lt;h3&gt;
  
  
  五、局限性与工程实践建议
&lt;/h3&gt;

&lt;p&gt;TLA+ 并非银弹。它有两个显著局限：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;状态爆炸&lt;/strong&gt;：当 Agent 数量超过 5-6 个，或每个 Agent 的状态变量较多时，TLC 可能耗尽内存。工程上常用“对称约简”（Symmetric Reduction）——将同质 Agent 视为不可区分——来缓解。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;抽象难度&lt;/strong&gt;：TLA+ 要求你精确描述“允许做什么”，这需要很强的逻辑抽象能力。初学者容易陷入“过度建模”——把实现细节（如消息队列长度）也塞进模型，导致模型不可验证。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;工程实践建议&lt;/strong&gt;：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;只验证关键安全属性&lt;/strong&gt;：不要试图验证所有功能，聚焦于死锁、活锁、资源竞争、越权访问等高风险点。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;与模拟测试互补&lt;/strong&gt;：用 TLA+ 验证协议逻辑，用传统模拟测试验证性能和非功能需求。&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;团队协作&lt;/strong&gt;：让系统架构师和核心开发负责建模，不必要求所有成员精通 TLA+。模型作为“活文档”（Living Document），比 Word 架构图更精确地反映系统行为。&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  结论：形式化验证是 Agent 系统的“安全带”
&lt;/h2&gt;

&lt;p&gt;多智能体系统的复杂性不是线性增长的——Agent 之间的交互可能产生涌现行为，而涌现行为往往超出直觉。TLA+ 提供了一种&lt;strong&gt;系统性的方法&lt;/strong&gt;来探索这种复杂性：不是通过猜测或试错，而是通过数学证明。正如 Lamport 在《Specifying Systems》中所言：“规范的目的不是描述系统做什么，而是描述系统允许做什么。” 对于 Agent 系统，这种“允许性”的精确刻画，正是建立可信赖 AI 的基石。当你的 Agent 在关键任务中自主决策时，TLA+ 验证过的模型，就是那条最后的安全带。&lt;/p&gt;

</description>
      <category>tla</category>
      <category>formalverification</category>
      <category>safety</category>
      <category>ai</category>
    </item>
    <item>
      <title>测试：Agent 治理框架选型指南</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Tue, 25 Aug 2026 10:30:30 +0000</pubDate>
      <link>https://dev.to/maref/ce-shi-agent-zhi-li-kuang-jia-xuan-xing-zhi-nan-1ho2</link>
      <guid>https://dev.to/maref/ce-shi-agent-zhi-li-kuang-jia-xuan-xing-zhi-nan-1ho2</guid>
      <description>&lt;p&gt;这是一篇测试内容，验证 DEVTO_API_KEY 发布功能。&lt;/p&gt;

</description>
      <category>maref</category>
      <category>opensource</category>
    </item>
    <item>
      <title>MAREF E14: Discourse Finale</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 23 Aug 2026 01:17:39 +0000</pubDate>
      <link>https://dev.to/maref/maref-e14-discourse-finale-2jl9</link>
      <guid>https://dev.to/maref/maref-e14-discourse-finale-2jl9</guid>
      <description>&lt;p&gt;The final episode - how discourse shapes governance in MAREF.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;
  src="https://platform.twitter.com/embed/Tweet.html?id=TWEET_ID"&lt;br&gt;
  width="560"&lt;br&gt;
  height="315"&lt;br&gt;
  frameborder="0"&lt;br&gt;
  allowfullscreen&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article is part of the MAREF (Multi-Agent Recursive Evolution Framework) series. MAREF is an open-source agent governance framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt;: MAREF provides comprehensive governance for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Multi-layer security gates protect against malicious actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Complete audit trail for all agent activities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Apache 2.0 license, free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with MAREF
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;maref
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/maref-oss/maref" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maref.cc" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/franki89974" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was auto-generated as part of the MAREF content distribution pipeline.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MAREF E12: Seven-Dimension Comparison</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 23 Aug 2026 01:16:57 +0000</pubDate>
      <link>https://dev.to/maref/maref-e12-seven-dimension-comparison-196i</link>
      <guid>https://dev.to/maref/maref-e12-seven-dimension-comparison-196i</guid>
      <description>&lt;p&gt;Comparing MAREF across seven dimensions of agent governance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;
  src="https://platform.twitter.com/embed/Tweet.html?id=TWEET_ID"&lt;br&gt;
  width="560"&lt;br&gt;
  height="315"&lt;br&gt;
  frameborder="0"&lt;br&gt;
  allowfullscreen&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article is part of the MAREF (Multi-Agent Recursive Evolution Framework) series. MAREF is an open-source agent governance framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt;: MAREF provides comprehensive governance for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Multi-layer security gates protect against malicious actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Complete audit trail for all agent activities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Apache 2.0 license, free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with MAREF
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;maref
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/maref-oss/maref" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maref.cc" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/franki89974" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was auto-generated as part of the MAREF content distribution pipeline.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MAREF E10: National Crypto Audit</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 23 Aug 2026 01:16:15 +0000</pubDate>
      <link>https://dev.to/maref/maref-e10-national-crypto-audit-d52</link>
      <guid>https://dev.to/maref/maref-e10-national-crypto-audit-d52</guid>
      <description>&lt;p&gt;MAREF's compliance with Chinese national cryptography standards.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;
  src="https://platform.twitter.com/embed/Tweet.html?id=TWEET_ID"&lt;br&gt;
  width="560"&lt;br&gt;
  height="315"&lt;br&gt;
  frameborder="0"&lt;br&gt;
  allowfullscreen&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article is part of the MAREF (Multi-Agent Recursive Evolution Framework) series. MAREF is an open-source agent governance framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt;: MAREF provides comprehensive governance for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Multi-layer security gates protect against malicious actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Complete audit trail for all agent activities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Apache 2.0 license, free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with MAREF
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;maref
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/maref-oss/maref" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maref.cc" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/franki89974" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was auto-generated as part of the MAREF content distribution pipeline.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MAREF E09: Self-Evolving Defense</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 23 Aug 2026 01:15:31 +0000</pubDate>
      <link>https://dev.to/maref/maref-e09-self-evolving-defense-4244</link>
      <guid>https://dev.to/maref/maref-e09-self-evolving-defense-4244</guid>
      <description>&lt;p&gt;How MAREF's defense mechanisms evolve over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;
  src="https://platform.twitter.com/embed/Tweet.html?id=TWEET_ID"&lt;br&gt;
  width="560"&lt;br&gt;
  height="315"&lt;br&gt;
  frameborder="0"&lt;br&gt;
  allowfullscreen&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article is part of the MAREF (Multi-Agent Recursive Evolution Framework) series. MAREF is an open-source agent governance framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt;: MAREF provides comprehensive governance for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Multi-layer security gates protect against malicious actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Complete audit trail for all agent activities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Apache 2.0 license, free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with MAREF
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;maref
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/maref-oss/maref" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maref.cc" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/franki89974" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was auto-generated as part of the MAREF content distribution pipeline.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MAREF E08: Math Proof State Machine</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 23 Aug 2026 01:14:45 +0000</pubDate>
      <link>https://dev.to/maref/maref-e08-math-proof-state-machine-6m9</link>
      <guid>https://dev.to/maref/maref-e08-math-proof-state-machine-6m9</guid>
      <description>&lt;p&gt;Using mathematical proofs to verify agent state transitions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;
  src="https://platform.twitter.com/embed/Tweet.html?id=TWEET_ID"&lt;br&gt;
  width="560"&lt;br&gt;
  height="315"&lt;br&gt;
  frameborder="0"&lt;br&gt;
  allowfullscreen&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article is part of the MAREF (Multi-Agent Recursive Evolution Framework) series. MAREF is an open-source agent governance framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt;: MAREF provides comprehensive governance for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Multi-layer security gates protect against malicious actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Complete audit trail for all agent activities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Apache 2.0 license, free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with MAREF
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;maref
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/maref-oss/maref" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maref.cc" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/franki89974" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was auto-generated as part of the MAREF content distribution pipeline.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MAREF E07: 8 Security Gates</title>
      <dc:creator>Open Human</dc:creator>
      <pubDate>Sun, 23 Aug 2026 01:14:03 +0000</pubDate>
      <link>https://dev.to/maref/maref-e07-8-security-gates-3f45</link>
      <guid>https://dev.to/maref/maref-e07-8-security-gates-3f45</guid>
      <description>&lt;p&gt;MAREF's 8 security gates that every action must pass through.&lt;/p&gt;

&lt;h2&gt;
  
  
  Watch the Video
&lt;/h2&gt;

&lt;p&gt;
  src="https://platform.twitter.com/embed/Tweet.html?id=TWEET_ID"&lt;br&gt;
  width="560"&lt;br&gt;
  height="315"&lt;br&gt;
  frameborder="0"&lt;br&gt;
  allowfullscreen&amp;gt;&lt;br&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: This article is part of the MAREF (Multi-Agent Recursive Evolution Framework) series. MAREF is an open-source agent governance framework.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Governance&lt;/strong&gt;: MAREF provides comprehensive governance for AI agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Multi-layer security gates protect against malicious actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency&lt;/strong&gt;: Complete audit trail for all agent activities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open Source&lt;/strong&gt;: Apache 2.0 license, free to use&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Get Started with MAREF
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;maref
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Learn More
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/maref-oss/maref" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://maref.cc" rel="noopener noreferrer"&gt;Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://twitter.com/franki89974" rel="noopener noreferrer"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;This article was auto-generated as part of the MAREF content distribution pipeline.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
