diff --git a/CHANGELOG.md b/CHANGELOG.md index 7038fa6..25cab2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,7 +17,7 @@ This project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - Renamed the project identity from Agent Context Protocol to Agent Contract Protocol while keeping the ACP acronym. - Renamed the Go module and repository references to - `github.com/Clawdlinux/agent-contract-protocol`. + `github.com/Clawdlinux/agent-native-format`. - Reframed the README, SPEC, positioning doc, landing page, and public post draft around governed execution contracts instead of token efficiency. @@ -125,5 +125,5 @@ Mean reduction: **76.6%**. - `pkg/`, `adapters/`: Apache 2.0. - `cmd/`, `internal/`: BSL 1.1, converts to Apache 2.0 on 2029-05-02. -[Unreleased]: https://github.com/Clawdlinux/agent-contract-protocol/compare/v0.1.0-spec...HEAD -[0.1.0-spec]: https://github.com/Clawdlinux/agent-contract-protocol/releases/tag/v0.1.0-spec +[Unreleased]: https://github.com/Clawdlinux/agent-native-format/compare/v0.1.0-spec...HEAD +[0.1.0-spec]: https://github.com/Clawdlinux/agent-native-format/releases/tag/v0.1.0-spec diff --git a/README.md b/README.md index 877acdb..6d9ca27 100644 --- a/README.md +++ b/README.md @@ -1,60 +1,64 @@ -# Agent Contract Protocol +# Agent Native Format (ANF) -> **ACP** is the governed execution layer for autonomous agents. -> Any tool source in. Signed, identity-bound, ordered, auditable execution out. +> **ANF** is a token-minimal view format for AI agents. +> Translate live system state into far fewer tokens. Same facts, a fraction of +> the context window. > -> **Status:** Public PoC · v0.2 DRAFT · June 2026 **Owner:** Clawdlinux / NineVigil +> **Status:** Public PoC · v0.1 spec DRAFT · 2026 **Owner:** Clawdlinux + +Not Zed's Agent Client Protocol. Not IBM's Agent Communication Protocol. ANF is +a data format, not a transport. --- ## TL;DR -MCP answers **what tools exist**. Claude Code Tool Search and semantic retrieval -are making tool selection cheaper. That is good. It also means raw token -reduction is not a durable product thesis. +JSON, YAML, and HTML are built for humans. Agents pay for that in tokens. -The hard problem is now execution trust. +ANF is a line-oriented representation built for LLM consumption. It encodes the +decision-relevant state of a system, a Kubernetes namespace, a database, a SaaS +dashboard, in the fewest tokens that still carry the facts. -Before an autonomous agent touches a real system, you need to know: +- No quotes, braces, or commas. Indentation and newlines are the structure. +- Health, alerts, and available actions surface first. +- Self-describing. An LLM parses it with no schema. -1. **Who is it acting as?** The contract binds execution to an agent identity - and a credential alias. Raw credentials never enter the model context. -2. **What is it allowed to do?** The contract declares egress, approval gates, - TTL, rate limits, and audit level. -3. **What happened afterward?** Every action can be tied back to a contract, - action id, principal, outcome, and audit record. +A Kubernetes namespace that costs about 12,000 tokens as raw API JSON costs +about 350 tokens as ANF. The full spec is in [`FORMAT.md`](FORMAT.md). -ACP takes an agent intent and returns an **Execution Contract**. The current -wire type is still `ExecutionManifest` for v0.1 compatibility, but the contract -is the product primitive: scoped capabilities, ordered actions, auth handled at -the proxy, and policy declared before the first tool call. +## What ships today -## Why this exists +- **Spec.** [`FORMAT.md`](FORMAT.md), CC BY 4.0. The format definition. +- **Go encoder.** [`pkg/anf`](pkg/anf), Apache 2.0. Build and emit ANF documents. +- **Kubernetes translator.** [`translators/kubernetes`](translators/kubernetes). + Live cluster state to ANF. +- **Benchmarks.** Reproducible token measurements against raw and filtered JSON. -Autonomous agents are stuck in demos because teams cannot bound their blast -radius. Tool discovery is getting solved. Production execution governance is -not. +## Governed execution runtime -ACP is a small open contract format and reference runtime for that gap: +The repo also ships a reference runtime that turns an agent intent into a +scoped, auditable execution contract. This was the original Agent Contract +Protocol work. It stays here as the execution layer that consumes tool +discovery and enforces policy at the boundary. -- **MCP-compatible.** Existing MCP servers keep working. ACP consumes their - `tools/list` and emits a governed execution contract. -- **Source-agnostic.** MCP, Kubernetes Services, and future OpenAPI/gRPC/CLI - adapters all normalize into the same contract shape. -- **Policy at the boundary.** The proxy enforces egress and approval. The - model does not get to self-police. -- **Audit by construction.** Feedback and proxy execution events attach to the - same contract id. +Before an autonomous agent touches a real system, the runtime answers: -## Token efficiency is a side effect +1. **Who is it acting as?** The contract binds execution to an agent identity + and a credential alias. Raw credentials never enter the model context. +2. **What is it allowed to do?** The contract declares egress, approval gates, + TTL, rate limits, and audit level. +3. **What happened afterward?** Every action ties back to a contract, action + id, principal, outcome, and audit record. -ACP still reduces tool-context tokens because contracts only include the -capabilities needed for the intent. +The runtime is MCP-compatible. It consumes existing `tools/list` output, +normalizes MCP, Kubernetes, and future OpenAPI/gRPC/CLI sources into one +contract shape, enforces egress and approval at the proxy, and attaches audit +events to the same contract id. -Measured benchmark data is in -[`results/2026-05-02-week3-summary.md`](results/2026-05-02-week3-summary.md). +Scoped contracts also cut tool-context tokens, because a contract only carries +the capabilities the intent needs. Measured against the MCP baseline: -| Scenario | ACP / MCP tokens | ACP / MCP round trips | Reduction | +| Scenario | runtime / MCP tokens | runtime / MCP round trips | Reduction | |---|---:|---:|---:| | S1 Simple DB query | 111 / 373 | 1 / 3 | 70.2% | | S2 Multi-tool workflow | 295 / 837 | 1 / 5 | 64.7% | @@ -62,16 +66,23 @@ Measured benchmark data is in | S4 Scale, 50 tools and 2 relevant | 241 / 9,223 | 1 / 21 | 97.4% | | S5 Auth-heavy | 359 / 1,431 | 1 / 7 | 74.9% | -Those numbers are useful. They are not the moat. The moat is the governed -execution contract. +Full data in +[`results/2026-05-02-week3-summary.md`](results/2026-05-02-week3-summary.md). ## Repository layout ```text -agent-contract-protocol/ -├── SPEC.md # ACP protocol specification +agent-native-format/ +├── FORMAT.md # ANF format specification (CC BY 4.0) +├── SPEC.md # Execution runtime protocol specification +├── pkg/ +│ ├── anf/ # ANF encoder and types +│ ├── acp/ # Execution runtime Go SDK +│ └── manifest/ # Wire types +├── translators/ +│ └── kubernetes/ # Live cluster state to ANF ├── cmd/ -│ ├── acp-server/ # ACP server entrypoint +│ ├── acp-server/ # Execution runtime entrypoint │ ├── acp-bridge/ # MCP bridge for IDE-style clients │ └── benchmark/ # Benchmark CLI ├── internal/ @@ -80,11 +91,8 @@ agent-contract-protocol/ │ ├── registry/ # Tool registry │ ├── resolver/ # Intent to capabilities resolver │ └── sources/ # MCP and Kubernetes source adapters -├── pkg/ -│ ├── acp/ # Public Go SDK -│ └── manifest/ # Wire types ├── adapters/python/ # Python adapters for common agent stacks -├── benchmark/ # Reproducible MCP vs ACP harness +├── benchmark/ # Reproducible token benchmark harness ├── docs/ # Architecture, positioning, validation └── deploy/ # Docker Compose and Kubernetes assets ``` @@ -94,8 +102,8 @@ agent-contract-protocol/ ### Build from source ```bash -git clone https://github.com/Clawdlinux/agent-contract-protocol -cd agent-contract-protocol +git clone https://github.com/Clawdlinux/agent-native-format +cd agent-native-format make build ACP_AUTH_TOKEN=dev-token ./bin/acp-server --addr :8080 ``` @@ -105,7 +113,7 @@ ACP_AUTH_TOKEN=dev-token ./bin/acp-server --addr :8080 For normal MCP users, install the bridge and register one MCP server in VS Code: ```bash -go install github.com/Clawdlinux/agent-contract-protocol/cmd/acp-bridge@latest +go install github.com/Clawdlinux/agent-native-format/cmd/acp-bridge@latest ``` `~/Library/Application Support/Code/User/mcp.json`: @@ -145,14 +153,14 @@ curl -sS -X POST http://localhost:8080/v1/context \ | python3 -m json.tool ``` -### Go install after the rename lands +### Go install ```bash -go install github.com/Clawdlinux/agent-contract-protocol/cmd/acp-server@main +go install github.com/Clawdlinux/agent-native-format/cmd/acp-server@main ACP_AUTH_TOKEN=dev-token acp-server --addr :8080 ``` -Use a release tag once the first Agent Contract Protocol tag is cut. +Use a release tag like `@v0.2.0-paper` for reproducible installs. ## Use with existing MCP servers @@ -230,10 +238,10 @@ See [`docs/positioning.md`](docs/positioning.md) and ## Python adapters ```bash -pip install "git+https://github.com/Clawdlinux/agent-contract-protocol.git@main#subdirectory=adapters/python/acp_common" -pip install "git+https://github.com/Clawdlinux/agent-contract-protocol.git@main#subdirectory=adapters/python/acp_langgraph" -pip install "git+https://github.com/Clawdlinux/agent-contract-protocol.git@main#subdirectory=adapters/python/acp_openai" -pip install "git+https://github.com/Clawdlinux/agent-contract-protocol.git@main#subdirectory=adapters/python/acp_crewai" +pip install "git+https://github.com/Clawdlinux/agent-native-format.git@main#subdirectory=adapters/python/acp_common" +pip install "git+https://github.com/Clawdlinux/agent-native-format.git@main#subdirectory=adapters/python/acp_langgraph" +pip install "git+https://github.com/Clawdlinux/agent-native-format.git@main#subdirectory=adapters/python/acp_openai" +pip install "git+https://github.com/Clawdlinux/agent-native-format.git@main#subdirectory=adapters/python/acp_crewai" ``` ## Go SDK diff --git a/acp-bridge b/acp-bridge index 0c9f82a..0744226 100755 Binary files a/acp-bridge and b/acp-bridge differ diff --git a/adapters/python/acp_common/README.md b/adapters/python/acp_common/README.md index aeeeb50..28eec4d 100644 --- a/adapters/python/acp_common/README.md +++ b/adapters/python/acp_common/README.md @@ -1,13 +1,13 @@ # acp-common -Shared client + types for [ACP (Agent Contract Protocol)](https://github.com/Clawdlinux/agent-contract-protocol) Python adapters. Pure-stdlib — `urllib`, `json`, `dataclasses`. No third-party runtime dependencies. +Shared client + types for [ACP (Agent Contract Protocol)](https://github.com/Clawdlinux/agent-native-format) Python adapters. Pure-stdlib — `urllib`, `json`, `dataclasses`. No third-party runtime dependencies. Used by `acp-langgraph`, `acp-openai`, and `acp-crewai`. You generally do not install this directly — it is a transitive dependency of the framework adapter you actually want. ## Install ```bash -pip install "git+https://github.com/Clawdlinux/agent-contract-protocol.git@v0.1.0-spec#subdirectory=adapters/python/acp_common" +pip install "git+https://github.com/Clawdlinux/agent-native-format.git@v0.1.0-spec#subdirectory=adapters/python/acp_common" ``` ## Usage diff --git a/adapters/python/acp_common/pyproject.toml b/adapters/python/acp_common/pyproject.toml index 469afdb..8ceda0e 100644 --- a/adapters/python/acp_common/pyproject.toml +++ b/adapters/python/acp_common/pyproject.toml @@ -27,10 +27,10 @@ classifiers = [ dependencies = [] [project.urls] -Homepage = "https://github.com/Clawdlinux/agent-contract-protocol" -Repository = "https://github.com/Clawdlinux/agent-contract-protocol" -Spec = "https://github.com/Clawdlinux/agent-contract-protocol/blob/main/SPEC.md" -Issues = "https://github.com/Clawdlinux/agent-contract-protocol/issues" +Homepage = "https://github.com/Clawdlinux/agent-native-format" +Repository = "https://github.com/Clawdlinux/agent-native-format" +Spec = "https://github.com/Clawdlinux/agent-native-format/blob/main/SPEC.md" +Issues = "https://github.com/Clawdlinux/agent-native-format/issues" [tool.setuptools] # The package source is the directory containing pyproject.toml itself diff --git a/adapters/python/acp_crewai/pyproject.toml b/adapters/python/acp_crewai/pyproject.toml index 19b88fd..e5c27a2 100644 --- a/adapters/python/acp_crewai/pyproject.toml +++ b/adapters/python/acp_crewai/pyproject.toml @@ -29,8 +29,8 @@ crewai = ["crewai>=0.1.0"] test = ["pytest>=7"] [project.urls] -Homepage = "https://github.com/Clawdlinux/agent-contract-protocol" -Repository = "https://github.com/Clawdlinux/agent-contract-protocol" +Homepage = "https://github.com/Clawdlinux/agent-native-format" +Repository = "https://github.com/Clawdlinux/agent-native-format" [tool.setuptools] packages = ["acp_crewai"] diff --git a/adapters/python/acp_langgraph/pyproject.toml b/adapters/python/acp_langgraph/pyproject.toml index 20b9a60..05cc187 100644 --- a/adapters/python/acp_langgraph/pyproject.toml +++ b/adapters/python/acp_langgraph/pyproject.toml @@ -38,10 +38,10 @@ langgraph = ["langgraph>=0.0.50"] test = ["pytest>=7", "langgraph>=0.0.50"] [project.urls] -Homepage = "https://github.com/Clawdlinux/agent-contract-protocol" -Repository = "https://github.com/Clawdlinux/agent-contract-protocol" -Spec = "https://github.com/Clawdlinux/agent-contract-protocol/blob/main/SPEC.md" -Issues = "https://github.com/Clawdlinux/agent-contract-protocol/issues" +Homepage = "https://github.com/Clawdlinux/agent-native-format" +Repository = "https://github.com/Clawdlinux/agent-native-format" +Spec = "https://github.com/Clawdlinux/agent-native-format/blob/main/SPEC.md" +Issues = "https://github.com/Clawdlinux/agent-native-format/issues" [tool.setuptools] packages = ["acp_langgraph"] diff --git a/adapters/python/acp_openai/pyproject.toml b/adapters/python/acp_openai/pyproject.toml index d634c4c..9feb729 100644 --- a/adapters/python/acp_openai/pyproject.toml +++ b/adapters/python/acp_openai/pyproject.toml @@ -29,8 +29,8 @@ openai = ["openai>=1.0"] test = ["pytest>=7"] [project.urls] -Homepage = "https://github.com/Clawdlinux/agent-contract-protocol" -Repository = "https://github.com/Clawdlinux/agent-contract-protocol" +Homepage = "https://github.com/Clawdlinux/agent-native-format" +Repository = "https://github.com/Clawdlinux/agent-native-format" [tool.setuptools] packages = ["acp_openai"] diff --git a/blog/launch-post.md b/blog/launch-post.md index f397441..8385ac3 100644 --- a/blog/launch-post.md +++ b/blog/launch-post.md @@ -25,7 +25,7 @@ auditable execution out. If this is not your pain, I want to know. -Repo: https://github.com/Clawdlinux/agent-contract-protocol +Repo: https://github.com/Clawdlinux/agent-native-format ## LinkedIn @@ -50,7 +50,7 @@ auditable execution out. Genuinely looking for counterexamples. If this is already solved in your stack, I want to learn how. -Repo: https://github.com/Clawdlinux/agent-contract-protocol +Repo: https://github.com/Clawdlinux/agent-native-format ## Hacker News / Reddit @@ -81,4 +81,4 @@ existing tool sources and emits a signed, identity-bound, ordered, auditable uni of execution. I am not sure yet if this is the right primitive, so I would rather ask before building too much. -Repo: https://github.com/Clawdlinux/agent-contract-protocol \ No newline at end of file +Repo: https://github.com/Clawdlinux/agent-native-format \ No newline at end of file diff --git a/cmd/acp-bridge/main.go b/cmd/acp-bridge/main.go index 85a9f6b..9f5dc8a 100644 --- a/cmd/acp-bridge/main.go +++ b/cmd/acp-bridge/main.go @@ -40,12 +40,12 @@ import ( "time" "unicode" - "github.com/Clawdlinux/agent-contract-protocol/internal/bridge" - "github.com/Clawdlinux/agent-contract-protocol/internal/mcpclient" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/internal/resolver" - mcpsource "github.com/Clawdlinux/agent-contract-protocol/internal/sources/mcp" - "github.com/Clawdlinux/agent-contract-protocol/internal/vscodeconfig" + "github.com/Clawdlinux/agent-native-format/internal/bridge" + "github.com/Clawdlinux/agent-native-format/internal/mcpclient" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/internal/resolver" + mcpsource "github.com/Clawdlinux/agent-native-format/internal/sources/mcp" + "github.com/Clawdlinux/agent-native-format/internal/vscodeconfig" ) var version = "0.2.0-dev" diff --git a/cmd/acp-server/main.go b/cmd/acp-server/main.go index a3196cd..bf76dee 100644 --- a/cmd/acp-server/main.go +++ b/cmd/acp-server/main.go @@ -20,12 +20,12 @@ import ( "syscall" "time" - builder "github.com/Clawdlinux/agent-contract-protocol/internal/builder" - "github.com/Clawdlinux/agent-contract-protocol/internal/observability" - "github.com/Clawdlinux/agent-contract-protocol/internal/proxy" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/internal/resolver" - "github.com/Clawdlinux/agent-contract-protocol/internal/server" + builder "github.com/Clawdlinux/agent-native-format/internal/builder" + "github.com/Clawdlinux/agent-native-format/internal/observability" + "github.com/Clawdlinux/agent-native-format/internal/proxy" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/internal/resolver" + "github.com/Clawdlinux/agent-native-format/internal/server" ) // acpVersion is the version string set at build time via -ldflags. diff --git a/cmd/import-demo/main.go b/cmd/import-demo/main.go index 98372d5..2dbc0d9 100644 --- a/cmd/import-demo/main.go +++ b/cmd/import-demo/main.go @@ -33,8 +33,8 @@ import ( "os" "strings" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - mcpsource "github.com/Clawdlinux/agent-contract-protocol/internal/sources/mcp" + "github.com/Clawdlinux/agent-native-format/internal/registry" + mcpsource "github.com/Clawdlinux/agent-native-format/internal/sources/mcp" ) // sourceFlag is a repeatable -source flag whose value is parsed as a comma- diff --git a/docs/decision-log.md b/docs/decision-log.md index 3af3f59..6bfc569 100644 --- a/docs/decision-log.md +++ b/docs/decision-log.md @@ -2,7 +2,7 @@ ## 2026-05-02 — Start ACP as a private Clawdlinux repo -**Decision:** Create `Clawdlinux/agent-contract-protocol` as a private repository and +**Decision:** Create `Clawdlinux/agent-native-format` as a private repository and build the PoC independently from `agentic-operator-core`. **Why:** ACP is a new protocol and benchmark artifact. Keeping it separate diff --git a/docs/operator-integration.md b/docs/operator-integration.md index 61f956b..3a15e43 100644 --- a/docs/operator-integration.md +++ b/docs/operator-integration.md @@ -20,7 +20,7 @@ other. | POST /v1/context v +-------------------------+ -| ACP server | <-- this repo (Clawdlinux/agent-contract-protocol) +| ACP server | <-- this repo (Clawdlinux/agent-native-format) | - intent resolver | | - contract builder | | - auth proxy | @@ -53,9 +53,9 @@ required. | Concern | Owner | Repo | |---|---|---| -| ACP wire protocol | this repo | `Clawdlinux/agent-contract-protocol` SPEC.md | -| ACP server runtime | this repo | `Clawdlinux/agent-contract-protocol` cmd/, internal/ | -| ACP source adapters (MCP, k8s) | this repo | `Clawdlinux/agent-contract-protocol` internal/sources/ | +| ACP wire protocol | this repo | `Clawdlinux/agent-native-format` SPEC.md | +| ACP server runtime | this repo | `Clawdlinux/agent-native-format` cmd/, internal/ | +| ACP source adapters (MCP, k8s) | this repo | `Clawdlinux/agent-native-format` internal/sources/ | | Kubernetes CRDs (AgentWorkload, AgentCard, Tenant) | operator | `Clawdlinux/agentic-operator-core` api/v1alpha1/ | | Reconcilers | operator | `Clawdlinux/agentic-operator-core` internal/controller/ | | RuntimeClass / NetworkPolicy / RBAC manifests | operator | `Clawdlinux/agentic-operator-core` charts/ | diff --git a/docs/phase-log.md b/docs/phase-log.md index 5e0f653..dd72ef3 100644 --- a/docs/phase-log.md +++ b/docs/phase-log.md @@ -11,8 +11,8 @@ Obsidian vault. **Inputs** - Source spec: `ACP_PoC_Specification_CONFIDENTIAL.docx` - Workspace: `/Users/sunny/clawdlinux/agent-contract-protocol` -- GitHub repo: `Clawdlinux/agent-contract-protocol` (private) -- GitHub milestone: `https://github.com/Clawdlinux/agent-contract-protocol/milestone/1` +- GitHub repo: `Clawdlinux/agent-native-format` (private) +- GitHub milestone: `https://github.com/Clawdlinux/agent-native-format/milestone/1` **Decisions** - Repo name: `agent-contract-protocol` diff --git a/docs/run-log/2026-05-02-phase-1-scaffold.md b/docs/run-log/2026-05-02-phase-1-scaffold.md index 99877fd..11837b1 100644 --- a/docs/run-log/2026-05-02-phase-1-scaffold.md +++ b/docs/run-log/2026-05-02-phase-1-scaffold.md @@ -9,13 +9,13 @@ protocol spec, scaffold, benchmark plan, and Obsidian mirror. - Source document: `/Users/sunny/Documents/Claude/Projects/Kubernetes Agent Swarms for Enterprise/ACP_PoC_Specification_CONFIDENTIAL.docx` - GitHub org: `clawdlinux` -- Repo: `Clawdlinux/agent-contract-protocol` +- Repo: `Clawdlinux/agent-native-format` - Local path: `/Users/sunny/clawdlinux/agent-contract-protocol` - Obsidian vault folder: `ACP-PoC/` inside the NineVigil vault ## Work completed -- Created private GitHub repo `Clawdlinux/agent-contract-protocol`. +- Created private GitHub repo `Clawdlinux/agent-native-format`. - Cloned repo to `/Users/sunny/clawdlinux/agent-contract-protocol`. - Created source-spec scaffold: - `cmd/acp-server/` diff --git a/docs/run-log/2026-05-02-phase-2-week-1-server.md b/docs/run-log/2026-05-02-phase-2-week-1-server.md index 39c91cb..92b79de 100644 --- a/docs/run-log/2026-05-02-phase-2-week-1-server.md +++ b/docs/run-log/2026-05-02-phase-2-week-1-server.md @@ -95,12 +95,12 @@ builder, and bearer auth. ```bash $ go test -race -count=1 ./... -ok github.com/Clawdlinux/agent-contract-protocol/internal/manifest 0.49s -ok github.com/Clawdlinux/agent-contract-protocol/internal/registry 0.91s -ok github.com/Clawdlinux/agent-contract-protocol/internal/resolver 0.51s -ok github.com/Clawdlinux/agent-contract-protocol/internal/server 0.59s -ok github.com/Clawdlinux/agent-contract-protocol/pkg/acp 0.57s -ok github.com/Clawdlinux/agent-contract-protocol/pkg/manifest 0.43s +ok github.com/Clawdlinux/agent-native-format/internal/manifest 0.49s +ok github.com/Clawdlinux/agent-native-format/internal/registry 0.91s +ok github.com/Clawdlinux/agent-native-format/internal/resolver 0.51s +ok github.com/Clawdlinux/agent-native-format/internal/server 0.59s +ok github.com/Clawdlinux/agent-native-format/pkg/acp 0.57s +ok github.com/Clawdlinux/agent-native-format/pkg/manifest 0.43s ``` End-to-end smoke test against the running binary: diff --git a/examples/README.md b/examples/README.md index 004227c..20fd822 100644 --- a/examples/README.md +++ b/examples/README.md @@ -8,7 +8,7 @@ ACP-managed tool surface. Install the bridge: ```bash -go install github.com/Clawdlinux/agent-contract-protocol/cmd/acp-bridge@latest +go install github.com/Clawdlinux/agent-native-format/cmd/acp-bridge@latest ``` Add one server to VS Code `mcp.json`: diff --git a/go.mod b/go.mod index e6846a0..273b465 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ -module github.com/Clawdlinux/agent-contract-protocol +module github.com/Clawdlinux/agent-native-format go 1.25.3 -toolchain go1.26.4 +toolchain go1.26.5 require ( go.opentelemetry.io/otel v1.43.0 diff --git a/internal/bridge/bridge.go b/internal/bridge/bridge.go index 8db9d6b..6555dff 100644 --- a/internal/bridge/bridge.go +++ b/internal/bridge/bridge.go @@ -31,8 +31,8 @@ import ( "strings" "sync" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/internal/resolver" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/internal/resolver" ) // Forwarder routes a bridge tools/call to the original downstream MCP server. diff --git a/internal/bridge/bridge_test.go b/internal/bridge/bridge_test.go index 1d6e8a7..8ff7847 100644 --- a/internal/bridge/bridge_test.go +++ b/internal/bridge/bridge_test.go @@ -14,9 +14,9 @@ import ( "strings" "testing" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/internal/resolver" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/internal/resolver" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) type fakeForwarder struct { diff --git a/internal/builder/builder.go b/internal/builder/builder.go index 5d77e90..0a64431 100644 --- a/internal/builder/builder.go +++ b/internal/builder/builder.go @@ -19,8 +19,8 @@ import ( "sort" "strings" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) //go:generate ../../bin/mockgen -source=builder.go -destination=mocks_test.go -package=builder diff --git a/internal/builder/builder_fuzz_test.go b/internal/builder/builder_fuzz_test.go index ea105c6..bae8cd6 100644 --- a/internal/builder/builder_fuzz_test.go +++ b/internal/builder/builder_fuzz_test.go @@ -12,8 +12,8 @@ import ( "testing" "unicode/utf8" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) func makeFuzzTool(depsCaps []string) registry.Tool { diff --git a/internal/builder/builder_test.go b/internal/builder/builder_test.go index 4039a7e..e722474 100644 --- a/internal/builder/builder_test.go +++ b/internal/builder/builder_test.go @@ -14,8 +14,8 @@ import ( "go.uber.org/mock/gomock" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) // fixedID is a tiny IDSource for deterministic tests. diff --git a/internal/builder/mocks_test.go b/internal/builder/mocks_test.go index 80d9c3b..ac63ae4 100644 --- a/internal/builder/mocks_test.go +++ b/internal/builder/mocks_test.go @@ -12,7 +12,7 @@ package builder import ( reflect "reflect" - registry "github.com/Clawdlinux/agent-contract-protocol/internal/registry" + registry "github.com/Clawdlinux/agent-native-format/internal/registry" gomock "go.uber.org/mock/gomock" ) diff --git a/internal/mcpclient/stdio.go b/internal/mcpclient/stdio.go index 3ab128c..b95bc2e 100644 --- a/internal/mcpclient/stdio.go +++ b/internal/mcpclient/stdio.go @@ -24,7 +24,7 @@ import ( "sync/atomic" "time" - mcpsource "github.com/Clawdlinux/agent-contract-protocol/internal/sources/mcp" + mcpsource "github.com/Clawdlinux/agent-native-format/internal/sources/mcp" ) const defaultProtocolVersion = "2025-03-26" diff --git a/internal/observability/observability.go b/internal/observability/observability.go index 5b9946b..4dc7236 100644 --- a/internal/observability/observability.go +++ b/internal/observability/observability.go @@ -38,7 +38,7 @@ import ( ) const ( - TracerName = "github.com/Clawdlinux/agent-contract-protocol/internal/observability" + TracerName = "github.com/Clawdlinux/agent-native-format/internal/observability" SchemaURL = "https://opentelemetry.io/schemas/genai/1.30.0" ) diff --git a/internal/observability/observability_test.go b/internal/observability/observability_test.go index caaee02..9ac8203 100644 --- a/internal/observability/observability_test.go +++ b/internal/observability/observability_test.go @@ -15,7 +15,7 @@ import ( sdktrace "go.opentelemetry.io/otel/sdk/trace" "go.opentelemetry.io/otel/sdk/trace/tracetest" - "github.com/Clawdlinux/agent-contract-protocol/internal/observability" + "github.com/Clawdlinux/agent-native-format/internal/observability" ) func setupRecorder(t *testing.T) (*tracetest.SpanRecorder, func()) { diff --git a/internal/proxy/mocks_test.go b/internal/proxy/mocks_test.go index c8cbf01..f3860d8 100644 --- a/internal/proxy/mocks_test.go +++ b/internal/proxy/mocks_test.go @@ -14,7 +14,7 @@ import ( http "net/http" reflect "reflect" - manifest "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + manifest "github.com/Clawdlinux/agent-native-format/pkg/manifest" gomock "go.uber.org/mock/gomock" ) diff --git a/internal/proxy/proxy.go b/internal/proxy/proxy.go index ee7f574..1b9b6da 100644 --- a/internal/proxy/proxy.go +++ b/internal/proxy/proxy.go @@ -32,7 +32,7 @@ import ( "net/url" "strings" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) //go:generate ../../bin/mockgen -source=proxy.go -destination=mocks_test.go -package=proxy diff --git a/internal/proxy/proxy_test.go b/internal/proxy/proxy_test.go index e5caba3..42aed36 100644 --- a/internal/proxy/proxy_test.go +++ b/internal/proxy/proxy_test.go @@ -20,7 +20,7 @@ import ( "go.uber.org/mock/gomock" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) // fakeUpstream returns an httptest.Server that records the last request it diff --git a/internal/registry/registry.go b/internal/registry/registry.go index 8dfbb54..04c25da 100644 --- a/internal/registry/registry.go +++ b/internal/registry/registry.go @@ -15,7 +15,7 @@ import ( "strings" "sync" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) // ErrNotFound is returned when a tool is not registered. diff --git a/internal/registry/registry_test.go b/internal/registry/registry_test.go index c4d75e0..7e90068 100644 --- a/internal/registry/registry_test.go +++ b/internal/registry/registry_test.go @@ -12,7 +12,7 @@ import ( "reflect" "testing" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) func newTool(id string, caps ...string) Tool { diff --git a/internal/registry/seed.go b/internal/registry/seed.go index 5c35644..c3f17ca 100644 --- a/internal/registry/seed.go +++ b/internal/registry/seed.go @@ -7,7 +7,7 @@ See LICENSE in the repository root. package registry -import "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" +import "github.com/Clawdlinux/agent-native-format/pkg/manifest" // Seed populates a registry with a baseline of demo tools used by the Week 1 // PoC server, the docker-compose dev stack, and the benchmark harness. diff --git a/internal/server/mocks_test.go b/internal/server/mocks_test.go index e20abb0..44215eb 100644 --- a/internal/server/mocks_test.go +++ b/internal/server/mocks_test.go @@ -12,7 +12,7 @@ package server import ( reflect "reflect" - manifest "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + manifest "github.com/Clawdlinux/agent-native-format/pkg/manifest" gomock "go.uber.org/mock/gomock" ) diff --git a/internal/server/server.go b/internal/server/server.go index 88dfa0d..11fe2ec 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -23,8 +23,8 @@ import ( "sync/atomic" "time" - "github.com/Clawdlinux/agent-contract-protocol/internal/observability" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/observability" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) //go:generate ../../bin/mockgen -source=server.go -destination=mocks_test.go -package=server diff --git a/internal/server/server_extra_test.go b/internal/server/server_extra_test.go index f814263..c44e084 100644 --- a/internal/server/server_extra_test.go +++ b/internal/server/server_extra_test.go @@ -18,7 +18,7 @@ import ( "testing" "time" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) // errorSink always fails on Record so we can hit handleFeedback's 500 path. diff --git a/internal/server/server_test.go b/internal/server/server_test.go index 0292bc1..f95a223 100644 --- a/internal/server/server_test.go +++ b/internal/server/server_test.go @@ -19,7 +19,7 @@ import ( "go.uber.org/mock/gomock" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) func newServer(t *testing.T, cfg Config) *httptest.Server { diff --git a/internal/sources/k8s/source.go b/internal/sources/k8s/source.go index 35db300..1147e51 100644 --- a/internal/sources/k8s/source.go +++ b/internal/sources/k8s/source.go @@ -39,8 +39,8 @@ import ( "sort" "strings" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) // AnnotationPrefix is the common prefix for all ACP-relevant Service diff --git a/internal/sources/k8s/source_test.go b/internal/sources/k8s/source_test.go index ef50a97..648b1ed 100644 --- a/internal/sources/k8s/source_test.go +++ b/internal/sources/k8s/source_test.go @@ -12,8 +12,8 @@ import ( "sort" "testing" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) func ann(kvs ...string) map[string]string { diff --git a/internal/sources/mcp/source.go b/internal/sources/mcp/source.go index 7de9595..20c3b7a 100644 --- a/internal/sources/mcp/source.go +++ b/internal/sources/mcp/source.go @@ -34,8 +34,8 @@ import ( "strings" "time" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" - "github.com/Clawdlinux/agent-contract-protocol/pkg/manifest" + "github.com/Clawdlinux/agent-native-format/internal/registry" + "github.com/Clawdlinux/agent-native-format/pkg/manifest" ) //go:generate ../../../bin/mockgen -source=source.go -destination=mocks_test.go -package=mcp diff --git a/internal/sources/mcp/source_test.go b/internal/sources/mcp/source_test.go index 44e2c48..f33730f 100644 --- a/internal/sources/mcp/source_test.go +++ b/internal/sources/mcp/source_test.go @@ -18,7 +18,7 @@ import ( "go.uber.org/mock/gomock" - "github.com/Clawdlinux/agent-contract-protocol/internal/registry" + "github.com/Clawdlinux/agent-native-format/internal/registry" ) func sampleToolsListJSON() string { diff --git a/landing/index.html b/landing/index.html index 94bf42a..239d2f2 100644 --- a/landing/index.html +++ b/landing/index.html @@ -89,7 +89,7 @@
git clone https://github.com/Clawdlinux/agent-contract-protocol
+ git clone https://github.com/Clawdlinux/agent-native-format
cd agent-contract-protocol
go build -o bin/acp-server ./cmd/acp-server
ACP_AUTH_TOKEN=dev ./bin/acp-server --addr :8080 &
@@ -142,9 +142,9 @@ What the contract gives you