Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com>
This commit is contained in:
Josh Soref
2026-02-11 09:35:24 -05:00
committed by GitHub
parent 544bc1bc4f
commit f636a97faa
81 changed files with 109 additions and 110 deletions
@@ -7,7 +7,7 @@ authors:
![blog cover](goosefigma.png)
In our previous episode of [goose Flight School](https://www.youtube.com/playlist?list=PLyMFt_U2IX4s1pMaidir5P4lSfjUK6Nzm), our host [Adewale Abati](https://www.linkedin.com/in/acekyd/) showed us how to use goose to take a Figma design and transform it into a functional Nuxt application. In this stream he covered the entire process, from initial setup to final implementation, highlighting how goose can help developers bridge the gap between design and development.
In our previous episode of [goose Flight School](https://www.youtube.com/playlist?list=PLyMFt_U2IX4s1pMaidir5P4lSfjUK6Nzm), our host [Adewale Abati](https://www.linkedin.com/in/acekyd/) showed us how to use goose to take a Figma design and transform it into a functional Nuxt application. In this stream he covered the entire process, from initial set up to final implementation, highlighting how goose can help developers bridge the gap between design and development.
<!--truncate-->
@@ -17,7 +17,7 @@ Together, they create a self-contained AI agent workflow that puts advanced capa
# Getting Started
Before diving deep into various capabilities, Rizel walked us through how to set yourself up for success by integrating goose with Ollama. To follow along, you can download goose [here](https://block.github.io/goose/) and follow a step-by-step walk through in the [Configure LLM Provider](https://block.github.io/goose/docs/getting-started/providers) guide.
Before diving deep into various capabilities, Rizel walked us through how to set yourself up for success by integrating goose with Ollama. To follow along, you can [download goose](https://block.github.io/goose/) and follow a step-by-step walk through in the [Configure LLM Provider](https://block.github.io/goose/docs/getting-started/providers) guide.
If you have any questions or get stuck, feel free to chat with us on [Discord](https://discord.gg/goose-oss) or post an issue/discussion on [GitHub](https://github.com/block/goose/). Thanks for reading!
@@ -25,7 +25,7 @@ Since traditional observability tools don't quite cut it when it comes to AI age
Each interaction with goose creates a trace to capture the full story of what happened. These traces include key information, from the initial prompt and user messages to tool calls and their responses. They also store valuable metadata about model outputs and timing information, giving developers a complete picture of each interaction.
### Timeline View
The timeline view takes these complex interactions and transforms it into a digestible format. Developers can see parallel task execution in real-time, understand the dependencies between different actions, and measure the actual duration of each opersation. This can be super helpful when debugging a complex sequence of actions taken by goose, or to help optimize performance.
The timeline view takes these complex interactions and transforms it into a digestible format. Developers can see parallel task execution in real-time, understand the dependencies between different actions, and measure the actual duration of each operation. This can be super helpful when debugging a complex sequence of actions taken by goose, or to help optimize performance.
### Structured Data
Alice explained, "goose sessions can be really long... we have log files, but you'll just see a massive log of JSON."
@@ -251,7 +251,7 @@ Ensure your model has enough context length to avoid running out of space in the
OLLAMA_CONTEXT_LENGTH=28672 ollama serve
```
You can also set the context length as a parameter in Ollama by updating the Modlfile with your desired context length and running `ollama create`.
You can also set the context length as a parameter in Ollama by updating the Modelfile with your desired context length and running `ollama create`.
### Be Aware of Quantization Levels
@@ -19,11 +19,11 @@ Blocks Information Security (InfoSec) team has been heavily involved in this
## What is the Model Context Protocol (MCP)
Model Context Protocol (MCP) is a protocol [developed by Anthropic](https://docs.anthropic.com/en/docs/agents-and-tools/mcp), with input from Block engineers, that makes it easier to build integrations for agents to connect and use other tooling. Put simply, if you want AI to connect to SaaS solutions (e.g. Github, Jira), CLI tools (e.g. AWS CLI) or your own custom applications you can write an MCP server and "teach" it how to correctly interact.
Model Context Protocol (MCP) is a protocol [developed by Anthropic](https://docs.anthropic.com/en/docs/agents-and-tools/mcp), with input from Block engineers, that makes it easier to build integrations for agents to connect and use other tooling. Put simply, if you want AI to connect to SaaS solutions (e.g. GitHub, Jira), CLI tools (e.g. AWS CLI) or your own custom applications you can write an MCP server and "teach" it how to correctly interact.
This has huge advantages as we can create deterministic, well defined interfaces that reduce the amount of "experimentation/brute force" required for agents to perform helpful tasks.
A use case like "read this ticket from Jira and then clone the relevant github repo and implement the feature" is more likely to succeed if the agent doesnt have to work out how to interact with Jira, Github and the Git CLI.
A use case like "read this ticket from Jira and then clone the relevant github repo and implement the feature" is more likely to succeed if the agent doesnt have to work out how to interact with Jira, GitHub and the Git CLI.
This helps agents to spend time solving novel problems rather than burning tokens understanding well defined API specifications.
@@ -133,7 +133,7 @@ Lower-performing models might work, but they're more likely to hallucinate or mi
## Watch Vibe Coding in Action
Heres how folks vibe code with Goose:
<iframe width="560" height="315" src="https://www.youtube.com/embed/xZo3aA-vFi4?si=14bVczrCUwdKBZyg" title="The Great Great Off" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<iframe width="560" height="315" src="https://www.youtube.com/embed/xZo3aA-vFi4?si=14bVczrCUwdKBZyg" title="The Great Goose Off" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
## Final Thoughts
@@ -29,7 +29,7 @@ We brought Goose to New York City and it was one for the books.
Over 100 people registered, plus 87 on the waitlist, and we had a packed room full of folks who were curious, thoughtful, and ready to dive in. Some were developers already exploring Goose and MCP, others were totally new to the world of AI agents. Thats the beauty of Goose, its for developers *and* non-developers.
The energy was there from the moment the event began - music, pizza, and authentic networking. We had lightning talks, a Goose-themed game, hands-on hacking, and yeah… a few Ebbs IPAs mightve ended up in peoples backpacks by the end of the night.
The energy was there from the moment that the event began - music, pizza, and authentic networking. We had lightning talks, a Goose-themed game, hands-on hacking, and yeah… a few Ebbs IPAs mightve ended up in peoples backpacks by the end of the night.
<!--truncate-->
@@ -9,7 +9,7 @@ authors:
"Stop using AI," reads yet another viral post. I get it. It's frustrating to review a colleague's auto-generated work, filled with AI's classic giveaways like generic code comments and phrases like "In today's fast-paced world..."
Still, AI plays a pivotal role in my career. I don't rely on AI to do my work, but I use it to help me brainstorm and work more effciently.
Still, AI plays a pivotal role in my career. I don't rely on AI to do my work, but I use it to help me brainstorm and work more efficiently.
The introduction of [Model Context Protocol (MCP)](https://modelcontextprotocol.io) has made this even easier. MCP is an open standard that gives AI tools the context they need to be useful in the real world. It enables AI agents to interact with APIs, apps, and systems in a structured way. I use [Codename goose](/), an open source AI agent built on MCP.
Here are 11 real ways I use AI Agents without sacrificing authenticity, creativity, or quality:
@@ -114,7 +114,7 @@ The link below is a recipe that lets you choose your favorite platform (GitHub,
> [Create a 404-style portfolio page with Goose](goose://recipe?config=eyJ2ZXJzaW9uIjoiMS4wLjAiLCJ0aXRsZSI6IjQwNFBvcnRmb2xpbyIsImRlc2NyaXB0aW9uIjoiQ3JlYXRlIHBlcnNvbmFsaXplZCwgY3JlYXRpdmUgNDA0IHBhZ2VzIHVzaW5nIHB1YmxpYyBwcm9maWxlIGRhdGEiLCJpbnN0cnVjdGlvbnMiOiJDcmVhdGUgYW4gZW5nYWdpbmcgNDA0IGVycm9yIHBhZ2UgdGhhdCB0ZWxscyBhIGNyZWF0aXZlIHN0b3J5IHVzaW5nIGEgdXNlcidzIHJlY2VudCBwdWJsaWMgY29udGVudCBmcm9tICoqb25lKiogb2YgdGhlIGZvbGxvd2luZyBwbGF0Zm9ybXM6ICoqR2l0SHViKiosICoqRGV2LnRvKiosIG9yICoqQmx1ZXNreSoqLiBZb3UgZG8gbm90IG5lZWQgdG8gdXNlIGFsbCB0aHJlZeKAlGp1c3QgdGhlIG9uZSBzZWxlY3RlZCBieSB0aGUgdXNlci5cblxuVGhlIHBhZ2Ugc2hvdWxkIGJlIGZ1bGx5IGJ1aWx0IHdpdGggKipIVE1MLCBDU1MsIGFuZCBKYXZhU2NyaXB0KiosIGZlYXR1cmluZzpcblxuKiBSZXNwb25zaXZlIGRlc2lnblxuKiBQZXJzb25hbCBicmFuZGluZyBlbGVtZW50cyAoZS5nLiwgbmFtZSwgaGFuZGxlLCBhdmF0YXIpXG4qIE5hcnJhdGl2ZS1kcml2ZW4gbGF5b3V0IHRoYXQgdHVybnMgdGhlIGVycm9yIGludG8gYW4gb3Bwb3J0dW5pdHkgZm9yIGRpc2NvdmVyeVxuXG5Vc2UgcGxhdGZvcm0tc3BlY2lmaWMgbWV0aG9kcyB0byBmZXRjaCByZWNlbnQgdXNlciBjb250ZW50OlxuXG4qIEZvciAqKkRldi50byoqLCB1c2UgdGhlIFtwdWJsaWMgRGV2LnRvIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmZvcmVtLmNvbS9hcGkpIHRvIHJldHJpZXZlIHJlY2VudCBhcnRpY2xlcywgcmVhY3Rpb25zLCBhbmQgcHJvZmlsZSBpbmZvcm1hdGlvbi5cbiogRm9yICoqR2l0SHViKiosIHVzZSB0aGUgR2l0SHViIFJFU1Qgb3IgR3JhcGhRTCBBUEkgdG8gYWNjZXNzIHJlY2VudCByZXBvcywgY29tbWl0cywgYW5kIGNvbnRyaWJ1dGlvbnMuXG4qIEZvciAqKkJsdWVza3kqKiwgdXNlIHB1YmxpYyBmZWVkIGVuZHBvaW50cyBmcm9tIHRoZSBBcHBWaWV3IEFQSSAoZS5nLiwgYGFwcC5ic2t5LmZlZWQuZ2V0QXV0aG9yRmVlZGApIHRvIHB1bGwgcG9zdHMsIHJlcGxpZXMsIG9yIGxpa2VzLlxuXG5JbmNvcnBvcmF0ZSB0aGUgZmV0Y2hlZCBkYXRhIGludG8gYSBjb21wZWxsaW5nIG5hcnJhdGl2ZSAoZS5nLiwg4oCcTG9va3MgbGlrZSB0aGlzIHBhZ2UgaXMgbWlzc2luZywgYnV0IFxcW3VzZXJuYW1lXSBoYXMgYmVlbiBidXN5IeKAnSksIGFuZCBkaXNwbGF5IGl0IHVzaW5nIGVuZ2FnaW5nIHZpc3VhbHMgbGlrZSBjYXJkcywgdGltZWxpbmVzLCBvciBtZWRpYSBlbWJlZHMuXG5cbldyYXAgdGhlIHVzZXLigJlzIGFjdGl2aXR5IGludG8gYSBzdG9yeSDigJQgZm9yIGV4YW1wbGU6XG5cbuKAnFRoaXMgcGFnZSBtYXkgYmUgbG9zdCwgYnV0IEB1c2VybmFtZSBpcyBidWlsZGluZyBzb21ldGhpbmcgYW1hemluZy4gVGhlaXIgbGF0ZXN0IG9wZW4gc291cmNlIGpvdXJuZXkgaW52b2x2ZXMgYSBuZXcgcmVwbyB0aGF04oCZcyBnYWluaW5nIHN0YXJzIGZhc3TigKbigJ1cbuKAnFlvdSB3b27igJl0IGZpbmQgd2hhdCB5b3XigJlyZSBsb29raW5nIGZvciBoZXJlLCBidXQgeW91IHdpbGwgZmluZCBAdXNlcm5hbWXigJlzIGhvdCB0YWtlIG9uIGFzeW5jL2F3YWl0IGluIHRoZWlyIGxhdGVzdCBEZXYudG8gcG9zdC7igJ1cblxuVGhlIHJlc3VsdCBzaG91bGQgYmUgYSBzbWFsbCBuYXJyYXRpdmUtZHJpdmVuIG1pY3Jvc2l0ZSB0aGF0IGR5bmFtaWNhbGx5IGNlbGVicmF0ZXMgdGhlIHVzZXIncyBwcmVzZW5jZSBvbmxpbmXigJRldmVuIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGlzIG1pc3NpbmcuXG5cbkFzayB0aGUgdXNlcjpcblxuMS4gV2hpY2ggcGxhdGZvcm0gdG8gdXNlOiBHaXRIdWIsIERldi50bywgb3IgQmx1ZXNreVxuMi4gVGhlaXIgdXNlcm5hbWUgb24gdGhhdCBwbGF0Zm9ybVxuXG5UaGVuIGdlbmVyYXRlIHRoZSBjb21wbGV0ZSBjb2RlIGluIGEgZm9sZGVyIGNhbGxlZCA0MDQtc3RvcnkuXG4iLCJleHRlbnNpb25zIjpbXSwiYWN0aXZpdGllcyI6WyJCdWlsZCBlcnJvciBwYWdlIGZyb20gR2l0SHViIHJlcG9zIiwiR2VuZXJhdGUgZXJyb3IgcGFnZSBmcm9tIGRldi50byBibG9nIHBvc3RzIiwiQ3JlYXRlIGEgNDA0IHBhZ2UgZmVhdHVyaW5nIEJsdWVza3kgYmlvIl0sImF1dGhvciI6eyJjb250YWN0Ijoicml6ZWwifX0=)
:::note
The link above opens in the Goose Desktop app. If you don't have it installed yet, grab it [here](/docs/getting-started/installation).
The link above opens in the [Goose Desktop app](/docs/getting-started/installation).
:::
<details>
@@ -141,7 +141,7 @@ instructions: |
8. For each category, sort entries by date (newest first).
9. Look for an existing CHANGELOG.md file and understand its format; create the file if it doesn't exist. Then, output the new changlog content at the top of the file, maintaining the same markdown format, and not changing any existing content.
9. Look for an existing CHANGELOG.md file and understand its format; create the file if it doesn't exist. Then, output the new changelog content at the top of the file, maintaining the same markdown format, and not changing any existing content.
extensions:
- type: builtin
@@ -104,7 +104,7 @@ To test that MCP was working, I used the MCP inspector tool to send commands to
npx @modelcontextprotocol/inspector /path/to/java -jar /path/to/mbotmcp-0.0.1-SNAPSHOT.jar
```
This starts up a local web server (the command line output will tell you which port to access in your browser, ie, loalhost:6274), where you can "connect" to the server, and request a list of tools, resources, prompts, from the MCP server. In this case, I see a list of tools available such as "mbotBeep" or "mbotExplore".
This starts up a local web server (the command line output will tell you which port to access in your browser, i.e., localhost:6274), where you can "connect" to the server, and request a list of tools, resources, prompts, from the MCP server. In this case, I see a list of tools available such as "mbotBeep" or "mbotExplore".
![mcp tool list](mcp-tool-list.png)
@@ -7,7 +7,7 @@ authors:
![blog cover](goose-recipes-detection-development-cover.png)
Creating effective security detections in Panther traditionally requires deep knowledge of detection logic, testing frameworks, and development workflows. The detection engineering team at Block has streamlined this process by building Goose recipes that automate the entire detection creation lifecycle from initial repository setup to pull request creation.
Creating effective security detections in Panther traditionally requires deep knowledge of detection logic, testing frameworks, and development workflows. The detection engineering team at Block has streamlined this process by building Goose recipes that automate the entire detection creation lifecycle from initial repository set up to pull request creation.
This blog post explores how to leverage Goose's [recipe](https://block.github.io/goose/docs/guides/recipes/) and [subrecipe](https://block.github.io/goose/docs/guides/recipes/subrecipes) system to create new detections in Panther with minimal manual intervention, ensuring consistency, quality, and adherence to team standards.
@@ -20,7 +20,7 @@ The [**MCP Jupyter Server**](https://github.com/block/mcp-jupyter) solves this b
## The Memory and Context Problem
Traditional AI coding assistants face a fundamental limitation: they lose context between interactions. This in part stems from their design to accomplish well-described individual tasks like refactoring a piece of code, compiling and running its tests, and commiting the result version control. In contrast, data science workflows are often open-ended and require extensive exploration and interactivity. This creates several challenges for using AI with data-heavy ML workflows:
Traditional AI coding assistants face a fundamental limitation: they lose context between interactions. This in part stems from their design to accomplish well-described individual tasks like refactoring a piece of code, compiling and running its tests, and committing the result version control. In contrast, data science workflows are often open-ended and require extensive exploration and interactivity. This creates several challenges for using AI with data-heavy ML workflows:
- **Constant data reloading**: Each interaction requires re-loading or describing your dataset
- **Expensive iteration**: Large datasets are slow and costly to process repeatedly
@@ -290,7 +290,7 @@ The Architect agent established the technical foundation:
- **File Structure**: Organized project with clear separation of concerns
- **Dependencies**: Express, CORS, and child_process for calling Headless Goose
The Architect also defined the API contract, which made it possible for the the next step where the frontend and backend developer agents can work in parallel.
The Architect also defined the API contract, which made it possible for the next step where the frontend and backend developer agents can work in parallel.
### Step 4: Parallel Development
This is where things got really interesting. We spun up two developer agents simultaneously:
@@ -71,7 +71,7 @@ interface UIResource {
resource: {
uri: string; // e.g., ui://component/id
// highlight-next-line
mimeType: 'text/html' | 'text/uri-list' | 'application/vnd.mcp-ui.remote-dom'; // text/html for HTML content, text/uri-list for URL content, application/vnd.mcp-ui.remote-dom for remote-dom content (Javascript)
mimeType: 'text/html' | 'text/uri-list' | 'application/vnd.mcp-ui.remote-dom'; // text/html for HTML content, text/uri-list for URL content, application/vnd.mcp-ui.remote-dom for remote-dom content (JavaScript)
text?: string; // Inline HTML, external URL, or remote-dom script
blob?: string; // Base64-encoded HTML, URL, or remote-dom script
};
@@ -13,7 +13,7 @@ A website to me is a corner of the internet where I can be who I am, share my wo
## Going Back to My Roots
When I say I was a nerdy blog creator for other people, I mean I was living in the deep-end of HTML and CSS. It was a hobby where I got to create super-customized websites for other nerds like myself on the internet. So it was really bugging me to have a website today that was basically :poopemoji: personified. No character, no style of my own, just a minimal generic layout I was paying a monthly subscription for just to avoid complete embarassment. It's been a decade at least since then, and I was NOT in the mood to sit here and relearn pieces to create a website structure from scratch. I had all the pieces in my drafts, just needed structure.
When I say I was a nerdy blog creator for other people, I mean I was living in the deep-end of HTML and CSS. It was a hobby where I got to create super-customized websites for other nerds like myself on the internet. So it was really bugging me to have a website today that was basically :poopemoji: personified. No character, no style of my own, just a minimal generic layout I was paying a monthly subscription for just to avoid complete embarrassment. It's been a decade at least since then, and I was NOT in the mood to sit here and relearn pieces to create a website structure from scratch. I had all the pieces in my drafts, just needed structure.
## The 404 Challenge That Started It All
@@ -39,7 +39,7 @@ goose was helping me resolve what felt like an age-old problem, and made it so s
2. **Review** the site and ask goose to edit or create any pages I needed
3. **Write content** to fill the different pages of my website (my favorite part)
Then boom, my website was done. No wrestling ancient memories from my mind to relearn CSS, no debugging issues caused by a responsive hover effect I thought was cool at 2 AM, no troubles at all. Goose handled everything. It started with a simple structure, used the styling it came up with from the 404 day challenge, and made changes as I asked for them in conversation. My website went from being embarrasingly empty to being wonderfully designed and easy to edit in *minutes*.
Then boom, my website was done. No wrestling ancient memories from my mind to relearn CSS, no debugging issues caused by a responsive hover effect I thought was cool at 2 AM, no troubles at all. Goose handled everything. It started with a simple structure, used the styling it came up with from the 404 day challenge, and made changes as I asked for them in conversation. My website went from being embarrassingly empty to being wonderfully designed and easy to edit in *minutes*.
## Always Use Git
@@ -54,7 +54,7 @@ The recipe:
- Runs completely autonomously (no human intervention needed)
- Handles different flag implementations, ranging in complexity
- Attempts refactoring for outdated code paths
- Can automatically create draft pull requests, via the Github CLI
- Can automatically create draft pull requests, via the GitHub CLI
- Integrates with [Xcode Index MCP](https://github.com/block/xcode-index-mcp) for deep iOS project understanding
- Plans, implements, builds and tests locally to improve the accuracy of the flag removal result
@@ -91,7 +91,7 @@ The future of software development is mixed teams where AI agents are autonomous
---
Want the tweak the base recipe for your own needs? Check out [Clean up feature flag](/recipes/detail/?id=clean-up-feature-flag) in our Recipe Cookbook!
Want to tweak the base recipe for your own needs? Check out [Clean up feature flag](/recipes/detail/?id=clean-up-feature-flag) in our Recipe Cookbook!
<head>
<meta property="og:title" content="When AI Becomes Your New Team Member: The Story of Goose Janitor" />
@@ -20,7 +20,7 @@ posts. Since the approach and the benefits are clearly laid out in those posts I
### Summary
* Instead of exposing the tools directly to the model an MCP client application can:
* Instead of exposing the tools directly to the model, an MCP client application can:
* Generate a programmatic interface to these same tools (typically JS or TS powered)
* Provide a limited set of tools to the model (search available modules/tool source code, read the source code for a tool, and then a tool to execute some code)
* Run the code the model generates to call the programmatic API in a sandboxed environment for safety
@@ -35,7 +35,7 @@ posts. Since the approach and the benefits are clearly laid out in those posts I
In v1.17.0 of goose, we've introduced an open source implementation of this idea in a new platform extension called: Code Execution.
Our implementation generates a JavaScript interface representing the connected MCP tools and then lets the model write code to run
against it in [boa](https://github.com/boa-dev/boa) which is an embeddable Javascript engine. One neat feature of boa we were able
against it in [boa](https://github.com/boa-dev/boa) which is an embeddable JavaScript engine. One neat feature of boa we were able
to take advantage of was the concept of [NativeFunction](https://docs.rs/boa_engine/latest/boa_engine/native_function/struct.NativeFunction.html).
In boa, a `NativeFunction` is something which exposes a function in the embedded JavaScript environment which calls back into a
@@ -47,9 +47,8 @@ MCP server with ease!
Our hope is that we improve tool calling performance and handling of large numbers of tools in goose, but
also provide an open source implementation of this emerging approach.
* Try out the feature by enabling the "Code Execution" extension in v1.17.0 or later of goose by clicking extensions on the left side of the desktop app or running `goose configure` on cli
* Try out the feature by enabling the ["Code Execution" extension](https://github.com/block/goose/blob/main/crates/goose/src/agents/code_execution_extension.rs) in v1.17.0 or later of goose by clicking extensions on the left side of the desktop app or running `goose configure` on cli
* Please give us feedback on how it works for you by joining our [discord](https://discord.gg/goose-oss).
* The source code is [here](https://github.com/block/goose/blob/main/crates/goose/src/agents/code_execution_extension.rs)
Kudos to my colleague [Mic Neale](https://github.com/michaelneale) for collaborating with me on the implementation!
@@ -100,7 +100,7 @@ Common mitigation techniques for indirect content injection recommend additional
Another mitigation technique involves performing some analysis on returned content prior to execution to identify potential injection attempts. A simple string match approach (regex, etc.) or a more complex classification approach (such as [Prompt Guard](https://www.llama.com/docs/model-cards-and-prompt-formats/prompt-guard/)) may be used to achieve this goal. However, these detection methods (while useful), are not infallible and may still result in untrusted instructions being processed by the LLM.
Another mitigation is sandboxing. Ensuring the agent runs within a limited environment such as a well-hardened docker-container can limit the actions the agent and associated tools can perform on the underlying host (i.e. cannot delete all files unless that volume is mounted). This mitigation does not protect against attacks targeting other MCP available to the agent (i.e. using a poisoned email payload to commit malicious code)
Another mitigation is sandboxing. Ensuring the agent runs within a limited environment such as a well-hardened docker-container can limit the actions that the agent and associated tools can perform on the underlying host (i.e. cannot delete all files unless that volume is mounted). This mitigation does not protect against attacks targeting other MCP available to the agent (i.e. using a poisoned email payload to commit malicious code)
## Proposed design
@@ -247,7 +247,7 @@ In this post we have contextualised the risks associated with LLM Content Inject
Were working on a proof of concept and benchmarking for goose in the background. Once released we will update this blog with the results (either good or bad) outlining the effectiveness of the mitigation.
Another area we intend to explore is the application to multi-agent systems. Our application of this is intended for human facing agentic systems. However, it likely has applications in fully autonomous player-coach systems (similar to what is described in [Anthropics Multi-Agent Research Systems](https://www.anthropic.com/engineering/multi-agent-research-system) or [Blocks Adversarial Cooperation in Code Synthesis](https://block.xyz/documents/adversarial-cooperation-in-code-synthesis.pdf)) where the orchestrating Agent takes the role of the human providing initial prompts, but also defining allowable tool-calls or interactions.
We also welcome any and all feedback and suggestions on improving the concept. [Hit us up on the goose Github discussion](https://github.com/block/goose/discussions/6328)
We also welcome any and all feedback and suggestions on improving the concept. [Hit us up on the goose GitHub discussion](https://github.com/block/goose/discussions/6328)
<head>
<meta property="og:title" content="Agent Guardrails and Controls: Applying the CORS Model to Agents" />
@@ -26,7 +26,7 @@ Here's an example flow of what happens when goose renders a cocktail recipe UI:
1. You ask the LLM "Show me a margarita recipe".
2. The LLM calls the `get-cocktail` tool with the right parameters. This tool has a UI resource link in `_meta.ui.resourceUri` pointing to the resource containing the HTML.
3. The client then uses the Uri to fetch the MCP resource. This resource contains the HTML content of the view.
3. The client then uses the URI to fetch the MCP resource. This resource contains the HTML content of the view.
4. The HTML is then loaded into the iFrame directly in the chat interface, rendering the cocktail recipe.
![MCP Apps flow diagram showing how UI renders](mcp-app-flow.png)
@@ -100,7 +100,7 @@ Currently, the tool approval feature is still a work in progress. I actually got
The RPI method felt like a superpower, even if it didn't magically delete every bug from the project. There is a big difference between fighting a hallucination and fighting a real technical challenge.
When I didn't use RPI, goose hallucinated non-existent endpoints and tried to build a complex MCP server when a simple HTTP API was all we needed. Those are the kinds of bugs that waste hours because you are chasing ghosts.
When I didn't use RPI, goose hallucinated nonexistent endpoints and tried to build a complex MCP server when a simple HTTP API was all we needed. Those are the kinds of bugs that waste hours because you are chasing ghosts.
![Before RPI: Debugging failures and hallucinations](failure-screenshot.png)