Skip to content

Commit c5184d5

Browse files
SonAIengineclaude
andcommitted
chore: agentlint → toolint 전면 리네이밍 (PyPI 이름 충돌 해결)
PyPI에 'agentlint'이 이미 선점되어 있어서 'toolint'으로 변경. 패키지명, import 경로, CLI 명령, GitHub repo, README, CI 전부 반영. 테스트 66개 통과, graph-tool-call 검증 11건 동일. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent d8b1ba9 commit c5184d5

23 files changed

Lines changed: 87 additions & 87 deletions

README.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# Agentlint
1+
# Toolint
22

33
**Structural linter for MCP-compatible, zero-dependency Python agent tool packages.**
44

5-
`agentlint` enforces architectural rules that ensure your Python package works correctly as:
5+
`toolint` enforces architectural rules that ensure your Python package works correctly as:
66
- A **standalone library** (`from my_tool import MyTool`)
77
- A **CLI tool** (`my-tool search "query"`)
88
- An **MCP server** (`my-tool serve --source spec.json`)
@@ -22,37 +22,37 @@ Building agent-compatible tools is easy to get wrong:
2222
| Tool function has no docstring | LLM can't understand what the tool does |
2323
| Optional dep not in `extras` | `pip install my-tool[mcp]` doesn't install MCP SDK |
2424

25-
`agentlint` catches all of these **before** they reach users.
25+
`toolint` catches all of these **before** they reach users.
2626

2727
## Installation
2828

2929
```bash
30-
pip install agentlint
30+
pip install toolint
3131

3232
# or with uv
33-
uv pip install agentlint
33+
uv pip install toolint
3434

3535
# or as a tool
36-
uvx agentlint check .
36+
uvx toolint check .
3737
```
3838

3939
## Quick Start
4040

4141
```bash
4242
# Lint current project
43-
agentlint check .
43+
toolint check .
4444

4545
# Lint with specific rules only
46-
agentlint check . --select ATL101,ATL102
46+
toolint check . --select ATL101,ATL102
4747

4848
# Ignore specific rules
49-
agentlint check . --ignore ATL105
49+
toolint check . --ignore ATL105
5050

5151
# JSON output (for CI integration)
52-
agentlint check . --format json
52+
toolint check . --format json
5353

5454
# Show all available rules
55-
agentlint rules
55+
toolint rules
5656
```
5757

5858
## Example Output
@@ -134,7 +134,7 @@ my_tool/mcp_server.py:42:8 ATL503 (error)
134134
Add to `pyproject.toml`:
135135

136136
```toml
137-
[tool.agentlint]
137+
[tool.toolint]
138138
# Package root (auto-detected from pyproject.toml)
139139
package = "my_tool"
140140

@@ -154,7 +154,7 @@ core_allowed_imports = []
154154
ignore = ["ATL105"]
155155
```
156156

157-
Or use a standalone file `.agentlint.toml` with the same structure (without the `[tool.agentlint]` nesting).
157+
Or use a standalone file `.toolint.toml` with the same structure (without the `[tool.toolint]` nesting).
158158

159159
## The Architecture This Enforces
160160

@@ -184,32 +184,32 @@ my_package/
184184

185185
```yaml
186186
- name: Lint agent tool structure
187-
run: uvx agentlint check .
187+
run: uvx toolint check .
188188
```
189189
190190
### Pre-commit
191191
192192
```yaml
193193
repos:
194-
- repo: https://github.com/PlateerLab/agentlint
194+
- repo: https://github.com/PlateerLab/toolint
195195
rev: v0.1.0
196196
hooks:
197-
- id: agentlint
197+
- id: toolint
198198
```
199199
200200
## Technical Details
201201
202202
- **Python 3.10+**
203203
- **Zero dependencies** — uses only `ast` and `tomllib` from stdlib
204204
- **Fast** — AST parsing, no runtime imports of the target package
205-
- **Self-validating** — `agentlint` follows the same architecture it enforces
205+
- **Self-validating** — `toolint` follows the same architecture it enforces
206206

207207
## License
208208

209209
MIT
210210

211211
## Links
212212

213-
- [GitHub](https://github.com/PlateerLab/agentlint)
214-
- [PyPI](https://pypi.org/project/agentlint/) (coming soon)
213+
- [GitHub](https://github.com/PlateerLab/toolint)
214+
- [PyPI](https://pypi.org/project/toolint/) (coming soon)
215215
- [graph-tool-call](https://github.com/SonAIengine/graph-tool-call) — the reference implementation this linter is based on

agentlint/__init__.py

Lines changed: 0 additions & 13 deletions
This file was deleted.
27 KB
Binary file not shown.

dist/agentlint-0.1.0.tar.gz

21.5 KB
Binary file not shown.

pyproject.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ requires = ["poetry-core"]
33
build-backend = "poetry.core.masonry.api"
44

55
[tool.poetry]
6-
name = "agentlint"
6+
name = "toolint"
77
version = "0.1.0"
88
description = "Structural linter for MCP-compatible, zero-dependency Python agent tool packages"
99
authors = ["PlateerLab"]
1010
license = "MIT"
1111
readme = "README.md"
12-
packages = [{include = "agentlint"}]
12+
packages = [{include = "toolint"}]
1313
keywords = [
1414
"linter", "mcp", "agent", "tool", "architecture",
1515
"zero-dependency", "structural-lint", "python",
@@ -28,11 +28,11 @@ classifiers = [
2828
]
2929

3030
[tool.poetry.urls]
31-
Homepage = "https://github.com/PlateerLab/Agentlint"
32-
Repository = "https://github.com/PlateerLab/Agentlint"
31+
Homepage = "https://github.com/PlateerLab/Toolint"
32+
Repository = "https://github.com/PlateerLab/Toolint"
3333

3434
[tool.poetry.scripts]
35-
agentlint = "agentlint.__main__:main"
35+
toolint = "toolint.__main__:main"
3636

3737
[tool.poetry.dependencies]
3838
python = "^3.10"

tests/test_engine.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
from pathlib import Path
66
from typing import Any
77

8-
from agentlint.core.models import LintConfig, LintResult, Severity
9-
from agentlint.engine import LintEngine
10-
from agentlint.formatters import format_json, format_text
8+
from toolint.core.models import LintConfig, LintResult, Severity
9+
from toolint.engine import LintEngine
10+
from toolint.formatters import format_json, format_text
1111

1212

1313
def _dummy_checker_pass(

tests/test_layer_separation.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
from pathlib import Path
66

7-
from agentlint.core.config import load_config
8-
from agentlint.core.models import LintConfig
9-
from agentlint.rules import layer_separation, schema_quality
7+
from toolint.core.config import load_config
8+
from toolint.core.models import LintConfig
9+
from toolint.rules import layer_separation, schema_quality
1010

1111

1212
def _make_project(tmp_path: Path, pkg: str = "my_tool", files: dict[str, str] | None = None):

tests/test_rules.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44

55
from pathlib import Path
66

7-
from agentlint.core.config import load_config
8-
from agentlint.core.models import LintConfig
9-
from agentlint.rules import dependency, pyproject_rules, structure
7+
from toolint.core.config import load_config
8+
from toolint.core.models import LintConfig
9+
from toolint.rules import dependency, pyproject_rules, structure
1010

1111

1212
def _make_project(tmp_path: Path, pkg: str = "my_tool", files: dict[str, str] | None = None):

toolint/__init__.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
"""Toolint: Structural linter for MCP-compatible Python agent tool packages."""
2+
3+
from toolint.core.models import LintResult, RuleDefinition, Severity
4+
from toolint.engine import LintEngine
5+
6+
__all__ = [
7+
"LintEngine",
8+
"LintResult",
9+
"RuleDefinition",
10+
"Severity",
11+
]
12+
13+
__version__ = "0.1.0"
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
"""CLI entry point: python -m agentlint."""
1+
"""CLI entry point: python -m toolint."""
22

33
from __future__ import annotations
44

55
import argparse
66
import sys
77

8-
from agentlint import __version__
8+
from toolint import __version__
99

1010

1111
def _build_parser() -> argparse.ArgumentParser:
1212
parser = argparse.ArgumentParser(
13-
prog="agentlint",
13+
prog="toolint",
1414
description="Structural linter for MCP-compatible Python agent tool packages",
1515
)
1616
parser.add_argument("--version", action="version", version=f"%(prog)s {__version__}")
@@ -48,15 +48,15 @@ def _build_parser() -> argparse.ArgumentParser:
4848

4949
def _get_engine() -> LintEngine: # noqa: F821
5050
"""Create a LintEngine with all rules registered."""
51-
from agentlint.engine import LintEngine
51+
from toolint.engine import LintEngine
5252

5353
engine = LintEngine()
5454

5555
# Import rule modules to trigger registration
5656
# (rules use @engine.rule decorator or register directly)
5757
# For now, rules register themselves into a global registry,
5858
# then we load them into the engine.
59-
from agentlint.rules import registry
59+
from toolint.rules import registry
6060

6161
for rule_id, rule_def, checker in registry.get_all():
6262
engine.register(
@@ -73,7 +73,7 @@ def _get_engine() -> LintEngine: # noqa: F821
7373

7474
def cmd_check(args: argparse.Namespace) -> int:
7575
"""Run lint checks and return exit code (0=clean, 1=issues found)."""
76-
from agentlint.formatters import format_json, format_text
76+
from toolint.formatters import format_json, format_text
7777

7878
engine = _get_engine()
7979

@@ -88,7 +88,7 @@ def cmd_check(args: argparse.Namespace) -> int:
8888
print(format_text(results))
8989

9090
# Exit code: 1 if any errors
91-
from agentlint.core.models import Severity
91+
from toolint.core.models import Severity
9292

9393
has_errors = any(r.severity == Severity.ERROR for r in results)
9494
return 1 if has_errors else 0

0 commit comments

Comments
 (0)