{"id":47257685,"url":"https://github.com/jovancoding/network-ai","last_synced_at":"2026-05-10T11:03:16.154Z","repository":{"id":336481049,"uuid":"1149800060","full_name":"Jovancoding/Network-AI","owner":"Jovancoding","description":"Traffic light for AI Agents and TypeScript/Node multi-agent orchestrator with shared state, guardrails, and adapters for 17 AI frameworks","archived":false,"fork":false,"pushed_at":"2026-04-21T00:08:40.000Z","size":1647,"stargazers_count":40,"open_issues_count":2,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-21T02:25:18.329Z","etag":null,"topics":["agent-framework","agent-orchestration","ai-agents","autogen","blackboard","blackboard-architecture","crewai","langchain","llm","mcp","multi-agent","nemoclaw","nodejs","openclaw","orchestration","typescript","workflow-engine"],"latest_commit_sha":null,"homepage":"https://network-ai.org/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Jovancoding.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":"AUDIT_LOG_SCHEMA.md","citation":null,"codeowners":null,"security":".github/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},"funding":{"github":["Jovancoding"]}},"created_at":"2026-02-04T14:37:22.000Z","updated_at":"2026-04-21T00:08:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Jovancoding/Network-AI","commit_stats":null,"previous_names":["jovansapfioneer/network-ai","jovancoding/network-ai"],"tags_count":110,"template":false,"template_full_name":null,"purl":"pkg:github/Jovancoding/Network-AI","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jovancoding%2FNetwork-AI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jovancoding%2FNetwork-AI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jovancoding%2FNetwork-AI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jovancoding%2FNetwork-AI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Jovancoding","download_url":"https://codeload.github.com/Jovancoding/Network-AI/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Jovancoding%2FNetwork-AI/sbom","scorecard":{"id":1243588,"data":{"date":"2026-02-18T21:31:24Z","repo":{"name":"github.com/jovanSAPFIONEER/Network-AI","commit":"d5a43ef1a13e1ef7e1cc580c12a49bb06bce19c7"},"scorecard":{"version":"v5.0.0","commit":"ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4"},"score":5.2,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#binary-artifacts"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":-1,"reason":"no pull request found","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#ci-tests"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#code-review"}},{"name":"Contributors","score":0,"reason":"project has 0 contributing companies or organizations -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#contributors"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#dependency-update-tool"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#license"}},{"name":"Maintained","score":0,"reason":"project was created in last 90 days. please review its contents carefully","details":["Warn: Repository was created in last 90 days."],"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":4,"reason":"dependency not pinned by hash detected -- score normalized to 4","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:22: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/scorecard.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/scorecard.yml:29: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/scorecard.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/scorecard.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/scorecard.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/jovanSAPFIONEER/Network-AI/scorecard.yml/main?enable=pin","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   2 out of   2 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#pinned-dependencies"}},{"name":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#sast"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#security-policy"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#signed-releases"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:16","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecard.yml:19","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecard.yml:20","Warn: no topLevel permission defined: .github/workflows/ci.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:10","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ea7e27ed41b76ab879c862fa0ca4cc9c61764ee4/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2026-02-19T00:57:05.013Z","repository_id":336481049,"created_at":"2026-02-19T00:57:05.021Z","updated_at":"2026-02-19T00:57:05.021Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32191873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T15:28:30.493Z","status":"ssl_error","status_checked_at":"2026-04-23T15:28:29.972Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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-framework","agent-orchestration","ai-agents","autogen","blackboard","blackboard-architecture","crewai","langchain","llm","mcp","multi-agent","nemoclaw","nodejs","openclaw","orchestration","typescript","workflow-engine"],"created_at":"2026-03-14T20:28:45.992Z","updated_at":"2026-05-10T11:03:16.052Z","avatar_url":"https://github.com/Jovancoding.png","language":"TypeScript","funding_links":["https://github.com/sponsors/Jovancoding"],"categories":[],"sub_categories":[],"readme":"# Network-AI\n\n**TypeScript/Node.js multi-agent orchestrator — shared state, guardrails, budgets, and cross-framework coordination**\n\n[![Website](https://img.shields.io/badge/website-network--ai.org-4b9df2?style=flat\u0026logo=web\u0026logoColor=white)](https://network-ai.org/)\n[![CI](https://github.com/Jovancoding/Network-AI/actions/workflows/ci.yml/badge.svg)](https://github.com/Jovancoding/Network-AI/actions/workflows/ci.yml)\n[![CodeQL](https://github.com/Jovancoding/Network-AI/actions/workflows/codeql.yml/badge.svg)](https://github.com/Jovancoding/Network-AI/actions/workflows/codeql.yml)\n[![Release](https://img.shields.io/badge/release-v5.4.1-blue.svg)](https://github.com/Jovancoding/Network-AI/releases)\n[![npm](https://img.shields.io/npm/dw/network-ai.svg?label=npm%20downloads)](https://www.npmjs.com/package/network-ai)\n[![Tests](https://img.shields.io/badge/tests-2976%20passing-brightgreen.svg)](#testing)\n[![Adapters](https://img.shields.io/badge/frameworks-29%20supported-blueviolet.svg)](#adapter-system)\n[![License](https://img.shields.io/badge/license-MIT-brightgreen.svg)](LICENSE)\n[![Socket](https://socket.dev/api/badge/npm/package/network-ai)](https://socket.dev/npm/package/network-ai/overview)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D18.0.0-brightgreen.svg)](https://nodejs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-6.x-3178C6.svg)](https://typescriptlang.org)\n[![ClawHub](https://img.shields.io/badge/ClawHub-network--ai-orange.svg)](https://clawhub.ai/skills/network-ai)\n[![Integration Guide](https://img.shields.io/badge/docs-integration%20guide-informational.svg)](INTEGRATION_GUIDE.md)\n[![Sponsor](https://img.shields.io/badge/sponsor-support%20the%20project-f15bb5.svg)](https://github.com/sponsors/Jovancoding)\n[![Discord](https://img.shields.io/badge/Discord-Join%20Community-5865F2?logo=discord\u0026logoColor=white)](https://discord.gg/Cab5vAxc86)\n[![Glama](https://glama.ai/mcp/servers/Jovancoding/network-ai/badges/score.svg)](https://glama.ai/mcp/servers/Jovancoding/network-ai)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"assets/demo.svg\" alt=\"Network-AI control-plane demo — atomic blackboard, priority preemption, AuthGuardian, FSM governance\" width=\"720\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eIf Network-AI is useful to you, consider \u003ca href=\"https://github.com/Jovancoding/Network-AI\"\u003egiving it a star ⭐\u003c/a\u003e — it helps others find the project.\u003c/b\u003e\n\u003c/p\u003e\n\nNetwork-AI is a TypeScript/Node.js multi-agent orchestrator that adds coordination, guardrails, and governance to any AI agent stack.\n\n- **Shared blackboard with locking** — atomic `propose → validate → commit` prevents race conditions and split-brain failures across parallel agents\n- **Guardrails and budgets** — FSM governance, per-agent token ceilings, HMAC / Ed25519 audit trails, and permission gating\n- **29 adapters** — LangChain (+ streaming), AutoGen, CrewAI, OpenAI Assistants, LlamaIndex, Semantic Kernel, Haystack, DSPy, Agno, MCP, Custom (+ streaming), OpenClaw, A2A, Codex, MiniMax, NemoClaw, APS, Copilot, LangGraph, Anthropic Computer Use, OpenAI Agents SDK, Vertex AI, Pydantic AI, Browser Agent, Hermes (NousResearch Hermes / any OpenAI-compatible endpoint), Orchestrator (hierarchical multi-orchestrator), and RLM (Recursive Language Model / any RLM-compatible HTTP endpoint) — no glue code, no lock-in\n- **Persistent project memory (Layer 3)** — `context_manager.py` injects decisions, goals, stack, milestones, and banned patterns into every system prompt so agents always have full project context\n- **v5.0 modules** — Agent VCR (record/replay), comparison runner, coverage reporter, goal DSL, approval inbox, job queue, gRPC/HTTP transport, playground REPL, adapter test harness, and more\n\n\u003e **The silent failure mode in multi-agent systems:** parallel agents writing to the same key\n\u003e use last-write-wins by default — one agent's result silently overwrites another's mid-flight.\n\u003e The outcome is split-brain state: double-spends, contradictory decisions, corrupted context,\n\u003e no error thrown. Network-AI's `propose → validate → commit` mutex prevents this at the\n\u003e coordination layer, before any write reaches shared state.\n\n**Use Network-AI as:**\n- A **TypeScript/Node.js library** — `import { createSwarmOrchestrator } from 'network-ai'`\n- An **MCP server** — `npx network-ai-server --port 3001`\n- A **CLI** — `network-ai bb get status` / `network-ai audit tail`\n- An **OpenClaw skill** — `clawhub install network-ai`\n\n[**5-minute quickstart →**](QUICKSTART.md) \u0026nbsp;|\u0026nbsp; [**Architecture →**](ARCHITECTURE.md) \u0026nbsp;|\u0026nbsp; [**All adapters →**](#adapter-system) \u0026nbsp;|\u0026nbsp; [**Benchmarks →**](BENCHMARKS.md)\n\n---\n\n## ⚡ Try in 60 Seconds\n\n```bash\nnpm install network-ai\n```\n\n```typescript\nimport { LockedBlackboard } from 'network-ai';\n\nconst board = new LockedBlackboard('.');\nconst id    = board.propose('status', { ready: true }, 'agent-1');\nboard.validate(id, 'agent-1');\nboard.commit(id);\n\nconsole.log(board.read('status'));  // { ready: true }\n```\n\nTwo agents, atomic writes, no race conditions. That's it.\n\nWant the full stress test? **No API key, ~3 seconds:**\n\n```bash\nnpx ts-node examples/08-control-plane-stress-demo.ts\n```\n\nRuns priority preemption, AuthGuardian permission gating, FSM governance, and compliance monitoring — all without a single LLM call.\n\n\u003e If it saves you from a race condition, a ⭐ helps others find it.\n\n---\n\n## What's Included\n\n| | |\n|---|---|\n| ✅ Atomic shared state | `propose → validate → commit` with filesystem mutex — no split-brain |\n| ✅ Token budgets | Hard per-agent ceilings with live spend tracking |\n| ✅ Permission gating | HMAC / Ed25519-signed tokens, scoped per agent and resource |\n| ✅ Append-only audit log | Every write, grant, and transition signed and logged |\n| ✅ 29 framework adapters | LangChain, CrewAI, AutoGen, MCP, Codex, APS, RLM, and 22 more — zero lock-in |\n| ✅ FSM governance | Hard-stop agents at state boundaries, timeout enforcement |\n| ✅ Compliance monitoring | Real-time violation detection (tool abuse, turn-taking, timeouts) |\n| ✅ QA orchestration | Scenario replay, feedback loops, regression tracking, contradiction detection |\n| ✅ Deferred adapter init | Lazy-load adapters on first use — zero startup cost for unused frameworks |\n| ✅ Hook middleware | `beforeExecute` / `afterExecute` / `onError` hooks on any adapter call |\n| ✅ Flow control | Pause / resume / throttle writes on the blackboard |\n| ✅ Skill composition | `chain()` / `batch()` / `loop()` / `verify()` meta-operations over agent calls |\n| ✅ Semantic memory search | BYOE vector store with cosine similarity over blackboard data |\n| ✅ Phase pipeline | Multi-phase workflows with human-in-the-loop approval gates |\n| ✅ Confidence filtering | Multi-agent result scoring, threshold validation, and consensus aggregation |\n| ✅ Matcher-based hooks | Glob patterns on agent/action/tool for targeted hook filtering |\n| ✅ Fan-out / fan-in | Parallel agent spawning with pluggable aggregation strategies |\n| ✅ Agent runtime sandbox | Sandboxed shell execution with policy enforcement and approval gates |\n| ✅ Interactive console | TUI dashboard for live monitoring, agent control, blackboard/budget/FSM management |\n| ✅ Pipe mode | JSON stdin/stdout protocol for programmatic AI-to-orchestrator control |\n| ✅ Strategy agent | Meta-orchestrator with elastic agent pools, workload partitioning, and adaptive scaling |\n| ✅ Goal decomposer | LLM-powered goal → task DAG → parallel execution with `runTeam()` one-liner |\n| ✅ Context Throttler | Prune blackboard keys per agent scope before LLM calls — prevent context pollution |\n| ✅ Partition Planner | Assign non-overlapping focus areas to agents before DAG execution — no redundant research |\n| ✅ Coverage Gate | Recursive refinement loop — re-run decomposer for gaps until coverage score ≥ threshold |\n| ✅ Route Classifier | Short-circuit routing — classify goals as factual lookup vs. complex synthesis before planning |\n| ✅ Goal DSL | YAML/JSON goal definitions with cycle detection and topological compilation |\n| ✅ Agent VCR | Record and replay LLM/agent interactions for deterministic tests |\n| ✅ Comparison runner | Side-by-side adapter comparison with scoring, timing, cost analysis |\n| ✅ Coverage reporter | V8 coverage collection with threshold enforcement |\n| ✅ Job queue | Persistent priority FIFO with retries, crash recovery, pluggable backends |\n| ✅ Approval inbox | Web-accessible approval queue with REST API and SSE streaming |\n| ✅ Transport layer | JSON-RPC 2.0 over HTTP with HMAC auth, TTL, node allowlisting |\n| ✅ Playground REPL | Interactive sandbox with mock agents for rapid prototyping |\n| ✅ Adapter test harness | Parameterized test battery for any adapter implementation |\n| ✅ IAuthValidator | Interface to decouple authorization from concrete AuthGuardian |\n| ✅ TypeScript native | ES2022 strict mode, zero native dependencies |\n\n---\n\n## Why teams use Network-AI\n\n| Problem | How Network-AI solves it |\n|---|---|\n| Race conditions in parallel agents | Atomic blackboard: `propose → validate → commit` with file-system mutex |\n| Agent overspend / runaway costs | `FederatedBudget` — hard per-agent token ceilings with live spend tracking |\n| No visibility into what agents did | HMAC / Ed25519-signed audit log on every write, permission grant, and FSM transition |\n| Locked into one AI framework | 29 adapters — mix LangChain + AutoGen + CrewAI + Codex + MiniMax + NemoClaw + APS + LangGraph + Vertex AI + Hermes + RLM + custom in one swarm |\n| Agents escalating beyond their scope | `AuthGuardian` — scoped permission tokens required before sensitive operations |\n| Agents lack project context between runs | `ProjectContextManager` (Layer 3) — inject decisions, goals, stack, and milestones into every system prompt |\n| No regression tracking on agent output quality | `QAOrchestratorAgent` — scenario replay, feedback loops, cross-agent contradiction detection, historical trend tracking |\n\n---\n\n## Architecture\n\n```mermaid\n%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1e293b', 'primaryTextColor': '#e2e8f0', 'primaryBorderColor': '#475569', 'lineColor': '#94a3b8', 'clusterBkg': '#0f172a', 'clusterBorder': '#334155', 'edgeLabelBackground': '#1e293b', 'edgeLabelColor': '#cbd5e1', 'titleColor': '#e2e8f0'}}}%%\nflowchart TD\n    classDef app        fill:#1e3a5f,stroke:#3b82f6,color:#bfdbfe,font-weight:bold\n    classDef security   fill:#451a03,stroke:#d97706,color:#fde68a\n    classDef routing    fill:#14532d,stroke:#16a34a,color:#bbf7d0\n    classDef quality    fill:#3b0764,stroke:#9333ea,color:#e9d5ff\n    classDef blackboard fill:#0c4a6e,stroke:#0284c7,color:#bae6fd\n    classDef adapters   fill:#064e3b,stroke:#059669,color:#a7f3d0\n    classDef audit      fill:#1e293b,stroke:#475569,color:#94a3b8\n\n    App[\"Your Application\"]:::app\n    App --\u003e|\"createSwarmOrchestrator()\"| SO\n\n    subgraph SO[\"SwarmOrchestrator\"]\n        AG[\"AuthGuardian\\n(HMAC / Ed25519 permission tokens)\"]:::security\n        AR[\"AdapterRegistry\\n(route tasks to frameworks)\"]:::routing\n        QG[\"QualityGateAgent\\n(validate blackboard writes)\"]:::quality\n        QA[\"QAOrchestratorAgent\\n(scenario replay, regression tracking)\"]:::quality\n        BB[\"SharedBlackboard\\n(shared agent state)\\npropose → validate → commit\\nfilesystem mutex\"]:::blackboard\n        AD[\"Adapters — plug any framework in, swap freely\\nLangChain · AutoGen · CrewAI · MCP · LlamaIndex · …\"]:::adapters\n\n        AG --\u003e|\"grant / deny\"| AR\n        AR --\u003e|\"tasks dispatched\"| AD\n        AD --\u003e|\"writes results\"| BB\n        QG --\u003e|\"validates\"| BB\n        QA --\u003e|\"orchestrates\"| QG\n    end\n\n    SO --\u003e AUDIT[\"data/audit_log.jsonl\\n(HMAC / Ed25519-signed)\"]:::audit\n```\n\n\u003e `FederatedBudget` is a standalone export — instantiate it separately and optionally wire it to a blackboard backend for cross-node token budget enforcement.\n\u003e\n\u003e `ProjectContextManager` is a Layer-3 Python helper (`scripts/context_manager.py`) that injects persistent project goals, decisions, and milestones into agent system prompts — see [ARCHITECTURE.md § Layer 3](ARCHITECTURE.md#layer-3--projectcontextmanager).\n\n→ [Full architecture, FSM journey, and handoff protocol](ARCHITECTURE.md)\n\n---\n\n## Install\n\n```bash\nnpm install network-ai\n```\n\nNo native dependencies, no build step. Adapters are dependency-free (BYOC — bring your own client).\n\n---\n\n## Use as MCP Server\n\nStart the server (no config required, zero dependencies):\n\n```bash\nnpx network-ai-server --port 3001\n# or from source:\nnpx ts-node bin/mcp-server.ts --port 3001\n```\n\nThen wire any MCP-compatible client to it.\n\n**Claude Desktop** — add to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"network-ai\": {\n      \"url\": \"http://localhost:3001/sse\"\n    }\n  }\n}\n```\n\n**Cursor / Cline / any SSE-based MCP client** — point to the same URL:\n\n```json\n{\n  \"mcpServers\": {\n    \"network-ai\": {\n      \"url\": \"http://localhost:3001/sse\"\n    }\n  }\n}\n```\n\nVerify it's running:\n\n```bash\ncurl http://localhost:3001/health   # { \"status\": \"ok\", \"tools\": \u003cn\u003e, \"uptime\": \u003cms\u003e }\ncurl http://localhost:3001/tools    # full tool list\n```\n\n**Tools exposed over MCP:**\n- `blackboard_read` / `blackboard_write` / `blackboard_list` / `blackboard_delete` / `blackboard_exists`\n- `budget_status` / `budget_spend` / `budget_reset` — federated token tracking\n- `token_create` / `token_validate` / `token_revoke` — HMAC / Ed25519-signed permission tokens\n- `audit_query` — query the append-only audit log\n- `config_get` / `config_set` — live orchestrator configuration\n- `agent_list` / `agent_spawn` / `agent_stop` — agent lifecycle\n- `fsm_transition` — write FSM state transitions to the blackboard\n\nEach tool takes an `agent_id` parameter — all writes are identity-verified and namespace-scoped, exactly as they are in the TypeScript API.\n\nOptions: `--no-budget`, `--no-token`, `--no-control`, `--ceiling \u003cn\u003e`, `--board \u003cname\u003e`, `--audit-log \u003cpath\u003e`.\n\n---\n\n## CLI\n\nControl Network-AI directly from the terminal — no server required. The CLI imports the same core engine used by the MCP server.\n\n```bash\n# One-off commands (no server needed)\nnpx ts-node bin/cli.ts bb set status running --agent cli\nnpx ts-node bin/cli.ts bb get status\nnpx ts-node bin/cli.ts bb snapshot\n\n# After npm install -g network-ai:\nnetwork-ai bb list\nnetwork-ai audit tail          # live-stream the audit log\nnetwork-ai auth token my-bot --resource blackboard\n```\n\n| Command group | What it controls |\n|---|---|\n| `network-ai bb` | Blackboard — get, set, delete, list, snapshot, propose, commit, abort |\n| `network-ai auth` | AuthGuardian — issue tokens, revoke, check permissions |\n| `network-ai budget` | FederatedBudget — spend status, set ceiling |\n| `network-ai audit` | Audit log — print, live-tail, clear |\n\nGlobal flags on every command: `--data \u003cpath\u003e` (data directory, default `./data`) · `--json` (machine-readable output)\n\n→ Full reference in [QUICKSTART.md § CLI](QUICKSTART.md)\n\n---\n\n## Two agents, one shared state — without race conditions\n\nThe real differentiator is coordination. Here is what no single-framework solution handles: two agents writing to the same resource concurrently, atomically, without corrupting each other.\n\n```typescript\nimport { LockedBlackboard, CustomAdapter, createSwarmOrchestrator } from 'network-ai';\n\nconst board   = new LockedBlackboard('.');\nconst adapter = new CustomAdapter();\n\n// Agent 1: writes its analysis result atomically\nadapter.registerHandler('analyst', async () =\u003e {\n  const id = board.propose('report:status', { phase: 'analysis', complete: true }, 'analyst');\n  board.validate(id, 'analyst');\n  board.commit(id);                           // file-system mutex — no race condition possible\n  return { result: 'analysis written' };\n});\n\n// Agent 2: runs concurrently, writes to its own key safely\nadapter.registerHandler('reviewer', async () =\u003e {\n  const id = board.propose('report:review', { approved: true }, 'reviewer');\n  board.validate(id, 'reviewer');\n  board.commit(id);\n  const analysis = board.read('report:status');\n  return { result: `reviewed phase=${analysis?.phase}` };\n});\n\ncreateSwarmOrchestrator({ adapters: [{ adapter }] });\n\n// Both fire concurrently — mutex guarantees no write is ever lost\nconst [, ] = await Promise.all([\n  adapter.executeAgent('analyst',  { action: 'run', params: {} }, { agentId: 'analyst' }),\n  adapter.executeAgent('reviewer', { action: 'run', params: {} }, { agentId: 'reviewer' }),\n]);\n\nconsole.log(board.read('report:status'));   // { phase: 'analysis', complete: true }\nconsole.log(board.read('report:review'));   // { approved: true }\n```\n\nAdd budgets, permissions, and cross-framework agents with the same pattern. → [QUICKSTART.md](QUICKSTART.md)\n\n---\n\n## Demo — Control-Plane Stress Test *(no API key)*\n\nRuns in ~3 seconds. Proves the coordination primitives without any LLM calls.\n\n```bash\nnpm run demo -- --08\n```\n\nWhat it shows: atomic blackboard locking, priority preemption (priority-3 wins over priority-0 on same key), **AuthGuardian permission gate** (blocked → justified → granted with token), FSM hard-stop at 700 ms, live compliance violation capture (TOOL_ABUSE, TURN_TAKING, RESPONSE_TIMEOUT, JOURNEY_TIMEOUT), and `FederatedBudget` tracking — all without a single API call.\n\n[![Control Plane Demo](https://img.youtube.com/vi/niVRZJu1MEo/0.jpg)](https://www.youtube.com/watch?v=niVRZJu1MEo)\n\n**8-agent AI pipeline** (requires `OPENAI_API_KEY` — builds a Payment Processing Service end-to-end):\n\n```bash\nnpm run demo -- --07\n```\n\n[![Code Review Swarm Demo](https://img.youtube.com/vi/UyMsNhaw9lU/0.jpg)](https://youtu.be/UyMsNhaw9lU)\n\n**NemoClaw sandbox swarm** *(no API key)* — 3 agents in isolated NVIDIA NemoClaw sandboxes with deny-by-default network policies:\n\n```bash\nnpx ts-node examples/10-nemoclaw-sandbox-swarm.ts\n```\n\n[![NemoClaw Sandbox Demo](https://img.youtube.com/vi/c-UWDrdP4ZE/0.jpg)](https://www.youtube.com/watch?v=c-UWDrdP4ZE)\n\n---\n\n## Adapter System\n\n29 adapters, zero adapter dependencies. You bring your own SDK objects.\n\n| Adapter | Framework / Protocol | Register method |\n|---|---|---|\n| `CustomAdapter` | Any function or HTTP endpoint | `registerHandler(name, fn)` |\n| `LangChainAdapter` | LangChain | `registerAgent(name, runnable)` |\n| `AutoGenAdapter` | AutoGen / AG2 | `registerAgent(name, agent)` |\n| `CrewAIAdapter` | CrewAI | `registerAgent` or `registerCrew` |\n| `MCPAdapter` | Model Context Protocol | `registerTool(name, handler)` |\n| `LlamaIndexAdapter` | LlamaIndex | `registerQueryEngine()`, `registerChatEngine()` |\n| `SemanticKernelAdapter` | Microsoft Semantic Kernel | `registerKernel()`, `registerFunction()` |\n| `OpenAIAssistantsAdapter` | OpenAI Assistants | `registerAssistant(name, config)` |\n| `HaystackAdapter` | deepset Haystack | `registerPipeline()`, `registerAgent()` |\n| `DSPyAdapter` | Stanford DSPy | `registerModule()`, `registerProgram()` |\n| `AgnoAdapter` | Agno (formerly Phidata) | `registerAgent()`, `registerTeam()` |\n| `OpenClawAdapter` | OpenClaw | `registerSkill(name, skillRef)` |\n| `A2AAdapter` | Google A2A Protocol | `registerRemoteAgent(name, url)` |\n| `CodexAdapter` | OpenAI Codex / gpt-4o / Codex CLI | `registerCodexAgent(name, config)` |\n| `MiniMaxAdapter` | MiniMax LLM API (M2.5 / M2.5-highspeed) | `registerAgent(name, config)` |\n| `NemoClawAdapter` | NVIDIA NemoClaw (sandboxed agents via OpenShell) | `registerSandboxAgent(name, config)` |\n| `APSAdapter` | Agent Permission Service (delegation-chain trust) | `apsDelegationToTrust(delegation)` |\n| `CopilotAdapter` | GitHub Copilot (generate/review/explain/fix/test/refactor/chat) | `registerAgent(name, config)` |\n| `LangGraphAdapter` | LangGraph (compiled StateGraph) | `registerGraph(name, graph)` |\n| `AnthropicComputerUseAdapter` | Anthropic Computer Use (screenshot/click/type/scroll) | `registerAgent(name, config)` |\n| `OpenAIAgentsAdapter` | OpenAI Agents SDK (tool use, handoffs, guardrails) | `registerAgent(name, runner)` |\n| `VertexAIAdapter` | Google Vertex AI / Gemini (function calling, multi-modal) | `registerAgent(name, config)` |\n| `PydanticAIAdapter` | Pydantic AI (structured output, validation, deps injection) | `registerAgent(name, config)` |\n| `BrowserAgentAdapter` | Browser automation (Playwright/Puppeteer/CDP) | `registerAgent(name, driver)` |\n| `HermesAdapter` | NousResearch Hermes / any OpenAI-compatible endpoint (Ollama, Together AI, Fireworks, llama.cpp) | `registerAgent(name, config)` |\n| `OrchestratorAdapter` | Hierarchical multi-orchestrator coordination | `registerOrchestrator(id, orchestrator)` |\n| `RLMAdapter` | Recursive Language Model / any RLM-compatible HTTP endpoint (arxiv 2512.24601) | `registerAgent(name, config)` |\n\n**Streaming variants** (drop-in replacements with `.stream()` support):\n\n| Adapter | Extends | Streaming source |\n|---|---|---|\n| `LangChainStreamingAdapter` | `LangChainAdapter` | Calls `.stream()` on the Runnable if available; falls back to `.invoke()` |\n| `CustomStreamingAdapter` | `CustomAdapter` | Pipes `AsyncIterable\u003cstring\u003e` handlers; falls back to single-chunk for plain Promises |\n\nExtend `BaseAdapter` (or `StreamingBaseAdapter` for streaming) to add your own in minutes. See [references/adapter-system.md](references/adapter-system.md).\n\n---\n\n## Works with LangGraph, CrewAI, and AutoGen\n\n\u003e Network-AI is the coordination layer you add **on top of** your existing stack. Keep your LangChain chains, CrewAI crews, and AutoGen agents — and add shared state, governance, and budgets around them.\n\n| Capability | Network-AI | LangGraph | CrewAI | AutoGen |\n|---|---|---|---|---|\n| Cross-framework agents in one swarm | ✅ 29 built-in adapters | ⚠️ Nodes can call any code; no adapter abstraction | ⚠️ Extensible via tools; CrewAI-native agents only | ⚠️ Extensible via plugins; AutoGen-native agents only |\n| Atomic shared state (conflict-safe) | ✅ `propose → validate → commit` mutex | ⚠️ State passed between nodes; last-write-wins | ⚠️ Shared memory available; no conflict resolution | ⚠️ Shared context available; no conflict resolution |\n| Hard token ceiling per agent | ✅ `FederatedBudget` (first-class API) | ⚠️ Via callbacks / custom middleware | ⚠️ Via callbacks / custom middleware | ⚠️ Built-in token tracking in v0.4+; no swarm-level ceiling |\n| Permission gating before sensitive ops | ✅ `AuthGuardian` (built-in) | ⚠️ Possible via custom node logic | ⚠️ Possible via custom tools | ⚠️ Possible via custom middleware |\n| Append-only audit log | ✅ plain JSONL (`data/audit_log.jsonl`) | ⚠️ Not built-in | ⚠️ Not built-in | ⚠️ Not built-in |\n| Encryption at rest | ✅ AES-256-GCM (TypeScript layer) | ⚠️ Not built-in | ⚠️ Not built-in | ⚠️ Not built-in |\n| Language | TypeScript / Node.js | Python | Python | Python |\n\n---\n\n## Testing\n\n```bash\nnpm run test:all          # All suites in sequence\nnpm test                  # Core orchestrator\nnpm run test:security     # Security module\nnpm run test:adapters     # All 29 adapters\nnpm run test:streaming    # Streaming adapters\nnpm run test:a2a          # A2A protocol adapter\nnpm run test:codex        # Codex adapter\nnpm run test:priority     # Priority \u0026 preemption\nnpm run test:cli          # CLI layer\nnpm run test:phase9       # Agent runtime, console, strategy agent\nnpm run test:phase12      # Context Throttler, Partition Planner, Coverage Gate, Route Classifier\n```\n\n**2,976 passing assertions across 29 test suites** (`npm run test:all`):\n\n| Suite | Assertions | Covers |\n|---|---|---|\n| `test-phase4.ts` | 147 | FSM governance, compliance monitor, adapter integration |\n| `test-phase5f.ts` | 127 | SSE transport, `McpCombinedBridge`, extended MCP tools |\n| `test-phase5g.ts` | 121 | CRDT backend, vector clocks, bidirectional sync |\n| `test-phase6.ts` | 121 | MCP server, control-plane tools, audit tools |\n| `test-adapters.ts` | 218 | All 29 adapters, registry routing, integration, edge cases |\n| `test-phase5d.ts` | 117 | Pluggable backend (Redis, CRDT, Memory) |\n| `test-standalone.ts` | 88 | Blackboard, auth, integration, persistence, parallelisation, quality gate |\n| `test-phase5e.ts` | 87 | Federated budget tracking |\n| `test-phase5c.ts` | 73 | Named multi-blackboard, isolation, backend options |\n| `test-codex.ts` | 51 | Codex adapter: chat, completion, CLI, BYOC client, error paths |\n| `test-minimax.ts` | 50 | MiniMax adapter: lifecycle, registration, chat mode, temperature clamping |\n| `test-nemoclaw.ts` | 93 | NemoClaw adapter: sandbox lifecycle, policies, blueprint, handoff, env forwarding |\n| `test-priority.ts` | 64 | Priority preemption, conflict resolution, backward compat |\n| `test-a2a.ts` | 35 | A2A protocol: register, execute, mock fetch, error paths |\n| `test-streaming.ts` | 32 | Streaming adapters, chunk shapes, fallback, collectStream |\n| `test-phase5b.ts` | 55 | Pluggable backend part 2, consistency levels |\n| `test-phase5.ts` | 42 | Named multi-blackboard base |\n| `test-security.ts` | 34 | Tokens, sanitization, rate limiting, encryption, audit |\n| `test-cli.ts` | 65 | CLI layer: bb, auth, budget, audit commands |\n| `test-qa.ts` | 67 | QA orchestrator: scenarios, feedback loop, regression, contradictions |\n| `test-phase7.ts` | 94 | Deferred init, hook middleware, flow control, skill composer, semantic search |\n| `test-phase8.ts` | 146 | Phase pipeline, confidence filter, matcher-based hooks, fan-out/fan-in |\n| `test-phase9.ts` | 280 | Agent runtime, sandbox policy, shell executor, file accessor, approval gate, console UI, orchestrator wiring, pipe mode, strategy agent |\n| `test-phase10.ts` | 153 | Goal decomposer, task DAG validation, topological layers, JSON parsing, team runner, concurrency, timeouts, events, runTeam one-liner, dependency injection, LLM planner |\n| `test-topology.ts` | 304 | WorkTree, ControlPlane, dashboard server, topology visualization, WebSocket protocol |\n| `test-rlm-phases.ts` | 123 | FederatedBudget child spending, blackboard metadata API, best-partial result, HookContext depth, sub-goal recursion, semaphore fan-out, PhasePipeline compaction, RLMAdapter end-to-end |\n| `test-phase12.ts` | 65 | Context Throttler, Partition Planner, Coverage Gate, Route Classifier, EVALUATING FSM state, runTeam integration |\n| `test-env-manager.ts` | 77 | Multi-environment isolation, promotion chain, backup/restore, source protection, NETWORK_AI_ENV, blackboard env routing |\n| `test.ts` | 39 | Core orchestrator smoke tests |\n\n---\n\n## Documentation\n\n| Doc | Contents |\n|---|---|\n| [QUICKSTART.md](QUICKSTART.md) | Installation, first run, CLI reference, PowerShell guide, Python scripts CLI |\n| [ARCHITECTURE.md](ARCHITECTURE.md) | Race condition problem, FSM design, handoff protocol, module inventory, project structure |\n| [BENCHMARKS.md](BENCHMARKS.md) | Provider performance, rate limits, local GPU, `max_completion_tokens` guide |\n| [SECURITY.md](SECURITY.md) | Security module, permission system, trust levels, audit trail, v5.0 security additions |\n| [ENTERPRISE.md](ENTERPRISE.md) | Evaluation checklist, stability policy, security summary, integration entry points |\n| [AUDIT_LOG_SCHEMA.md](AUDIT_LOG_SCHEMA.md) | Audit log field reference, all event types, scoring formula |\n| [ADOPTERS.md](ADOPTERS.md) | Known adopters — open a PR to add yourself |\n| [INTEGRATION_GUIDE.md](INTEGRATION_GUIDE.md) | End-to-end integration walkthrough with v5.0 modules |\n| [references/adapter-system.md](references/adapter-system.md) | Adapter architecture, all 29 adapters, writing custom adapters |\n| [references/auth-guardian.md](references/auth-guardian.md) | Permission scoring, resource types, IAuthValidator interface |\n| [references/trust-levels.md](references/trust-levels.md) | Trust level configuration, APS delegation-chain mapping |\n\n---\n\n## Use with Claude, ChatGPT \u0026 Codex\n\nThree integration files are included in the repo root:\n\n| File | Use |\n|---|---|\n| [`claude-tools.json`](claude-tools.json) | Claude API tool use \u0026 OpenAI Codex — drop into the `tools` array |\n| [`openapi.yaml`](openapi.yaml) | Custom GPT Actions — import directly in the GPT editor |\n| [`claude-project-prompt.md`](claude-project-prompt.md) | Claude Projects — paste into Custom Instructions |\n\n**Claude API / Codex:**\n```js\nimport tools from './claude-tools.json' assert { type: 'json' };\n// Pass tools array to anthropic.messages.create({ tools }) or OpenAI chat completions\n```\n\n**Custom GPT Actions:**\nIn the GPT editor → Actions → Import from URL, or paste the contents of `openapi.yaml`.\nSet the server URL to your running `npx network-ai-server --port 3001` instance.\n\n**Claude Projects:**\nCopy the contents of `claude-project-prompt.md` (below the horizontal rule) into a Claude Project's Custom Instructions field. No server required for instruction-only mode.\n\n---\n\n## Community\n\nJoin our Discord server to discuss multi-agent AI coordination, get help, and share what you're building:\n\n[![Discord](https://img.shields.io/badge/Join%20Discord-5865F2?logo=discord\u0026logoColor=white\u0026style=for-the-badge)](https://discord.gg/Cab5vAxc86)\n\n---\n\n## Contributing\n\n1. Fork → feature branch → `npm run test:all` → pull request\n2. Bugs and feature requests via [Issues](https://github.com/Jovancoding/Network-AI/issues)\n\n---\n\nMIT License — [LICENSE](LICENSE) \u0026nbsp;·\u0026nbsp; [CHANGELOG](CHANGELOG.md) \u0026nbsp;·\u0026nbsp; [CONTRIBUTING](CONTRIBUTING.md) \u0026nbsp;·\u0026nbsp; [![RSS](https://img.shields.io/badge/RSS-releases-orange?logo=rss)](https://github.com/Jovancoding/Network-AI/releases.atom)\n\n\u003cdetails\u003e\n\u003csummary\u003eKeywords\u003c/summary\u003e\n\nmulti-agent · agent orchestration · AI agents · agentic AI · agentic workflow · TypeScript · Node.js · LangGraph · CrewAI · AutoGen · MCP · model-context-protocol · LlamaIndex · Semantic Kernel · OpenAI Assistants · Haystack · DSPy · Agno · OpenClaw · ClawHub · shared state · blackboard pattern · atomic commits · guardrails · token budgets · permission gating · audit trail · agent coordination · agent handoffs · governance · cost-awareness\n\n\u003c/details\u003e\n\n## Download History\n\n[![Download History](https://skill-history.com/chart/jovancoding/network-ai.svg)](https://skill-history.com/jovancoding/network-ai)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjovancoding%2Fnetwork-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjovancoding%2Fnetwork-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjovancoding%2Fnetwork-ai/lists"}