{"id":51193044,"url":"https://github.com/angelnicolasc/forge","last_synced_at":"2026-06-27T17:30:53.452Z","repository":{"id":358552026,"uuid":"1210788309","full_name":"angelnicolasc/forge","owner":"angelnicolasc","description":"Universal Agent Harness — wrap any LangGraph / CrewAI / AutoGen flow. Real-time cost tracking, cross-run memory, OpenTelemetry tracing, and an opt-in self-evolution loop.","archived":false,"fork":false,"pushed_at":"2026-05-15T14:08:09.000Z","size":1417,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-18T00:17:34.144Z","etag":null,"topics":["agent-harness","agents","autogen","crewai","finops","harness","langgraph","llm","llm-agent","multi-agent","opentelemetry","orchestration","python","self-evolving"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/angelnicolasc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-14T18:56:44.000Z","updated_at":"2026-05-15T14:19:31.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/angelnicolasc/forge","commit_stats":null,"previous_names":["angelnicolasc/forge"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/angelnicolasc/forge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelnicolasc%2Fforge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelnicolasc%2Fforge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelnicolasc%2Fforge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelnicolasc%2Fforge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/angelnicolasc","download_url":"https://codeload.github.com/angelnicolasc/forge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/angelnicolasc%2Fforge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34862627,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent-harness","agents","autogen","crewai","finops","harness","langgraph","llm","llm-agent","multi-agent","opentelemetry","orchestration","python","self-evolving"],"created_at":"2026-06-27T17:30:52.657Z","updated_at":"2026-06-27T17:30:53.442Z","avatar_url":"https://github.com/angelnicolasc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"1500\" height=\"276\" alt=\"forge-banner\" src=\".github/assets/forge_banner.jpg\" /\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n\u003cp\u003e\u003cstrong\u003eUniversal Agent Harness — Drop your agents. Watch them evolve, remember and win.\u003c/strong\u003e\u003c/p\u003e\n\n[![CI](https://github.com/angelnicolasc/forge/actions/workflows/ci.yml/badge.svg)](https://github.com/angelnicolasc/forge/actions/workflows/ci.yml)\n[![PyPI](https://img.shields.io/pypi/v/forge-os.svg)](https://pypi.org/project/forge-os/)\n[![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-orange.svg)](LICENSE)\n[![Tests](https://img.shields.io/badge/tests-420%2B%20passing-brightgreen.svg)](#)\n[![Coverage](https://img.shields.io/badge/coverage-%E2%89%A577%25-brightgreen.svg)](#)\n\n\u003cbr/\u003e\n\n\u003c/div\u003e\n\n---\n\n## What is Forge?\n\nForge is an **open-source, enterprise-grade agent harness** that wraps any multi-agent flow and gives it real-time cost tracking, cross-run memory, OpenTelemetry tracing, spec-driven governance, and an opt-in self-evolution loop — in one command.\n\n\u003e Every feature in this document maps to a test. See [docs/feature-map.md](docs/feature-map.md). Items not yet shipped live in the [Roadmap](#roadmap).\n\n```bash\npip install forge-os\nforge wrap my_langgraph_flow.py --input '{\"query\": \"What is RAG?\"}'\n```\n\n```\n⚡ FORGE — Universal Agent Harness\n  Drop your agents. Watch them evolve, remember and win.\n\n✓ Detected: langgraph  (11ms)\n\nRunning task_id=a3f8b2c1...\n\n╭─ Run Info ──────────────────────────────────────╮\n│ Status    ✓ COMPLETED                           │\n│ Task ID   a3f8b2c1d4e5...                       │\n│ Duration  4.2s                                  │\n╰─────────────────────────────────────────────────╯\n\n╭─ Cost Breakdown ────────────────────────────────╮\n│ agent: researcher   $0.00420                    │\n│ agent: writer       $0.00180                    │\n│ TOTAL               $0.00600                    │\n╰─────────────────────────────────────────────────╯\n\n╭─ Agent Topology ────────────────────────────────╮\n│ ├── [research] Researcher  (claude-sonnet)      │\n│ └── [writing]  Writer      (claude-haiku)       │\n╰─────────────────────────────────────────────────╯\n```\n\n---\n\n## Why Forge?\n\n| | Build from scratch | Forge |\n|---|:---:|:---:|\n| Wrap any framework | ✗ Manual | ✓ 1 command |\n| Real-time cost tracking | ✗ Manual | ✓ Per-agent, per-model |\n| Self-optimization loop | ✗ You build it | ✓ Opt-in, snapshot-safe |\n| Cross-run memory | ✗ None | ✓ Hybrid vector + graph + symbolic |\n| Tool governance (MCP) | ✗ None | ✓ 8-layer pipeline |\n| Spec-driven quality gates | ✗ Manual | ✓ SLSA Level 2 attestation |\n| Audit trail | ✗ Log files | ✓ Full provenance chain |\n| Production-ready | ✗ Weeks | ✓ Day 1 |\n\n---\n\n## Features\n\n### 🎯 Universal Drop-in Adapter\n\nWraps **LangGraph**, **CrewAI**, **AutoGen**, or any async callable. No migration required. Framework is auto-detected from imports.\n\n### 🧬 Self-Evolution Loop\n\nEvery run generates telemetry. The evolution loop analyzes it and proposes (or auto-applies) mutations:\n- **Prompt rewrites** — fix recurring error patterns via LLM-structured output (`PromptRewriteMutator`)\n- **Model swaps** — downgrade expensive models for lower-complexity tasks (`ModelSwapMutator`)\n- **Agent culling** — remove underperforming agents with atomic rollback via `TopologySnapshot` (`AgentCullMutator`)\n- **Parameter tuning** — adjust timeouts, max steps, thresholds (`ParameterTuneMutator`)\n\nAuto-trigger is **off by default**. Three consecutive failed mutations open a circuit breaker and suspend the loop until an operator calls `forge evolve resume` or `orchestrator.resume_evolution()`.\n\n```bash\nforge evolve run my_flow.py --mode auto\n# ⚗  Proposed: Swap researcher from claude-opus → claude-sonnet\n# ↳ Applied. Fitness: 0.72 → 0.91 (+0.19)\n\nforge evolve status          # read the journal\nforge evolve resume my_flow.py   # re-arm the breaker\n```\n\n### 🧠 Living Collaborative Memory\n\nA hybrid knowledge base that accumulates and retrieves knowledge across runs:\n- **Vector layer** (ChromaDB + sentence-transformers): semantic search over all agent outputs\n- **Graph layer** (NetworkX, SQLite-backed WAL): entity-relationship traversal with temporal validity\n- **Symbolic layer**: forward-chaining rule engine for deterministic business rules that override statistical retrieval\n- **Reciprocal Rank Fusion**: unified scoring across all three layers via `HybridMemory`\n- **Full provenance**: every entry carries creator, version, and evidence chain\n- **Vector-clock conflict resolution** for concurrent writes\n\n```bash\nforge memory query \"optimization techniques the researcher found last week\"\nforge memory ingest my_document.txt --tag topic=RAG\nforge memory status\n```\n\n### 📊 Observability + FinOps\n\n- OpenTelemetry tracing with per-agent spans — wire to any OTLP-compatible collector (Grafana Tempo, Datadog, Jaeger)\n- Real-time cost breakdown by agent and model — thinking tokens and cached input tokens tracked separately\n- Three-tier pricing resolution: `FORGE_PRICING_TABLE_PATH` → `~/.forge/pricing.json` (7-day TTL) → bundled table; unknown models warn loudly instead of silently billing $0\n- Budget enforcement (`--budget 1.50`) — runs cancelled at the ceiling\n- REST + SSE API for live metrics and run traces\n\n```bash\nforge observe                  # open the live dashboard\nforge doctor                   # diagnose your installation\nforge doctor update-pricing    # refresh the local pricing cache\n```\n\n### 🔧 MCP Meta-Orchestrator\n\nRoutes, secures, and budgets all Model Context Protocol tool calls through an 8-layer governance pipeline:\n1. Tool routing (O(1) bidirectional index)\n2. Policy enforcement (deny-by-default allowlist per caller)\n3. Per-tool call-count budget\n4. TTL result cache (SHA-256 keyed, normalized arg order)\n5. Circuit breaker\n6. Upstream dispatch\n7. Secret redaction (API keys, JWTs, PATs, Bearer tokens)\n8. Post-call telemetry\n\n```bash\nforge mcp list-tools           # show available tools\nforge mcp call \u003ctool\u003e \u003cargs\u003e   # invoke a tool\nforge mcp serve                # expose Forge memory + evolution as MCP tools\nforge mcp status               # inspect budget and cache state\n```\n\n### 📋 Rules Engine\n\nContext-aware rule packs with a fixed precedence lattice and compile-time scope analysis:\n- **Deny \u003e Require \u003e Suggest** — precedence enforced at merge time, not at inference\n- **Scope intersection detection** — overlapping glob patterns flagged at lint time (O(N²), not per-request)\n- **YAML round-trip serialization** — author, version, and diff rule packs as code\n- Conflict resolution strategies: `MOST_SPECIFIC_WINS` or `PRIORITY_FIRST_MATCH`\n\n```bash\nforge rules validate my_rules.yaml\nforge rules lint my_rules.yaml       # find scope overlaps\nforge rules explain --path \"src/**\"  # show which rules apply\nforge rules diff v1.yaml v2.yaml\n```\n\n### 🎓 Skills Runtime\n\nIntent-based skill dispatch with structured SKILL.md loading:\n- **SKILL.md format**: YAML frontmatter with name, description, examples, parameters, tools, timeout, budget, tags — compatible with Claude Code skill ecosystem\n- **IntentDispatcher**: dual-threshold confidence enforcement before invocation\n- **Child scope isolation**: each skill invocation gets its own `agent_id` scoped to the parent `run_id`\n- **Call-count budgets** per skill, configurable timeouts via `asyncio.wait_for`\n\n```bash\nforge skills list              # show loaded skills\nforge skills explain \u003cname\u003e    # describe parameters and examples\nforge skills run \u003cname\u003e \u003cargs\u003e # invoke a skill\n```\n\n### 📐 Spec-Driven Development\n\nStructured acceptance criteria, deterministic attestation, and evolution guardrails:\n- **SpecVerifier**: ASSERTION, REGEX, CONTAINS checks with per-criterion weighting\n- **SpecAttester**: SLSA Level 2-inspired provenance with canonical SHA-256 spec hash\n- **SpecConstraintGuard**: intercepts evolution mutations and raises `ConstraintViolationError` before any spec-breaking change is applied\n- YAML authoring with full round-trip serialization\n\n```bash\nforge spec init my_feature.yaml    # scaffold a new spec\nforge spec verify --spec my_feature.yaml --result run.json\nforge spec attest --spec my_feature.yaml   # generate provenance\n```\n\n### 🔍 Review Agents \u0026 Policy Gates\n\nParallel review pipeline with severity-based blocking:\n- **P0** — blocks unconditionally (security, data loss)\n- **P1** — blocks by default (quality gates)\n- **P2–P3** — observational findings\n- **CascadingReviewer**: heuristic reviewers run first; LLM reviewers are skipped if blocking findings already exist (saves tokens)\n- **Four lifecycle hooks**: `on_plan`, `pre_apply`, `pre_stop`, `pre_merge`\n- Bundled reviewers: `ErrorRateReviewer`, `CostCeilingReviewer`, `SpecConstraintReviewer`, `StatusReviewer`\n\n```bash\nforge review run --context run.json\nforge review show --id \u003creview_id\u003e\n```\n\n### 🩺 forge doctor\n\nDiagnose a local install in one command: Python version, installed adapter extras, active memory backends, environment variable state, and optional network egress (`--network`).\n\n---\n\n## Architecture\n\n```\n┌───────────────────────────────────────────────────────────────────────┐\n│                        forge wrap my_flow.py                          │\n└───────────────────────────────┬───────────────────────────────────────┘\n                                │\n                     ┌──────────▼──────────┐\n                     │   MetaOrchestrator  │   forge-os-core\n                     │   Detect + Instrument│\n                     │   + EventBus + Run  │\n                     └──┬──────────────────┘\n                        │\n        ┌───────────────┼──────────────────────┐\n        │               │                      │\n   ┌────▼────┐    ┌──────▼──────┐   ┌──────────▼───────────────┐\n   │ Adapter │    │   Observe   │   │  Living Collaborative    │\n   │         │    │ OTel + Cost │   │  Memory                  │\n   │ Lang    │    │ REST + SSE  │   │  Vector+Graph+Symbolic   │\n   │ Graph / │    └─────────────┘   │  HybridMemory + RRF      │\n   │ CrewAI /│                      └──────────────────────────┘\n   │ AutoGen │\n   └─────────┘\n        │\n   ┌────▼────────────────────────────────────────────────────────┐\n   │   Governance Layer                                          │\n   │                                                             │\n   │  ┌────────────┐  ┌──────────────┐  ┌──────────────────┐   │\n   │  │ forge-rules│  │  forge-spec  │  │  forge-review    │   │\n   │  │ Deny/Req/  │  │ SpecVerifier │  │ P0–P3 severity   │   │\n   │  │ Suggest    │  │ + Attester   │  │ CascadingReviewer│   │\n   │  └────────────┘  └──────────────┘  └──────────────────┘   │\n   │                                                             │\n   │  ┌────────────┐  ┌──────────────┐                          │\n   │  │ forge-mcp  │  │ forge-skills │                          │\n   │  │ 8-layer    │  │ IntentDispatch│                         │\n   │  │ pipeline   │  │ + SKILL.md   │                          │\n   │  └────────────┘  └──────────────┘                          │\n   └─────────────────────────────────────────────────────────────┘\n        │\n   ┌────▼─────────────────────────┐\n   │   Evolution Loop             │   forge-os-core\n   │  Observe → Hypothesize       │\n   │  → Mutate → Evaluate         │\n   │  → Commit / Rollback         │\n   └──────────────────────────────┘\n```\n\nFull write-up in [docs/architecture.md](docs/architecture.md).\n\n---\n\n## Installation\n\n```bash\n# Core harness + CLI (LangGraph, CrewAI, AutoGen adapters require extras)\npip install forge-os\n\n# With framework adapters\npip install 'forge-os[langgraph]'\npip install 'forge-os[crewai]'\npip install 'forge-os[autogen]'\npip install 'forge-os[all]'        # all adapters\n\n# Governance and tooling extras\npip install 'forge-os[rules]'      # context-aware rule packs\npip install 'forge-os[mcp]'        # MCP meta-orchestrator\npip install 'forge-os[skills]'     # skills runtime\npip install 'forge-os[spec]'       # spec-driven development\npip install 'forge-os[review]'     # review agents + policy gates\n```\n\n**Requirements**: Python 3.11+. No Docker required for local development.\n\n---\n\n## Quickstart\n\n### 1. Wrap an existing flow\n\n```python\n# my_flow.py\nfrom langgraph.graph import StateGraph, END\nfrom typing import TypedDict\n\nclass State(TypedDict):\n    query: str\n    answer: str\n\ndef researcher(state: State) -\u003e State:\n    return {\"answer\": f\"Research: {state['query']}\"}\n\ngraph = StateGraph(State)\ngraph.add_node(\"researcher\", researcher)\ngraph.set_entry_point(\"researcher\")\ngraph.add_edge(\"researcher\", END)\napp = graph.compile()\n```\n\n```bash\nforge wrap my_flow.py --input '{\"query\": \"What is RAG?\"}'\n```\n\n### 2. Enable memory and evolution\n\n```bash\nforge wrap my_flow.py \\\n  --input '{\"query\": \"Latest agent harness papers\"}' \\\n  --evolution\n```\n\n### 3. Use the Python SDK\n\n```python\nimport asyncio\nfrom forge_core.harness import MetaOrchestrator\nfrom forge_core.types import TaskEnvelope\n\nasync def main():\n    orchestrator = MetaOrchestrator()\n    await orchestrator.load(\"my_flow.py\")\n\n    result = await orchestrator.run(\n        TaskEnvelope(input={\"query\": \"What is Forge?\"})\n    )\n    print(f\"Cost: ${result.cost.total_cost:.5f}\")\n    print(f\"Duration: {result.duration_ms:.0f}ms\")\n    print(f\"Output: {result.output}\")\n\nasyncio.run(main())\n```\n\n### 4. Add a spec and enforce it through evolution\n\n```bash\nforge spec init acceptance.yaml\n# edit acceptance.yaml — define ASSERTION/REGEX/CONTAINS criteria\n\nforge wrap my_flow.py --spec acceptance.yaml --evolution\n# SpecConstraintGuard now blocks any mutation that would violate the spec\n```\n\n---\n\n## Packages\n\nForge ships as eleven composable packages. Installing `forge-os` pulls the core set; optional extras add the governance and tooling layers.\n\n| Package | PyPI | Description |\n|---------|------|-------------|\n| `forge-os-core` | [![PyPI](https://img.shields.io/pypi/v/forge-os-core.svg)](https://pypi.org/project/forge-os-core/) | Types, protocols, `MetaOrchestrator`, evolution loop + FSM, circuit breaker |\n| `forge-os-memory` | [![PyPI](https://img.shields.io/pypi/v/forge-os-memory.svg)](https://pypi.org/project/forge-os-memory/) | Living Collaborative Memory — vector + graph + symbolic with RRF fusion |\n| `forge-os-adapters` | [![PyPI](https://img.shields.io/pypi/v/forge-os-adapters.svg)](https://pypi.org/project/forge-os-adapters/) | LangGraph, CrewAI, AutoGen, and generic async callable adapters |\n| `forge-os-observe` | [![PyPI](https://img.shields.io/pypi/v/forge-os-observe.svg)](https://pypi.org/project/forge-os-observe/) | OpenTelemetry tracing, three-tier FinOps cost model, REST + SSE API |\n| `forge-os-cli` | [![PyPI](https://img.shields.io/pypi/v/forge-os-cli.svg)](https://pypi.org/project/forge-os-cli/) | `forge` command — 10 command groups, 30+ subcommands |\n| `forge-os-mcp` | [![PyPI](https://img.shields.io/pypi/v/forge-os-mcp.svg)](https://pypi.org/project/forge-os-mcp/) | MCP meta-orchestrator with 8-layer governance pipeline |\n| `forge-rules` | *coming soon* | Context-aware rule packs — Deny/Require/Suggest with conflict resolution |\n| `forge-skills` | *coming soon* | Intent-based skill dispatch and SKILL.md loading |\n| `forge-spec` | *coming soon* | Spec-driven acceptance criteria and SLSA Level 2 attestation |\n| `forge-review` | *coming soon* | Parallel review agents with P0–P3 severity and cascading policy gates |\n| `forge-os` | [![PyPI](https://img.shields.io/pypi/v/forge-os.svg)](https://pypi.org/project/forge-os/) | Meta-package — installs core, CLI, adapters, memory, and observe |\n\n---\n\n## Environment Variables\n\n| Variable | Default | Description |\n|---|---|---|\n| `FORGE_ENABLE_EVOLUTION_AUTO` | `0` | Auto-apply evolution mutations without human approval. Off by default; enable only in trusted environments. |\n| `FORGE_ENABLE_LLM_JUDGE` | `0` | Score run quality with an LLM call after each run. **Adds ~1 LLM call per run.** Expected cost: ~$0.001/evaluation at Haiku pricing. |\n| `FORGE_LLM_JUDGE_MODEL` | `claude-haiku-4-20250514` | Model used by the LLM-as-judge scorer when `FORGE_ENABLE_LLM_JUDGE=1`. |\n| `FORGE_LLM_CIRCUIT_BREAKER` | `1` | Enable the LLM circuit breaker (trips after 5 consecutive failures; 30s recovery window). |\n| `FORGE_ENABLE_MEMORY_INJECTION` | `0` | Inject relevant memory context into each run before agent execution. |\n| `FORGE_ENABLE_LLM_ENTITY_EXTRACTION` | `0` | Use an LLM to extract entities for the graph memory layer after each run. |\n| `FORGE_INTENT_MODEL` | *(configured)* | Model used by the `IntentClassifier` for skill and rule routing. |\n| `FORGE_INTENT_CONFIDENCE_THRESHOLD` | *(configured)* | Minimum confidence score before the intent classifier dispatches a skill. |\n| `FORGE_OBSERVE_MAX_SSE_SUBSCRIBERS` | `50` | Maximum concurrent SSE subscribers on the live event stream. Returns HTTP 503 beyond this limit. |\n| `FORGE_API_ALLOWED_ORIGINS` | *(empty)* | Comma-separated CORS origins for the observe API. Empty = same-origin only. |\n| `FORGE_PRICING_TABLE_PATH` | *(empty)* | Path to a JSON pricing table that overrides the bundled prices. |\n| `FORGE_PRICING_TABLE_URL` | *(configured)* | URL used by `forge doctor update-pricing` to refresh the local pricing cache. |\n| `FORGE_OBSERVE_AGENT_BASE_URL` | *(empty)* | Base URL published in the A2A Agent Card at `/.well-known/agent.json`. |\n\n---\n\n## Roadmap\n\n**v0.2.0 is live** — the full governance platform (forge-spec, forge-review, forge-rules, forge-skills, forge-os-mcp) ships in this release alongside the core harness, adapters, memory, and observability stack.\n\nPlanned for upcoming releases:\n\n- **Web dashboard UI** — the REST + SSE backend is live; a first-party web UI is planned for v0.3.x.\n- **Production memory backends** — Neo4j and Qdrant adapter scaffolding exists in forge-os-memory; production-hardened backends land in v0.3.x.\n- **First-party OTLP integration test** — OTLP export is wired; a collector-level smoke test against a real Grafana Tempo instance is planned for v0.3.x.\n- **RBAC and multi-tenancy** — per-team rule pack isolation and identity-aware budget enforcement, targeted for v0.4.x.\n- **Agent-to-agent payments (A2A)** — exploratory; no committed timeline.\n\nAnything that graduates to shipped must land with a row in [docs/feature-map.md](docs/feature-map.md).\n\n---\n\n## Contributing\n\nIssues, bug reports, and pull requests are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) and open an issue at [github.com/angelnicolasc/forge/issues](https://github.com/angelnicolasc/forge/issues).\n\nSecurity reports: please read [SECURITY.md](SECURITY.md).\n\n---\n\n## License\n\nApache 2.0 — enterprise-friendly, commercial use allowed. See [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelnicolasc%2Fforge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fangelnicolasc%2Fforge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fangelnicolasc%2Fforge/lists"}