Weave Capability Catalog
The catalog is how agents become discoverable and connectable. Every Weave agent publishes a manifest (its ports + capability tags); the catalog defines the shared vocabulary so a Router can match one agent's output to another's input.
Agent manifest
Every agent emits a portable manifest via agent.manifest() (also written into the .weave.zip produced by weaveflow package):
{
"name": "summarizer",
"input_schema": { "type": "text", "shape": null, "format": "markdown", "description": "" },
"output_schema": { "type": "structured_json", "shape": { "summary": "str" }, "format": null, "description": "" },
"capability_tags": ["summarization", "english"]
}
Standard data types
| Type | Value (Python) | Common use | |
|---|---|---|---|
text | str | prompts, summaries, reports | |
structured_json | dict | data extraction, structured output | |
image | str \ | bytes | vision, document parsing |
code | str | code gen / review / execution | |
audio | str \ | bytes | voice input, transcription |
document | str \ | bytes | document analysis, drafting |
embedding | list[float] | semantic search, RAG | |
stream | async/sync iterator | live, long-form output |
Type compatibility graph
A source type can feed a target type directly (identical) or via an auto-injected transform (compatible). Anything not listed is incompatible and rejected at connect time.
| Source → Target | Transform | LLM needed |
|---|---|---|
text → structured_json | extraction prompt → JSON | yes |
text → code | retag | no |
code → text | retag | no |
structured_json → text | json.dumps | no |
stream → text | join tokens | no |
document → text | passthrough | no |
Extend it with register_transform(SOURCE, TARGET, fn) and a row in the compatibility map in weaveflow/types/primitives.py.
Capability-tag vocabulary
Tags are free-form semantic labels, but a shared vocabulary improves match quality. The Router ranks candidates by tag overlap (swap in embedding similarity via score_fn).
Recommended tag families
| Family | Example tags |
|---|---|
| Function | summarization, extraction, classification, translation, generation, review, routing |
| Domain | web_search, code, legal, medical, finance, support |
| Modality | vision, audio, speech, document |
| Language | english, arabic, spanish, multilingual |
| I/O shape | rag, structured_output, streaming |
Conventions
- Lowercase,
snake_case, singular where natural (web_search, notWebSearches). - Prefer a function tag and a domain/modality tag (
["summarization", "legal"]). - Don't encode the LLM or framework in a tag. That's private to the agent.
Reference agents
A minimal starter catalog you can build against (see examples/):
| Agent | input → output | Tags |
|---|---|---|
cleaner | text → text | ["text", "clean"] |
counter | text → structured_json | ["text", "stats"] |
summarizer | text → text | ["summarization"] |