The linter for the Agent Client Protocol (ACP) — validate your AI agent against the ACP spec
Project description
acplint
The linter for the Agent Client Protocol (ACP)
Validate your AI agent implementation against the ACP specification.
Catch missing hooks, broken streaming, schema violations, and more.
What is ACP?
The Agent Client Protocol (ACP) is a JSON-RPC 2.0 protocol for communication between AI coding agents and their clients (IDEs, CLIs, editors). It's used by Zed and other tools that integrate AI agents. If you're building an ACP-compatible agent, acplint makes sure you're doing it right.
What does acplint do?
Like eslint for JavaScript or pylint for Python, acplint checks your agent implementation against the ACP specification and reports what's missing, broken, or non-conformant.
It catches:
- Missing capabilities — agent doesn't advertise hooks, sub-agent support, skills
- Broken streaming — missing
agentMessageChunk/agentThoughtChunknotifications - Schema violations — wrong field names, missing required fields, invalid types (with exact field paths)
- Tool call issues — missing raw output, broken status transitions, missing content
- Protocol errors — wrong JSON-RPC responses, missing session updates, bad initialization
Install
pip install acplint
Quick Start
Test any ACP agent via stdio:
# Test Claude Code
acplint --agent claude-code --agent-args "--acp"
# Test a custom agent
acplint --agent "my-agent" --agent-args "--stdio --model=gpt-4"
14 Test Categories
| Category | What it validates |
|---|---|
initialization |
Protocol handshake, version negotiation, capabilities |
authentication |
Auth method discovery, authenticate, logout |
session_lifecycle |
new/load/resume/close/list/delete/fork sessions |
streaming |
All 11 session/update notification types |
tool_calls |
Full lifecycle: raw input/output, content, status, sub-agent/skills meta |
permissions |
request_permission flow, auto-approve detection |
file_operations |
fs/read_text_file, fs/write_text_file |
terminals |
terminal/create, output, release, kill, wait_for_exit |
plans |
plan notification detection and validation |
session_modes |
session/set_mode |
config_options |
session/set_config_option |
cancel |
session/cancel notification handling |
stress |
Rapid prompts, concurrent sessions, large content |
schema_validation |
Strict Pydantic validation on every method response |
Conformance Levels
| Level | Meaning |
|---|---|
| ✅ Full Conformance | All mandatory tests pass |
| ⚠️ Partial Conformance | Core tests pass, some optional capability tests fail |
| ❌ Non-Conformant | Core protocol tests fail |
Python API
from acplint import ConformanceRunner
runner = ConformanceRunner(agent_command=["my-agent", "--stdio"])
report = runner.run_all()
report.print_summary()
# Programmatic access
print(report.conformance_level)
print(report.passed_tests)
print(report.findings)
CI Integration
# JSON output for pipelines
acplint --agent "my-agent" --output json --output-file results.json
# Exit codes: 0=full, 1=partial, 2=non-conformant
acplint --agent "my-agent" && echo "Agent is ACP-conformant!"
Why "acplint"?
Because every protocol deserves a linter. acplint checks your agent against the ACP spec the same way eslint checks your JS against a style guide. If it passes acplint, your agent speaks ACP correctly.
License
Apache-2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file acplint-0.1.0.tar.gz.
File metadata
- Download URL: acplint-0.1.0.tar.gz
- Upload date:
- Size: 23.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6553efb938218ccf8f7a53739e4cafaa77a8c196432745cdb5a3d7a9d6e99ac2
|
|
| MD5 |
7cded995b3f711761bd528a204a68139
|
|
| BLAKE2b-256 |
cabe444c8848bdf8bedaf7a87e361a2d92983fbac3bcae4fcb9bbb31c7ca55dd
|
File details
Details for the file acplint-0.1.0-py3-none-any.whl.
File metadata
- Download URL: acplint-0.1.0-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec1f77f46175e7353b7d310c0073fd8159566012573b0c22da9f8e7b6cd7422a
|
|
| MD5 |
485359f883504e763e5a96033a0ace69
|
|
| BLAKE2b-256 |
b8f152fac758d175b468c8e0a66fb6b1231c054b6efd6f8df16433a1afeb9592
|