Skip to main content

Dynamic context management for tool-using AI agents

Project description

contextweaver

Dynamic context management for tool-using AI agents.

contextweaver solves the context window problem: as tool catalogs grow and conversations accumulate history, naive concatenation blows past token limits. contextweaver provides phase-specific budgeted context compilation, a context firewall for large tool outputs, result envelopes with structured fact extraction, and bounded-choice routing over large tool catalogs via DAG + beam search.

Features

  • Context Engine — seven-stage pipeline that compiles a phase-aware, budget-constrained prompt from the event log.
  • Context Firewall — intercepts large tool outputs, stores raw data out-of-band, and injects compact summaries.
  • Routing Engine — navigates catalogs of 100+ tools via a bounded DAG so the LLM only sees a focused shortlist.
  • Protocol Adapters — first-class adapters for MCP and A2A protocols.
  • Zero Dependencies — pure Python ≥ 3.10, stdlib only.
  • Deterministic — identical inputs always produce identical outputs.

Installation

pip install contextweaver

Or install from source:

git clone https://github.com/dgenio/contextweaver.git
cd contextweaver
pip install -e ".[dev]"

Quick start

from contextweaver.context.manager import ContextManager
from contextweaver.types import ContextItem, ItemKind, Phase

mgr = ContextManager()
mgr.ingest(ContextItem(id="u1", kind=ItemKind.user_turn, text="How many users?"))
mgr.ingest(ContextItem(id="tc1", kind=ItemKind.tool_call, text="db_query('SELECT COUNT(*) FROM users')", parent_id="u1"))
mgr.ingest(ContextItem(id="tr1", kind=ItemKind.tool_result, text="count: 1042", parent_id="tc1"))

pack = mgr.build_sync(phase=Phase.answer, query="user count")
print(pack.prompt)       # budget-aware compiled context
print(pack.stats)        # what was kept, dropped, deduplicated

Routing large tool catalogs

from contextweaver.routing.catalog import Catalog, load_catalog_json
from contextweaver.routing.tree import TreeBuilder
from contextweaver.routing.router import Router

items = load_catalog_json("catalog.json")
catalog = Catalog()
for item in items:
    catalog.register(item)

graph = TreeBuilder(max_children=10).build(catalog.all())
router = Router(graph, items=catalog.all(), beam_width=3, top_k=5)
result = router.route("send a reminder email about unpaid invoices")
print(result.candidate_ids)

CLI

contextweaver ships with a CLI for quick experimentation:

contextweaver demo                          # end-to-end demonstration
contextweaver init                          # scaffold config + sample catalog
contextweaver build --catalog c.json --out g.json  # build routing graph
contextweaver route --graph g.json --query "send email"
contextweaver print-tree --graph g.json
contextweaver ingest --events session.jsonl --out session.json
contextweaver replay --session session.json --phase answer

Examples

Script Description
minimal_loop.py Basic event ingestion → context build
tool_wrapping.py Context firewall in action
routing_demo.py Build catalog → route queries → choice cards
before_after.py Side-by-side token comparison: WITHOUT vs WITH contextweaver
mcp_adapter_demo.py MCP adapter: tool conversion, session loading, firewall
a2a_adapter_demo.py A2A adapter: agent cards, multi-agent sessions

Run all examples:

make example

Documentation

  • Architecture — package layout, pipeline stages, design principles
  • Concepts — ContextItem, phases, firewall, ChoiceGraph, etc.
  • MCP Integration — adapter functions, JSONL format, end-to-end example
  • A2A Integration — adapter functions, multi-agent sessions

Development

make fmt      # format (ruff)
make lint     # lint (ruff)
make type     # type-check (mypy)
make test     # run tests (pytest)
make example  # run all examples
make demo     # run the built-in demo
make ci       # all of the above

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

contextweaver-0.1.1.tar.gz (95.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

contextweaver-0.1.1-py3-none-any.whl (85.4 kB view details)

Uploaded Python 3

File details

Details for the file contextweaver-0.1.1.tar.gz.

File metadata

  • Download URL: contextweaver-0.1.1.tar.gz
  • Upload date:
  • Size: 95.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for contextweaver-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a2ea8b68478f89e59ea4d088d7518d1750a7327a4aff16b94b9f0abdd0dab68a
MD5 d825a4486878f7541156e8e93ea9231e
BLAKE2b-256 f38f59a7b95aefab719a444d21d21a7294372473fa4a2f758ed8b1a8e7b93901

See more details on using hashes here.

Provenance

The following attestation bundles were made for contextweaver-0.1.1.tar.gz:

Publisher: publish.yml on dgenio/contextweaver

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file contextweaver-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: contextweaver-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 85.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for contextweaver-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0b2beed240d95ee1525b4578ebdece421d2610b8183f49142c6c552add5380b9
MD5 a35b1293affc8a66ca236204c2df2eda
BLAKE2b-256 f7510d5350264c2224426232db9b057f64b1164f5075422c0c1ef418c013e384

See more details on using hashes here.

Provenance

The following attestation bundles were made for contextweaver-0.1.1-py3-none-any.whl:

Publisher: publish.yml on dgenio/contextweaver

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page