<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Alcides Fonseca</title><link>http://wiki.alcidesfonseca.com/</link><description>A Maelstrom of Ideas, Code and Politics</description><atom:link href="http://wiki.alcidesfonseca.com/feeds/all/" rel="self"/><language>en-us</language><lastBuildDate>Tue, 20 Oct 2026 13:21:55 +0000</lastBuildDate><item><title>What are the measurable outcomes of researchers in the AI world</title><link>http://wiki.alcidesfonseca.com/blog/what-are-the-measurable-outcomes-of-researchers?utm_source=rss_all</link><description>

&lt;p&gt;Early this month, &lt;a href="https://openai.com/index/sharing-ai-progress-in-mathematics/"&gt;OpenAI has released several papers answering decades old problems&lt;/a&gt; to which mathematicians have dedicated their own careers. This NYT piece on Terrence Tao (who first supported AI when it was AI to help humans in the process of discovery, but shunned them when it became apparent that they were looking for the discovery for discovery sake, and not for the journey of learning.&lt;/p&gt;
&lt;p&gt;Personally, I think it's a matter of changing the training dataset to learn in the process, and AI can do maths the human way very soon.&lt;/p&gt;
&lt;p&gt;OpenAI has tried to ask for forgiveness &lt;a href="https://www.euronews.com/2026/10/16/openai-tries-to-solve-mathematician-backlash-problem-by-pledging-5-million-to-math-foundat"&gt;by pledging 5 million to mathematics&lt;/a&gt;, maybe hoping that they come back in tokens. On the other side of the duopoly, Anthropic has donated &lt;a href="https://www.anthropic.com/news/public-benefit-fund"&gt;shares to the public good&lt;/a&gt;, which seems to me impossible to manage. &lt;/p&gt;
&lt;p&gt;AI is here to stay, and it's only a matter of us, humans, mathematicians or software developers finding our raison d'être and learning to communicate with AI in a way that it also advances our knowledge.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;At the heart of the crisis in the profession is a menacing question. If solving hard problems is a mission of math, what happens when machines can do it faster? So much of higher math — hiring, promotions, graduate training and acclaim — is based on the difficulty, quality and the impact of papers (the written documents explaining proofs) that a mathematician produces.&lt;/p&gt;
&lt;p&gt;The consensus is that A.I.-assisted problem solving is the inevitable future, but no one knows exactly what that new world will look like. “Deep uncertainty will persist in these next years,” a draft report by a group of mathematicians meeting at Harvard on Ph.D. education concluded last month.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— Elisabeth Bumiller on &lt;a href="https://www.nytimes.com/2026/10/16/us/math-ai-terence-tao.html"&gt;Terry Tao Is on the Front Lines of the Debate Over AI and the Future of Math&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a completely different subject. Academics created &lt;a href="https://medium.com/after-the-lecture-a-philosophical-pause/nobel-laureates-published-only-34-papers-b8fcbbe7e1a6"&gt;a bean counting system to assess progress that is completely fake&lt;/a&gt;. Research is a high-risk activity, like Venture Capital. You invest in many different projects and teams, hoping that one out of 100/1000/1 million succeeds and has a huge impact on society. So you should be okay with the losses you take. It's part of the high-risk/high-reward system.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://wiki.alcidesfonseca.com/blog/being-an-incentive-being-an-obstacle-being-values/"&gt;CoARA and Informatics-Europe provide recommendations to assess researchers: focus on the research and forget bean-counting&lt;/a&gt;. But even universities that are trying to adopt CoAra (like my employer, U. Lisbon) forget about the goal and come back to KPIs for fear that funding will be given based on KPIs.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.nature.com/articles/d41586-026-00469-0"&gt;Curiosity-driven research&lt;/a&gt; has been responsible for many important discoveries and inventions. So there should be a base funding for that. Then, there should be strategic funding for each country's long-term priorities (healthcare, transportation, defense). Meet with people and fund based on the team and the impact that the project might bring.&lt;/p&gt;
&lt;p&gt;To assess researchers, let their peers assess them through conversations and presentations about their work. Do not rely on publication counts and other metrics that can be gamed. And if you are not qualified to evaluate a researcher, maybe you shouldn't had hired them in the first place.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Tue, 20 Oct 2026 13:21:55 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/what-are-the-measurable-outcomes-of-researchers?utm_source=rss_all</guid></item><item><title>Lisbon through the ages</title><link>http://wiki.alcidesfonseca.com/blog/lisbon-through-the-ages?utm_source=rss_all</link><description>

&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/bFHteO3MFpQ?si=JKaYsU1jMNQxQn_W" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""&gt;&lt;/iframe&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Tue, 20 Oct 2026 13:10:31 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/lisbon-through-the-ages?utm_source=rss_all</guid></item><item><title>Lessons learned building Fronteira</title><link>http://wiki.alcidesfonseca.com/blog/lessons-learned-building-fronteira?utm_source=rss_all</link><description>

&lt;p&gt;I designed &lt;a href="https://wiki.alcidesfonseca.com/blog/aeonbox-logical-guardrails-for-agents/"&gt;a harness built on top of dependent types that uses information-flow policies to prevent attacks involving the lethal trifecta&lt;/a&gt;. However, expecting users to write liquid types was unrealistic, and creating a custom SDK for every external interface—filesystems, APIs, internet search and MCP tools—was not practical.&lt;/p&gt;
&lt;p&gt;Following feedback from Lisbon.ai (thanks, &lt;a href="https://x.com/dscape"&gt;Nuno&lt;/a&gt;, &lt;a href="https://x.com/f"&gt;Fred&lt;/a&gt;, &lt;a href="https://x.com/ramitos"&gt;Sérgio&lt;/a&gt; and &lt;a href="https://x.com/davidgomes"&gt;David&lt;/a&gt;), I started building Fronteira to make these technical ideas accessible to a wider audience.&lt;/p&gt;
&lt;h2&gt;What is Fronteira?&lt;/h2&gt;
&lt;p&gt;&lt;img alt="Fronteira architecture" src="https://wiki.alcidesfonseca.com/media/images/fronteira-architecture.png"&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fronteira.alcidesfonseca.com"&gt;Fronteira&lt;/a&gt; is an MCP proxy that acts as a behavioral firewall. You log in through the browser and add integrations with GitHub, Gmail and other services through their MCP servers. You authenticate your harnesses with Fronteira and automatically get access to all your configured MCP servers. You also get portability across harnesses, but that is just a side effect.&lt;/p&gt;
&lt;p&gt;The main advantage of Fronteira is that all MCP interactions go through it, allowing it to track behavior across multiple MCP servers. You get tool-call logging for your harness for free—or, in an enterprise setting, for all your users. I have to admit that this was extremely useful when debugging Fronteira itself, as well as some custom MCP servers.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Different providers being recorded together in Fronteira" src="https://wiki.alcidesfonseca.com/media/images/fronteira-activity.png"&gt;&lt;/p&gt;
&lt;p&gt;Because all the data is centralized, we can track where information flows. In particular, this allows Fronteira to stop attacks involving the &lt;a href="https://simonwillison.net/tags/lethal-trifecta/"&gt;lethal trifecta&lt;/a&gt;. Such an attack can occur when a prompt injection causes an agent to read private data through one tool and expose it to an external endpoint through another. Requiring all interactions to pass through MCP servers is a clear limitation, which I will address later.&lt;/p&gt;
&lt;p&gt;Because there are countless MCP providers and possible combinations, each with its own schema, it is impossible for me to write a set of rules that prevents harmful actions for everyone. Instead, Fronteira allows you to write your rules in English and translates them into &lt;em&gt;Guard DSL&lt;/em&gt;, a language evaluated deterministically on every interaction.&lt;/p&gt;
&lt;p&gt;&lt;img alt="New rule dialog in Fronteira, translating English to Guard DSL" src="/media/images/fronteira-rule.png"&gt;&lt;/p&gt;
&lt;p&gt;Users are not expected to write Guard DSL themselves. Instead, they write rules in natural language and can check that the resulting code matches their expectations. The language's usability could be improved, but it is sufficient for the prototypes I have built.&lt;/p&gt;
&lt;p&gt;While the rule language is evaluated deterministically, it can invoke nondeterministic components that use decision models—currently JEV—to determine whether content contains trade secrets or medical information. There is also session-level tracking, such as &lt;code&gt;read_private&lt;/code&gt; in the example. So far, I have not found anything I could not express, but I am sure that will happen as soon as someone else starts using it.&lt;/p&gt;
&lt;h2&gt;Limitations and Technical Lessons Learned&lt;/h2&gt;
&lt;p&gt;The first limitation is clear: top-level harnesses access the filesystem directly, browse the internet directly, control desktop apps and access APIs directly, usually through skills or other instructions. All these interactions bypass Fronteira, making it useless for day-to-day security in your harness.&lt;/p&gt;
&lt;p&gt;Second, harnesses come with skills that assume the user is using the harness's official Gmail integration—for example, Codex's integration. If Gmail is only available through Fronteira's MCP endpoint, Codex will sometimes fail to find it out of the box. Deploying Fronteira in the wild would therefore require us to write many skills to change this default behavior.&lt;/p&gt;
&lt;p&gt;I also learned that no one respects the fact that MCP tool lists can be dynamic according to the specification. Requests for the tool list can return different results throughout a conversation, but harnesses do not implement support for this. They load the tool list at the beginning and do not reload it unless explicitly asked. I understand the challenge: reloading it before every response would increase the load on MCP servers and add latency. I would like a flag in the response that forces clients to refresh the list.&lt;/p&gt;
&lt;p&gt;Furthermore, the MCP schema can change at any time. There is assumption that MCP schemas do not ever change, but &lt;a href="https://tulmira.com/en-us/blog/mcp-breaking-changes"&gt;I wonder how reliable the assumption is&lt;/a&gt;. &lt;a href="https://www.leggetter.co.uk/blog/mcp-tool-rename-breaking-change/"&gt;MCP does not have explicit versioning&lt;/a&gt;, although some providers use REST-style versioned endpoints such as &lt;code&gt;/api/v1&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On the other hand, I do not want Fronteira to expose a million tools at all times. I would like it to receive the prompt, or some related information, and dynamically select the relevant tools. Tools forbidden by the rules could then be excluded from the context, rather than occupying space when any attempt to call them would result in an error.&lt;/p&gt;
&lt;p&gt;The final technical lesson I learned is that I was too optimistic about trusting Codex with DevOps. I asked it to mirror another app's Django configuration for Fronteira, but it changed the server root, exposing my Resend token and allowing spammers to send spam through my account. The issue was easy to identify and fix, but I expected more from Codex. I also realized that I still do not have a security tool I can point at a deployment, rather than its source code!&lt;/p&gt;
&lt;h2&gt;Alternatives to Fronteira&lt;/h2&gt;
&lt;p&gt;I did not look at competitors before implementing Fronteira. This was not because of laziness or incompetence. It was simply not a priority: I wanted to build it regardless, to understand the challenges firsthand.&lt;/p&gt;
&lt;h3&gt;Behavioral Rules&lt;/h3&gt;
&lt;p&gt;I was aware of &lt;a href="https://aws.amazon.com/blogs/opensource/introducing-dogwood-runtime-verification-for-ai-agents/"&gt;Dogwood&lt;/a&gt;, Amazon's temporal specification extension to the Cedar specification (mainly used for AWS access permissions).&lt;/p&gt;
&lt;p&gt;Dogwood can require previous explicit approval for some actions. Approval is something I wanted to add to Fronteira from the start through a mobile app. The following temporal rule in Cedar permits a share sale only if the same stock and number of shares were approved within the past hour.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;permit (
    principal,
    action == AgentCore::Action::&amp;quot;SellShares&amp;quot;,
    resource
)
when temporal {
    formerly within 1h AgentCore::Action::&amp;quot;ApproveSale&amp;quot;::response{
        input.stock: context.input.stock,
        input.shares: context.input.shares,
        output.approved: true
    }
};
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;To address some of the same limitations as Fronteira, Amazon uses the Dogwood engine in the Strands SDK. By combining the policy engine with a sandbox, they prevent agents from circumventing the "firewall." This is still not foolproof: agents can use a remote browser MCP server to call APIs, avoiding detection.&lt;/p&gt;
&lt;p&gt;The &lt;a href="https://invariantlabs.ai/blog/guardrails"&gt;Invariant SDK&lt;/a&gt; features &lt;a href="https://github.com/invariantlabs-ai/docs/blob/main/docs/mcp-scan/guardrails-reference.md#dataflow-rules"&gt;dataflow guardrails&lt;/a&gt;. Both Invariant and &lt;a href="https://getcordon.com"&gt;Cordon&lt;/a&gt; offer MCP proxies like Fronteira. They share the same limitations, but I would like to highlight some interesting language features such as quantifiers and loop detection.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://executor.sh/"&gt;Executor.sh&lt;/a&gt; is another MCP proxy that adds some interesting configurations. For instance, it allows you to create policies in typescript, requiring approval of actions, but also more interesting behaviors such as allowing you to undo sending an email in the next 5 minutes.&lt;/p&gt;
&lt;h3&gt;MCP Proxies with Static Rules&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://www.mintmcp.com"&gt;Mintive&lt;/a&gt;, previously MintMCP, is very similar to Fronteira, except that it does not support behavioral rules. You can still detect private information leaking through static rules, but you cannot prevent malicious sequences of individually harmless calls.&lt;/p&gt;
&lt;p&gt;Both the &lt;a href="https://github.com/lasso-security/mcp-gateway"&gt;Lasso Security MCP Gateway&lt;/a&gt; and &lt;a href="https://witness.ai/blog/introducing-witnessai-agentic-control-one-control-plane-for-every-agent-tool-and-mcp-server/"&gt;WitnessAI&lt;/a&gt; are very similar to Mintive: they automatically manage MCP servers and can detect leaks of information identified as private.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://mcpfw.dev"&gt;MCP Firewall&lt;/a&gt; performs a similar role but also focuses on filtering MCP responses, treating their contents as untrusted because they may contaminate subsequent reasoning.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.nvidia.com/nemo/guardrails/configure-guardrails/guardrail-catalog/tool-calling"&gt;NVIDIA NeMo&lt;/a&gt; is another proxy that validates tool parameters and responses against a range of requirements. However, it does not relate different tool calls to one another except through custom code.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://app.endram.com/solutions/mcp-proxy"&gt;Endram&lt;/a&gt; is a proxy that decides whether each call requires manual approval, something Dogwood also supports alongside more complex features.&lt;/p&gt;
&lt;p&gt;Both &lt;a href="https://wso2.com/api-platform/policy-hub/policies/mcp-acl-list"&gt;WSO2&lt;/a&gt; and &lt;a href="https://learn.microsoft.com/en-us/entra/global-secure-access/how-to-configure-mcp-firewall"&gt;Microsoft Global Secure Access&lt;/a&gt; support Cedar-like access control lists for MCP servers, with tool- and prompt-level controls.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://docs.agentcontrol.dev/examples/steer-action-demo"&gt;Agent Control&lt;/a&gt; allows you to create guardrails in Python. These operate at the level of individual tool calls, but Agent Control also integrates with external guardrail infrastructure, such as Dogwood, whose language is more expressive.&lt;/p&gt;
&lt;h3&gt;Language Specification&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/pdf/2503.18666"&gt;AgentSpec&lt;/a&gt; is a specification language like Fronteira's, with a more principled design but similar features. I would like to study properties of the language, particularly ways to provide feedback when users write inconsistent rules.&lt;/p&gt;
&lt;h3&gt;Others&lt;/h3&gt;
&lt;p&gt;IBM offers &lt;a href="https://github.com/IBM/mcp-context-forge"&gt;MCP ContextForge&lt;/a&gt;, a central gateway focused more on discoverability and observability. &lt;a href="https://agentgateway.dev/"&gt;agentgateway&lt;/a&gt; is also mostly focused on observability. &lt;a href="https://www.truefoundry.com/blog/introducing-truefoundry-mcp-gateway"&gt;TrueFoundry&lt;/a&gt; focuses on the M×N problem—M harnesses connecting to N MCP servers—and observability.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/meta-llama/PurpleLlama/blob/main/LlamaFirewall/README.md"&gt;LlamaFirewall&lt;/a&gt; is similar in that it can inspect traces of calls and detect malicious patterns. However, it does so using a BERT-style LLM, whereas Fronteira primarily supports deterministic analysis.&lt;/p&gt;
&lt;h3&gt;Comparison Summary&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Approach&lt;/th&gt;
&lt;th&gt;MCP proxying&lt;/th&gt;
&lt;th&gt;Content guards&lt;/th&gt;
&lt;th&gt;Behavioral / temporal guards&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://fronteira.alcidesfonseca.com"&gt;Fronteira&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://aws.amazon.com/blogs/opensource/introducing-dogwood-runtime-verification-for-ai-agents/"&gt;Dogwood + Strands Box&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://invariantlabs.ai/blog/guardrails"&gt;Invariant + MCP Scan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://executor.sh"&gt;Executor.sh&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://getcordon.com"&gt;Cordon&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.mintmcp.com"&gt;Mintive / MintMCP&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/lasso-security/mcp-gateway"&gt;Lasso MCP Gateway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://witness.ai/blog/introducing-witnessai-agentic-control-one-control-plane-for-every-agent-tool-and-mcp-server/"&gt;WitnessAI&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://mcpfw.dev"&gt;MCP Firewall&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.nvidia.com/nemo/guardrails/configure-guardrails/guardrail-catalog/tool-calling"&gt;NVIDIA NeMo Guardrails&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://app.endram.com/solutions/mcp-proxy"&gt;Endram&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://wso2.com/api-platform/policy-hub/policies/mcp-acl-list"&gt;WSO2 MCP ACL policy&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://learn.microsoft.com/en-us/entra/global-secure-access/how-to-configure-mcp-firewall"&gt;Microsoft GSA MCP firewall&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://docs.agentcontrol.dev/examples/steer-action-demo"&gt;Agent Control&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://arxiv.org/pdf/2503.18666"&gt;AgentSpec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/IBM/mcp-context-forge"&gt;IBM ContextForge&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://agentgateway.dev/"&gt;agentgateway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🟡&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.truefoundry.com/blog/introducing-truefoundry-mcp-gateway"&gt;TrueFoundry&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/meta-llama/PurpleLlama/blob/main/LlamaFirewall/README.md"&gt;LlamaFirewall&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;🚫&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ (probabilistically)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;After this exercise, I no longer believe in MCP proxies as security boundaries for agents. MCP covers only part of an agent's interaction with the world. Another reason is that MCP is a leaky abstraction. Models are post-trained in specific MCP and skill contexts, so they will always prefer direct alternatives, creating friction for the user.&lt;/p&gt;
&lt;p&gt;However, I strongly believe in the need for logic-based policies to control agents. Those policies should be enforced at the agent boundary and should probably be developed alongside the harnesses and models. I would love this enforcement to be harness-independent and provided by a third party. However, given &lt;a href="https://nicolasbustamante.com/blog/model-harness-fit"&gt;how models are becoming increasingly harness-specific&lt;/a&gt;, I do not see that working in the long term.&lt;/p&gt;
&lt;p&gt;If you have read this far, I am looking for a new opportunity where I can apply my research experience in programming languages, systems and different areas of artificial intelligence to improve the safety of agentic systems. If you are looking for someone with that background, along with the agency and pace of someone who has worked at several startups, you can find my contact details on this website.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Fri, 16 Oct 2026 12:35:39 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/lessons-learned-building-fronteira?utm_source=rss_all</guid></item><item><title>If I were a Bank CTO (part 2)</title><link>http://wiki.alcidesfonseca.com/blog/if-i-were-a-bank-cto-part-2?utm_source=rss_all</link><description>

&lt;p&gt;I certainly would not &lt;a href="https://www.cnbc.com/2026/10/14/anthropic-mythos-bank-of-america-hiring-cost.html"&gt;hire 1,000 third-party consultants to help fix patches&lt;/a&gt;. I would probably &lt;a href="http://wiki.alcidesfonseca.com/blog/if-i-were-a-bank-or-a-state-cto"&gt;rethink the architecture of the whole system and company&lt;/a&gt;, so that the exposed footprint is minimized. I would give proper training to the internal 3.000 people and power them with AI tooling (even if for monitoring and preventing attacks). And I would even consider open-sourcing the code.&lt;/p&gt;
&lt;p&gt;But hiring a lot of (most likely under qualified) people to patch vulnerabilities is a losing game.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Thu, 15 Oct 2026 08:03:32 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/if-i-were-a-bank-cto-part-2?utm_source=rss_all</guid></item><item><title>The internet was built on hypertext. Now hypertext is a premium feature</title><link>http://wiki.alcidesfonseca.com/blog/the-internet-was-built-on-hypertext-now-hypertext?utm_source=rss_all</link><description>

&lt;blockquote&gt;
&lt;p&gt;If you subscribe to a Meta One plan, you can add links to a set number of posts and reels each month based on your plan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Meta One Advanced plan: up to 4 posts and 4 reels with links per month&lt;/li&gt;
&lt;li&gt;Meta One Expert plan: up to 8 posts and 8 reels with links per month&lt;/li&gt;
&lt;li&gt;Meta One Max plan: up to 12 posts and 12 reels with links per month&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;Meta is trying to sherlock Linktree. But I can't stop and think it's completely bananas that the internet was built on hypertext and openness, and Instagram created a silo and now it's requiring content creators to pay so their users can have a way out.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Wed, 14 Oct 2026 17:17:42 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/the-internet-was-built-on-hypertext-now-hypertext?utm_source=rss_all</guid></item><item><title>AI Models Can Provably Hide Arbitrary Capabilities</title><link>http://wiki.alcidesfonseca.com/blog/ai-models-can-provably-hide-arbitrary-capabilities?utm_source=rss_all</link><description>

&lt;blockquote&gt;
&lt;p&gt;Capability evaluations aim to surface dangerous model behaviors before deploy-
ment, but their reliability depends on the assumption that hidden capabilities can
be elicited. We show this assumption does not hold under adversarial conditions
by constructing backdoor attacks that embed encrypted neural networks within
host model weights, decrypting and executing them only upon receiving a secret
trigger. Using digital lockers, these hidden circuits remain provably hard to elicit
and interpret under cryptographic assumptions, even given full access to model
weights, extending prior work from hiding fixed strings to arbitrary computations.
We implement our proof of concept constructions in PyTorch and evaluate elicitation through fine-tuning, weight noising, gradient-based trigger search, and latent
adversarial training on a small chemical reaction prediction task – a proxy for
CBRN-relevant capabilities. Our results demonstrate resistance to these methods
and, together with our cryptographic guarantees, reveal a limit of elicitation-based
capability audits. We release our models to support the improvement of defenses.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— &lt;a href="https://www.reuters.com/business/ai-models-may-soon-self-replicate-without-access-data-centers-anthropic-warns-2026-10-13/"&gt;AI Models Can Provably Hide Arbitrary Capabilities&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This paper presents a way for neural networks to hide functionality (encrypted in apparently random weights) until a trigger message is sent. &lt;/p&gt;
&lt;p&gt;In the next 007 movie, we see Q writing PyTorch code under pressure from terrorists, maybe &lt;a href="https://en.wikipedia.org/wiki/Swordfish_(film)"&gt;Swordfish&lt;/a&gt; style.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Tue, 13 Oct 2026 12:41:59 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/ai-models-can-provably-hide-arbitrary-capabilities?utm_source=rss_all</guid></item><item><title>Paper: Barista - Synthesizing Typestate Specifications with LLM Agents</title><link>http://wiki.alcidesfonseca.com/research/paper/barista?utm_source=rss_all</link><description>

&lt;p&gt;This week, &lt;a href="https://conf.researchr.org/details/ase-2026/ase-2026-research-track/97/Barista-Synthesizing-Typestate-Specifications-with-LLM-Agents"&gt;we are presenting the Barista paper at ASE'2026&lt;/a&gt;, and by 'we', I mean &lt;a href="https://catarinagamboa.github.io"&gt;Catarina Gamboa&lt;/a&gt;, who is leading this work.&lt;/p&gt;
&lt;p&gt;When trying to adopt &lt;a href="https://liquid-java.github.io"&gt;LiquidJava&lt;/a&gt;, an annotation-based language that adds refinements to types, in your Java project, you will have to write the annotations for any library that you use, including the Java Standard Library. This is just a huge amount of work for your simple application. This issue is shared by &lt;a href="https://ucsd-progsys.github.io/liquidhaskell/"&gt;LiquidHaskell&lt;/a&gt;, Frama-C's &lt;a href="https://frama-c.com/html/acsl.html"&gt;ACML&lt;/a&gt; and &lt;a href="https://www.eecs.ucf.edu/~leavens/JML/"&gt;Java Modeling Language&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Roughly one year ago, we wanted to explore if we could have LLMs read the documentation (English) and write the specifications for libraries. We focused on a few examples from the Java Standard Library and, given that one year ago LLMs generated more slop than they do today, we came up with an agentic workflow that combined LLM to translate English to an Automata, and the Automata to specification. And by having the automata, we could create positive and negative examples of method call sequences that we could use to validate the generated specification and iterate until we are satisfied.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Architecture of Barista" src="/media/images/barista_approach.png"&gt;&lt;/p&gt;
&lt;p&gt;If you want to learn more about how we come up with the refinements below, you can read &lt;a href="https://catarinagamboa.github.io/papers/barista/"&gt;the interactive presentation Catarina prepared&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@StateSet({&amp;quot;unconnected&amp;quot;, &amp;quot;bound&amp;quot;, &amp;quot;connected&amp;quot;,
  &amp;quot;inputshutdown&amp;quot;, &amp;quot;outputshutdown&amp;quot;,
  &amp;quot;bothshutdown&amp;quot;, &amp;quot;closed&amp;quot;})
@RefinementAlias(&amp;quot;ValidPort(int p) {p &amp;gt;= 0 &amp;amp;&amp;amp; p &amp;lt;= 65535}&amp;quot;)
@ExternalRefinementsFor(&amp;quot;java.net.Socket&amp;quot;)
public interface SocketRefinements {

  @StateRefinement(to = &amp;quot;unconnected(this)&amp;quot;)
  public void Socket();

  @StateRefinement(to = &amp;quot;connected(this)&amp;quot;)
  public void Socket(InetAddress address,
      @Refinement(&amp;quot;ValidPort(_)&amp;quot;) int port);

  @StateRefinement(from = &amp;quot;unconnected(this)&amp;quot;,
                   to = &amp;quot;bound(this)&amp;quot;)
  public void bind(SocketAddress bindpoint);

  ...
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;After-thoughts&lt;/h1&gt;
&lt;p&gt;Presenting this work almost one year after it was conducted feels very strange to me. LLMs have advanced so much in the meantime, that I believe they would be able to get better results without the need for our DFA-oriented architecture. Or probably we would have done a skill-based or tool-based architecture instead of multi-agent. LLMs are now much better at orchestrating the whole process and managing their contextual memory than they were back when we started this.&lt;/p&gt;
&lt;p&gt;This paper (along with most of the accepted papers in SE these two years) should probably just be a pre-print, or a living benchmark. The results we present are a product of our time, that would be imperceptible for anyone who wasn't using LLMs to generate code last year, or for the rest of us that forget it easily.&lt;/p&gt;
&lt;p&gt;I still see value in our approach, though. I am more and more convinced that we need more verified programming, not to avoid bugs, but rather to gain trust in the source code. While before software engineers would gain trust by building it themselves, and eventually by testing it, both of these tasks are so automated that we need other ways of building trust in our systems. That is an open question that I would love to have a complete answer to. Right now, formal methods and dependently-typed languages are a partial answer to that problem.&lt;/p&gt;
&lt;p&gt;If you're in Münich, please go and see &lt;a href="https://conf.researchr.org/details/ase-2026/ase-2026-research-track/97/Barista-Synthesizing-Typestate-Specifications-with-LLM-Agents"&gt;Catarina's talk on Thursday&lt;/a&gt;.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Mon, 12 Oct 2026 12:08:23 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/research/paper/barista?utm_source=rss_all</guid></item><item><title>We need to save Peer Review ourselves</title><link>http://wiki.alcidesfonseca.com/blog/being-an-incentive-being-an-obstacle-being-values?utm_source=rss_all</link><description>

&lt;blockquote&gt;
&lt;p&gt;In our value statements, we usually say we value diversity, but our strategies and plans don’t quite live up that. Academics are themselves diverse. There isn’t a one-size-fits-all job description. The 40-40-20 model itself doesn’t fit everyone, and doesn’t fit every stage of the career. It is natural to focus more on different roles at different times, depending on opportunities and energy. Some of us are just not meant to be president, and not everyone has to lead large EU projects to contribute to research. Individuals sometimes manage to make other types of research contributions by forging productive partnerships, eg between people at different career stages, but it requires them to work against the system a bit, and subvert the expectations the University has written into its metrics.&lt;/p&gt;
&lt;p&gt;[...]&lt;/p&gt;
&lt;p&gt;Some of my colleagues are probably thinking, based on recent discussions in committees, that I’m kind of bolshie and difficult about university administration activities. Thank you, perhaps yes.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— &lt;a href="https://jmmcd.substack.com/p/being-an-incentive-being-an-obstacle?utm_campaign=post"&gt;Being an incentive, being an obstacle, being values&lt;/a&gt; by &lt;a href="https://research.universityofgalway.ie/en/persons/james-mc-dermott/"&gt;James McDermott&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I am the difficult one in my department. &lt;a href="https://wiki.alcidesfonseca.com/blog/peer-review-is-dead/"&gt;Peer Review&lt;/a&gt; &lt;a href="https://wiki.alcidesfonseca.com/blog/arxiv-introduces-penalties-on-slop/"&gt;is in danger&lt;/a&gt;, facing an increased number of submissions (both papers and projects for funding). There are &lt;a href="https://www.grantbite.com/en/blog/ai-grant-writing-software-europe"&gt;AI companies selling solutions to automate some of these solutions&lt;/a&gt;, but everyone with a Claude or Codex subscription can generate a paper in a couple of hours. A great paper? maybe not, but enough to be yet another submission to have to review.&lt;/p&gt;
&lt;p&gt;In Artificial Intelligence conferences, you are limited to 20 submissions and/or you are required to be a reviewer (&lt;a href="https://blog.iclr.cc/2026/09/02/submission-policies-for-iclr-2027/"&gt;ICLR&lt;/a&gt;, &lt;a href="https://icml.cc/Conferences/2026/CallForPapers"&gt;ICML&lt;/a&gt;, &lt;a href="https://blog.neurips.cc/2025/05/02/responsible-reviewing-initiative-for-neurips-2025/"&gt;NeurIPS&lt;/a&gt;). The quality of reviews decreases, and there are &lt;a href="https://brianzhengca.github.io/"&gt;undergraduates&lt;/a&gt; [reviewing] some papers. I'm all in favor of Shadow PCs, but this seems too random to attribute any level of trust to the reviewers.&lt;/p&gt;
&lt;p&gt;In Software Engineering, ICSE defined &lt;a href="https://icse-conferences.org/sc/ICSE/2017/ICSE2017-ChairsReport-TechnicalTrack-v1.0.pdf"&gt;a maximum of 3 submissions&lt;/a&gt; (remember the Guinness World Record-level 12 accepted papers by the same author). ICSE, FSE and TOSEM have also &lt;a href="https://conf.researchr.org/track/icse-2025/icse-2025-research-track"&gt;agreed to share review(er)s&lt;/a&gt;, to avoid repeated work on the same submissions (reducing the reviewer bias resilience).&lt;/p&gt;
&lt;p&gt;Other areas are also following suit with senior authors having to agree to review papers if needed, imposing submission limits, and even &lt;a href="https://2026.ijcai.org/primary-paper-initiative/"&gt;adding a submission fee&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;These are all patches, not solutions to the problem. Many people have identified the solution: we must not count the number of papers (or funded projects) in the bean-counting process of research evaluation. If you give that much importance to a measure, the measure itself becomes the goal, and Peer Review will not survive.&lt;/p&gt;
&lt;p&gt;And who rules the university? We do. It's a collegial management, so we need each of us to rise against these practices. Bureaucrats require KPIs and metrics that do not look at the substance of the work. But the idea of being a collegial organization is that we should look at the substance (and that requires time, that no one wants to spend).&lt;/p&gt;
&lt;p&gt;And this is not a new idea. &lt;a href="https://users.dcc.uchile.cl/~cgutierr/cursos/INV/Couting%20Papers_p19-parnas.pdf"&gt;David Parnas said it in 2007&lt;/a&gt;, &lt;a href="https://archive2.cra.org/resources/bp-view/evaluating_computer_scientists_and_engineers_for_promotion_and_tenure/"&gt;Computing Research Association has said it in 1999&lt;/a&gt; &lt;a href="https://cra.org/cra/wp-content/uploads/sites/10/2016/02/BP_Memo.pdf"&gt;and in 2015&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Another related issue is that when everyone is targeting Q1 and Core A/A* conferences (~top 25% venues), the top 25% conferences are now responsible for 75% of the submissions, and lower ranked venues die. This is non-sensical.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Recommendation R4.1 states:
“Publication counts, whether weighted or not, must not be used to evaluate research value.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— &lt;a href="https://www.informatics-europe.org/component/phocadownload/category/9-publications/10-reports.html?download=278%3Aresearch-evaluation-2025"&gt;Informatics Europe, Informatics Research Evaluation (2025)&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“the scientific content of a paper is much more important than publication metrics or the identity of the journal in which it was published.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— &lt;a href="https://sfdora.org/read/"&gt;DORA, recommendation 4&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I agree with James, we need to fight for this change ourselves, because the attrition of the big machine of large organizations is against us.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Sun, 11 Oct 2026 16:21:54 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/being-an-incentive-being-an-obstacle-being-values?utm_source=rss_all</guid></item><item><title>unikernels were hard. key word: were.</title><link>http://wiki.alcidesfonseca.com/blog/unikernels-were-hard-key-word-were?utm_source=rss_all</link><description>

&lt;blockquote&gt;
&lt;p&gt;If you deeply care about security, there are really two choices:
You're sending satellites into space, and you should probably use seL4, a formally verified operating system. (I'm still a bit salty about the Australian government disbanding that team.)
Everyone else should seriously consider unikernels. Stop trying to harden something that is very hackable. Invert it and design from the other direction.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— &lt;a href="https://ghuntley.com"&gt;Geoffrey Huntley&lt;/a&gt; in &lt;a href="https://ghuntley.com/unikernels/"&gt;unikernels were hard. key word: were.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I have been a fan of Unikernels since MirageOS was announced, but OCaml was always an issue, mostly because of the lack of libraries for unikernels, but also because of the double semicolon (sorry Jane Streeters, French people and CMUers).&lt;/p&gt;
&lt;p&gt;In the age of agents, unikernels make sense to isolate agent tasks so that they have as little (security-attackable) surface as possible, finish as fast as possible, and you can run as many in a single machine as possible.&lt;/p&gt;
&lt;p&gt;However, you need some kind of inter-unikernel communication protocol (some lightweight semantic socket) so that you can spawn several unikernels, designed for single-purpose tasks, and gather the results they found.&lt;/p&gt;
&lt;p&gt;If you are working on such a topic, hit me up.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Sat, 10 Oct 2026 23:24:51 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/unikernels-were-hard-key-word-were?utm_source=rss_all</guid></item><item><title>Is sandboxing sufficient to contain rogue agents? – A Few Thoughts on Cryptographic Engineering</title><link>http://wiki.alcidesfonseca.com/blog/is-sandboxing-sufficient-to-contain-rogue-agents-a-few-?utm_source=rss_all</link><description>

&lt;blockquote&gt;
&lt;p&gt;Unfortunately, monitoring for adversarial data access turns out to be one of the hardest problems you could imagine. The volume of data that agents produce is so high that no human being could possibly read it, and we probably wouldn’t recognize obfuscated malicious data even if we were looking directly at it. This means any attempt to monitor the inflow/outflow will have to be handled by other models. Thus, the future of agent sandboxing is (1) build a sandbox, (2) install an agent/model into it, (3) install a somewhat dumber/cheaper warden model to guard it, (4) hope you can trust the lunkhead to contain the wizard. And so on and so forth, as models become more intelligent and capable.&lt;/p&gt;
&lt;p&gt;In other words: a warden-guarded sandbox is just another version of the alignment problem. You’re going to have to trust a model to do it, and that model will need to be at least some fraction as intelligent as the model it’s guarding. If you haven’t convinced yourself that it’s possible to build models you can trust, then sandboxing isn’t going to take you much farther.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— &lt;a href="https://blog.cryptographyengineering.com/author/matthewdgreen/"&gt;Matthew Green&lt;/a&gt; in &lt;a href="https://blog.cryptographyengineering.com/2026/09/30/is-sandboxing-sufficient-to-contain-rogue-agents/"&gt;Is sandboxing sufficient to contain rogue agents? – A Few Thoughts on Cryptographic Engineering&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Matthew Green, a cryptographer at Johns Hopkins University, points out what I have been saying for a while: if you want your agents to be useful, they have to be able to access information and perform actions. How do you prevent those actions from being harmful? You use another agent to deny or allow each action. Thus alignment is still relevant, even if for the bouncer controlling the sandbox escape.&lt;/p&gt;
&lt;p&gt;I actually believe we should be using deterministic guardrails that can be audited, instead of another model as a border patrol agent. I am working on such solution, which I will be sharing soon enough.&lt;/p&gt;
</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">Alcides Fonseca</dc:creator><pubDate>Fri, 09 Oct 2026 17:36:51 +0000</pubDate><guid>http://wiki.alcidesfonseca.com/blog/is-sandboxing-sufficient-to-contain-rogue-agents-a-few-?utm_source=rss_all</guid></item></channel></rss>