Architecture Plan¶
This page records the local plan for agentic-fabric. It is the
source of truth for agent runtime architecture in this repository.
Boundary¶
agentic-fabric owns agent and fabric agent orchestration:
discovery and manifest loading
universal fabric agent composition
runner adapters for optional agent frameworks
tool resolution for built-in, MCP-style, fully qualified, and vendor-backed tools
agent-facing tool catalogs built from
vendor-fabriccapability metadataagent capability dispatch over the data and vendor layers
pytest support for agent runtime tests
extended-data owns base data primitives, logging, input handling,
files, redaction, and generic workflows. vendor-fabric owns vendor
API connectors, provider-backed sync, SecretSync Python facade/capability
surfaces, provider capability metadata, and provider dispatch.
AgenticData¶
AgenticData extends the vendor layer in the same way VendorData
extends ExtendedData. The full-stack inheritance line is:
ExtendedData -> VendorData -> AgenticData
AgenticData owns agent runtime context. It does not reimplement data
containers or provider sync. Those behaviors come from inherited layers
when vendor-fabric is installed, and from an import-safe fallback
otherwise.
from agentic_fabric import AgenticData
session = AgenticData({"task": "summarize"})
session.use_runtime("langgraph", strict=False)
That shape lets the agent layer carry data, provider, and runtime context together:
session.register_fabric_agent("repo_summarizer", fabric_agent_config)
result = session.run_fabric_agent("repo_summarizer", repo="jbcom/extended-data")
Agent Capability Registry¶
Agent and runtime capabilities should use normal Python mechanisms:
typing.Protocolfor runner and tool contractsabstract base classes for shared runner behavior
@agent_capability(...)or@tool_capability(...)decorators on concrete runtime/tool methods__init_subclass__to collect capability metadata through inheritanceread-only capability mappings for inspection and deterministic dispatch
__getattr__only as a convenience over declared capabilities__dir__for autocomplete and developer inspection
The implementation lives in agentic_fabric.capabilities:
@agent_capability(...)@runtime_capability(...)@tool_capability(...)AgentCapabilitySpecAgentCapabilityProviderMixin
Do not use custom dunder capability names. The capability registry is plain Python metadata collected at class creation.
Runtime Selection¶
Runtime frameworks are optional and should be discovered lazily. The core package should import without CrewAI, LangGraph, Strands, or vendor SDKs being imported eagerly.
Runtime metadata lives in agentic_fabric.runners.registry. The public
compatibility API remains in agentic_fabric.core.decomposer:
detect_framework(), get_runner(), get_available_frameworks(),
get_framework_info(), is_framework_available(),
compose_fabric_agent(), run_fabric_agent_auto(),
get_cli_runner(), get_available_cli_runners(), and
is_cli_runner_available().
Runtime selection follows this precedence:
an explicit runtime argument from the caller
a runtime already active on
AgenticDataa runtime required by the fabric agent manifest or framework-specific config directory
the first installed runtime in documented priority order
a clear unavailable-runtime error with install guidance
Manifest-required runtimes are also compatibility constraints. If a caller
explicitly requests langgraph for a fabric agent that requires
crewai, or an active runtime conflicts with that requirement,
AgenticData raises a configuration error rather than silently selecting
another framework.
Vendor Tooling¶
Vendor-backed tools should go through AgenticData, VendorData,
and vendor-fabric capabilities. Agent code should not call cloud SDKs
directly. Agent tools that need repository files, Slack messages, Vault
secrets, or S3 objects should route through provider capabilities
declared by vendor-fabric.
Lazy vendor tool references are supported with
vendor://provider/operation and vendor:provider:operation names.
When vendor-fabric is installed, AgenticData.vendor_tools() reads
VendorData.capabilities() and returns lazy agent-facing wrappers for
those provider operations.
Testing Package¶
pytest-agentic-fabric is a sibling package in this repository. It
provides runtime availability fixtures, framework mocking helpers, minimal
fabric agent/workspace fixtures, credential skip fixtures, and opt-in E2E
controls.
Provider fixtures belong in pytest-vendor-fabric. Base data fixtures
belong in pytest-extended-data.
Validation Contract¶
Every public behavior needs tests and docs in the same change. Python 3.11, 3.12, 3.13, and 3.14 must pass without skipped missing interpreters.