Rewritten 2026-08-24. K3's design question has been answered, and largely built. The original
issue argued for a decision that has since been made and shipped, so it is replaced with what is
actually left rather than left standing as though nothing had happened.
K3. Follows K1 (answer from a live system) and K2 (as me, not as the deployment). Fuller version
in Notion under Architecture, same title.
The design, and where it landed
The question was whether retrieval should be a bolted-on pipeline or a tool call like any other. It
is a tool call, and the reason is the constraint OpenBot lives under: it is a template an enterprise
deploys, not a hosted product we run, so the deployment picks its own model. Anything that only works
on one vendor's API is not an answer for us.
Two halves came out of that, and both are built.
Selection, shipped. server/src/plugins/selection.ts narrows a Bot's tools per run to those its
matching skills declare, because a model picks the right tool reliably out of about ten and
unreliably out of thirty. It is model-agnostic by construction: a separate pass, not a vendor feature.
Skills declare tools in the tenant package (#157), and the offer is always the intersection with what
the Bot was actually granted, so a declaration confers nothing.
Retrieval over the tools, shipped. Google Drive is a connected plugin with four governed tools:
search_files, list_recent_files, get_file_metadata, read_file_content. Searching goes through
the same gateway as every other tool call: resolve, decide, audit, act. Access is per-person OAuth, so
two people asking the same question get answers from their own files, which is the permission property
that motivated putting retrieval over the tools rather than beside them.
The vector store and ingestion pipeline that predated this were removed. See #59.
What is left
Nothing in the original design. #227 closes the last wiring gap: a package can say which skills each
coworker gets, so Knowledge boots paired with its document skills rather than with none.
What was deliberately not decided here
Drive search is keyword search over a person's own files, not ranked semantic retrieval over an
indexed corpus. K3 did not answer whether we want the latter, and this issue should not be read as
having asked for it. If it is wanted, it is a project of its own, and its hard part is not ranking but
keeping an index in step with who may see what, which is the problem the per-person connector avoids
entirely.
K3. Follows K1 (answer from a live system) and K2 (as me, not as the deployment). Fuller version
in Notion under Architecture, same title.
The design, and where it landed
The question was whether retrieval should be a bolted-on pipeline or a tool call like any other. It
is a tool call, and the reason is the constraint OpenBot lives under: it is a template an enterprise
deploys, not a hosted product we run, so the deployment picks its own model. Anything that only works
on one vendor's API is not an answer for us.
Two halves came out of that, and both are built.
Selection, shipped.
server/src/plugins/selection.tsnarrows a Bot's tools per run to those itsmatching skills declare, because a model picks the right tool reliably out of about ten and
unreliably out of thirty. It is model-agnostic by construction: a separate pass, not a vendor feature.
Skills declare tools in the tenant package (#157), and the offer is always the intersection with what
the Bot was actually granted, so a declaration confers nothing.
Retrieval over the tools, shipped. Google Drive is a connected plugin with four governed tools:
search_files,list_recent_files,get_file_metadata,read_file_content. Searching goes throughthe same gateway as every other tool call: resolve, decide, audit, act. Access is per-person OAuth, so
two people asking the same question get answers from their own files, which is the permission property
that motivated putting retrieval over the tools rather than beside them.
The vector store and ingestion pipeline that predated this were removed. See #59.
What is left
Nothing in the original design. #227 closes the last wiring gap: a package can say which skills each
coworker gets, so Knowledge boots paired with its document skills rather than with none.
What was deliberately not decided here
Drive search is keyword search over a person's own files, not ranked semantic retrieval over an
indexed corpus. K3 did not answer whether we want the latter, and this issue should not be read as
having asked for it. If it is wanted, it is a project of its own, and its hard part is not ranking but
keeping an index in step with who may see what, which is the problem the per-person connector avoids
entirely.