Catalog PyPI
PACKAGE EXPLORERView in registry

acplint

PyPI

The linter for the Agent Client Protocol (ACP) — validate your AI agent against the ACP spec

Versions collected1
Direct dependencies5From release 0.1.0
Last observed20 Oct, 18:23 UTC

README

Version 0.1.0 documentation

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

CategoryWhat it validates
initializationProtocol handshake, version negotiation, capabilities
authenticationAuth method discovery, authenticate, logout
session_lifecyclenew/load/resume/close/list/delete/fork sessions
streamingAll 11 session/update notification types
tool_callsFull lifecycle: raw input/output, content, status, sub-agent/skills meta
permissionsrequest_permission flow, auto-approve detection
file_operationsfs/read_text_file, fs/write_text_file
terminalsterminal/create, output, release, kill, wait_for_exit
plansplan notification detection and validation
session_modessession/set_mode
config_optionssession/set_config_option
cancelsession/cancel notification handling
stressRapid prompts, concurrent sessions, large content
schema_validationStrict Pydantic validation on every method response

Conformance Levels

LevelMeaning
✅ Full ConformanceAll mandatory tests pass
⚠️ Partial ConformanceCore tests pass, some optional capability tests fail
❌ Non-ConformantCore 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

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.022 May 20265

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 18:23 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:e2da70735d23b317fda8e27a8666d5e9a659056f0e8e4d5575d6104221366b6c