Replies: 3 comments 5 replies
|
should the it is possible that the extensions one could offer MCP servers that any harness could use? (can sort of do that today) - but maybe that is also a non goal. I am guessing goose-agent would be where the compaction strategies are in (perhaps one can implement their own and plug it in) ? There is also the session management and storage - similarly in goose-agent? (as people might swap out sqlite for some other database implementation potentially? or would that more be left to using the agent in its unrolled form and you do that code outside of this?) |
|
I’ve been experimenting with this from the embedding/runtime side, and the shape that has worked best for me is mostly compatible with the proposed breakdown here. I’d frame this as a lower-level decomposition underneath I’d also encourage folks to manually examine, or point an agent at, my fork/branch here: https://github.com/i386/goose/tree/decomposition That branch already implements most of the crate decomposition I’m describing below, so it may be useful as a concrete reference point rather than only a design sketch. Rough mapping:
Why split below
|
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Goal
To date, goose has been architected and shipped as a monolithic application. There are some crate boundaries internally, but they haven't been designed for independent use. We'd like to change that, and make the components of goose usable by other Rust binaries as a set of crates.
Non-goals
We won’t decide just yet on the exact semantics of the API. Code examples are intended to be illustrative, not authoritative.
Crates
goose-providers
Talk to OpenAI, Anthropic, Google etc. behind a common interface. All providers supported in goose today are available. Support for declarative (pre-packaged) and custom (user-defined) providers that adhere to the “shape” of the pseudo-standard APIs. goose-local-inference providers are also packaged here behind feature flags.
In the future, this crate can be the home for the model router.
Key dependencies: reqwest, provider-specific sdks as needed
goose-local-inference
The implementation of the important parts of local inference. Feature flags for cuda/vulkan/etc. Isolated to its own crate to make flagging support in goose-providers straightforward. (Could maybe just be part of the goose-providers crate?)
goose-agent
see Unrolling the agent loop
The agent loop implementation. Use this crate to configure and run a goose agent. More detail is covered in other docs, but the key here is a pluggable, configurable, resumable agent loop.
This create doesn’t need to
goose-extensions
Implementations of extensions and agent loop operations to build a functional agent. This might end up being a bit of a grab bag of bits that could be broken up:
Key dependencies: tree-sitter, pctx (code mode), all feature flagged.
goose-acp
Implementation of the goose ACP server.
goose
Core types/traits common to other crates. Traits that define the behavior of:
Next Steps
All reactions