Point to the exact place.
Select a registered component. Keep its bounds and Rust source reference with the comment.
Visual feedback for your native GPUI app.
Annotate the interface. Give your agent the context.
A precise place.
A clear comment.
A shorter path to the fix.
An illustrated look at the workflow. The installed tools run inside your native GPUI app.
Select a registered component. Keep its bounds and Rust source reference with the comment.
Box an area, draw an arrow, or sketch with the pen. Give a visual idea a precise anchor.
Copy structured Markdown or connect an MCP client to read, reply, and resolve feedback.
Add the library to your GPUI app. Install the bridge separately if you want your coding agent to read and respond to annotations through MCP.
In your app’s Cargo.toml, enable native and turn off default features. Ely’s pinned source and assets come bundled in the package.
[dependencies]
gpui-agentation = { version = "0.4.0", default-features = false, features = ["native"] }
gpui = { package = "gpui-pre", version = "=0.3.8", default-features = false, features = ["stacker"] }Use the same gpui-pre version and registry source throughout your app. Other GPUI sources produce incompatible Rust types.
cargo install gpui-agentation --version 0.4.0 --lockedThe default install builds the portable bridge executable. It does not compile GPUI or Ely and does not launch your app.
Keep the integration at your application root. Register meaningful component boundaries you want to select, rather than wrapping every widget.
These instructions target the 0.4.0 Agentation API. Gate all annotation imports, initialization, fields, and render hooks with #[cfg(debug_assertions)]: release builds expose no annotation API.
Configure gpui_agentation::Assets on your Application, then call gpui_agentation::init(cx) in the launch callback. Agentation handles its bundled Ely setup and focus internally.
let feedback = gpui_agentation::Agentation::mount(
"My app", "gpui://my-app/home",
"target/agentation/feedback.json", 4748, window, cx,
)?;self.feedback.root(
"home", "Home screen", content, window, cx,
)Ordinary controls need no wrappers. Add target(id, label, child) only for finer inspection targets. Keep IDs stable and unique.
Run your native app in debug mode, then add the installed bridge to an MCP client that supports stdio servers. The bridge forwards requests to the app’s local listener.
{
"mcpServers": {
"gpui_agentation": {
"command": "gpui-agentation",
"args": ["--url", "http://127.0.0.1:4748/mcp"]
}
}
}Use your client’s equivalent server configuration if its schema differs. The agent can read pending annotations, acknowledge them, reply, and resolve or dismiss feedback. Keep the native app running while using these tools.
Loopback only. No API key. Browser origins are rejected by the native API. The site’s illustrations do not connect to your local server.
View the MCP Registry entryThe integration points are small and explicit. Start with the defaults and adjust the context your agent needs.
Version 0.4.0 does not expose a public toolbar layout or custom palette builder.
Inspired by Agentation and its approach to giving agents precise visual feedback. Thank you for the inspiration.
gpui-agentation is an independent Rust implementation for GPUI. It is not affiliated with Agentation and does not implement its complete protocol. The native interface uses bundled Ely components; upstream licenses and attribution are preserved.