Files
cleveragents-core/docs/reference/tool_bindings.md
T
freemo 0265b8c712
CI / benchmark-publish (pull_request) Has been skipped
CI / build (pull_request) Successful in 18s
CI / lint (pull_request) Successful in 21s
CI / quality (pull_request) Successful in 33s
CI / security (pull_request) Successful in 38s
CI / typecheck (pull_request) Successful in 38s
CI / coverage (pull_request) Has been cancelled
CI / unit_tests (pull_request) Has been cancelled
CI / integration_tests (pull_request) Has been cancelled
CI / benchmark-regression (pull_request) Has been cancelled
CI / docker (pull_request) Has been cancelled
Docs: Added JINJA2 details to docs
2026-02-20 15:57:21 +00:00

133 lines
3.6 KiB
Markdown

# Tool Resource Bindings
Tools in CleverAgents declare **resource slots** that describe which
resources they operate on. At activation time the binding resolution
service maps each slot to a concrete resource from the registry.
## Binding Modes
### Contextual Binding (default)
The slot declares only a `resource_type` requirement. The system
searches the plan's project for linked resources that match at
activation time.
**Resolution rules:**
1. Collect all linked resources whose type matches the slot's
`resource_type` (including sub-types via `parent_types`).
2. If exactly **one** resource matches, it is automatically bound.
3. If **multiple** resources match, the slot `name` is used as a
hint: the resource whose alias (or short name) equals the slot
name is selected. If no alias matches, a `ValidationError` is
raised.
4. If **no** resource matches and the slot is `required`, a
`ValidationError` is raised.
```yaml
resource_slots:
- name: repo
resource_type: git-checkout
access: read_write
binding: contextual # default -- can be omitted
```
### Static Binding
The slot is hardcoded to a specific registered resource by name via
the `static_resource` field. Validated at registration time.
```yaml
resource_slots:
- name: config_dir
resource_type: fs-directory
access: read_only
binding: static
static_resource: local/shared-config
```
### Parameter Binding
The resource reference is passed as a tool argument at invocation
time. Resolution is deferred until the tool is actually called.
```yaml
resource_slots:
- name: target
resource_type: fs-directory
access: read_write
binding: parameter
```
At invocation the caller supplies `target=<resource-name-or-id>`.
## Resolution Order
For each resource slot on the tool:
1. Determine the binding mode (`static`, `parameter`, or
`contextual`).
2. **Static** -- look up the named resource in the registry;
verify type compatibility.
3. **Parameter** -- if invocation params include the slot name,
resolve eagerly; otherwise mark as *deferred*.
4. **Contextual** -- search the project's linked resources for
type-compatible matches and apply disambiguation rules.
## Type Compatibility
A resource is *type-compatible* with a slot when:
- The resource's type **exactly matches** the slot's
`resource_type`, **or**
- The resource's type declares the slot's `resource_type` in its
`parent_types` list (sub-type relationship).
For example, `fs-directory` lists `git-checkout` in its
`parent_types`, so an `fs-directory` resource satisfies a slot
requiring `git-checkout`.
## Examples
### Single Contextual Resource
```python
from cleveragents.application.services.binding_resolution_service import (
BindingResolutionService,
)
service = BindingResolutionService(resource_registry)
results = service.resolve(tool, project)
# results[0].binding_mode == "contextual"
# results[0].resource_id == "01HGZ..."
```
### Mixed Bindings
A tool may combine all three modes:
```yaml
resource_slots:
- name: repo
resource_type: git-checkout
access: read_write
binding: contextual
- name: config
resource_type: fs-directory
access: read_only
binding: static
static_resource: local/shared-config
- name: output
resource_type: fs-directory
access: write_only
binding: parameter
```
## API Reference
See:
- [`BindingResolutionService`](cleveragents/application/services/binding_resolution_service.md)
- [`BindingResult`](cleveragents/domain/models/core/resource_slot.md)
- [`ResourceSlot`](cleveragents/domain/models/core/tool.md)