Skip to main content

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.

PyPI Python Versions License


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 / agentThoughtChunk notifications
  • 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

Metadata

Release files for acplint 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for acplint 0.1.0
File Size Uploaded Provenance
acplint-0.1.0.tar.gz 23.3 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for acplint 0.1.0
File Interpreter ABI Platform
acplint-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 49.1 kB

Release files / acplint-0.1.0.tar.gz

Download URL acplint-0.1.0.tar.gz
Size 23.3 kB
Tags Source
SHA-256 checksum
How to use checksums
6553efb938218ccf8f7a53739e4cafaa77a8c196432745cdb5a3d7a9d6e99ac2
BLAKE2b-256 checksum
How to use checksums
cabe444c8848bdf8bedaf7a87e361a2d92983fbac3bcae4fcb9bbb31c7ca55dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1

Release files / acplint-0.1.0-py3-none-any.whl

Download URL acplint-0.1.0-py3-none-any.whl
Size 25.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ec1f77f46175e7353b7d310c0073fd8159566012573b0c22da9f8e7b6cd7422a
BLAKE2b-256 checksum
How to use checksums
b8f152fac758d175b468c8e0a66fb6b1231c054b6efd6f8df16433a1afeb9592
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via Hatch/1.16.5 cpython/3.12.3 HTTPX/0.28.1

Security for acplint 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page