clink-cli 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {clink_cli-0.2.1/clink_cli.egg-info → clink_cli-0.2.2}/PKG-INFO +38 -27
- {clink_cli-0.2.1 → clink_cli-0.2.2}/README.md +36 -25
- {clink_cli-0.2.1 → clink_cli-0.2.2/clink_cli.egg-info}/PKG-INFO +38 -27
- {clink_cli-0.2.1 → clink_cli-0.2.2}/config.py +1 -1
- {clink_cli-0.2.1 → clink_cli-0.2.2}/pyproject.toml +2 -2
- {clink_cli-0.2.1 → clink_cli-0.2.2}/LICENSE +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/MANIFEST.in +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/agents/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/agents/base.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/agents/claude.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/agents/codex.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/agents/gemini.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/allowed_roots.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/backend.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/cli.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/constants.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/contracts.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/files.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/generation_capabilities.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/generation_contracts.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/generation_policy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/models.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_adapters.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_contracts.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation_claude_policy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation_contracts.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation_families.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation_family_policy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation_files.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_generation_policy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/native_policy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/agy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/agy_native.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/agy_native_generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/base.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/claude.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/claude_native.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/claude_native_generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/codex.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/codex_generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/codex_native.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/codex_native_generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/gemini.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/grok.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/grok_native.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/parsers/grok_native_generation.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/policy.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/registry.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/CODEX-LICENSE +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/CODEX-NOTICE +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/PROVENANCE.md +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/codex-0.166.0-models-direct.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/codex-0.166.0-models-generation.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-agy-1.4.12-admission.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-claude-2.1.304-admission.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-generation-claude-2.1.304-admission.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-generation-codex-0.166.0-admission.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-generation-grok-1.0.70-admission.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-grok-1.0.70-admission.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/runner.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/setup.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink/tasks.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink_cli.egg-info/SOURCES.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink_cli.egg-info/dependency_links.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink_cli.egg-info/entry_points.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink_cli.egg-info/requires.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/clink_cli.egg-info/top_level.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/conf/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/conf/cli_clients/agy.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/conf/cli_clients/claude.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/conf/cli_clients/codex.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/conf/cli_clients/gemini.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/conf/cli_clients/grok.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/integrations/claude/.claude-plugin/plugin.json +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/integrations/claude/skills/setup/SKILL.md +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/requirements.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/server.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/setup.cfg +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/analyze_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/chat_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/codex_codereviewer.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/default.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/default_codereviewer.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/default_planner.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/native_codereviewer.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/native_default.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/clink/native_planner.txt +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/codereview_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/consensus_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/debug_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/docgen_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/generate_code_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/planner_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/precommit_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/refactor_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/secaudit_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/testgen_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/thinkdeep_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/systemprompts/tracer_prompt.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/analyze.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/apilookup.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/challenge.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/chat.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/clink.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/codereview.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/consensus.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/debug.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/docgen.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/listmodels.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/models.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/planner.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/precommit.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/refactor.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/secaudit.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/shared/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/shared/base_models.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/shared/base_tool.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/shared/exceptions.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/shared/schema_builders.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/simple/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/simple/base.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/testgen.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/thinkdeep.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/tracer.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/version.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/workflow/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/workflow/base.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/workflow/schema_builders.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/tools/workflow/workflow_mixin.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/__init__.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/call_state.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/client_info.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/consensus_manifest.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/conversation_memory.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/env.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/file_types.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/file_utils.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/image_utils.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/security_config.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/storage_backend.py +0 -0
- {clink_cli-0.2.1 → clink_cli-0.2.2}/utils/token_utils.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clink-cli
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: CLI
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Call installed CLI agents from scripts with JSON, or connect them to an MCP client
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/acebytes/clink-mcp-server
|
|
7
7
|
Project-URL: Repository, https://github.com/acebytes/clink-mcp-server
|
|
@@ -16,13 +16,32 @@ Requires-Dist: pydantic>=2.0.0
|
|
|
16
16
|
Requires-Dist: python-dotenv>=1.0.0
|
|
17
17
|
Dynamic: license-file
|
|
18
18
|
|
|
19
|
-
#
|
|
19
|
+
# Clink CLI and MCP server
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Use `clink generate` to send a JSON request to an installed CLI agent from a script and read the result on stdout. To use Clink from Claude Code or another MCP client, connect `clink-mcp-server` for access to 18 tools. One Python package, `clink-cli`, installs both commands.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Consultations return advice and proposed code. Explicit native tasks can edit files, run tests, and use the selected agent’s configured tools and permissions.
|
|
24
24
|
|
|
25
|
-
Derived from [PAL MCP Server](https://github.com/BeehiveInnovations/pal-mcp-server), formerly Zen MCP. **Copyright 2025 Beehive Innovations.** Retains upstream attribution and the [Apache 2.0 license](LICENSE).
|
|
25
|
+
Derived from [PAL MCP Server](https://github.com/BeehiveInnovations/pal-mcp-server), formerly Zen MCP. **Copyright 2025 Beehive Innovations.** Retains upstream attribution and the [Apache 2.0 license](https://github.com/acebytes/clink-mcp-server/blob/main/LICENSE).
|
|
26
|
+
|
|
27
|
+
## Install with uv
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
uv tool install clink-cli
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This installs both `clink` and `clink-mcp-server` from [PyPI](https://pypi.org/project/clink-cli/). If you installed the v0.2.0 GitHub wheel with uv, run `uv tool uninstall clink-mcp-server` first to free the command names.
|
|
34
|
+
|
|
35
|
+
## Connect to Claude Code
|
|
36
|
+
|
|
37
|
+
From the project directory where you use Claude Code, run:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
claude mcp add --scope local --transport stdio clink -- "$(uv tool dir --bin)/clink-mcp-server" --project "$PWD"
|
|
41
|
+
claude mcp get clink
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Look for **Connected**. Local scope keeps the registration private to you in this project, and `--project "$PWD"` tells Clink which workspace to use. Open Claude Code in the same directory and run `/mcp` to see `clink`. To check the connection without calling a model, ask Claude to use Clink’s `version` tool.
|
|
26
45
|
|
|
27
46
|
## Supported operations
|
|
28
47
|
|
|
@@ -36,27 +55,19 @@ Admission is specific to an operation, executable, launch recipe, and parser. Su
|
|
|
36
55
|
| Antigravity 1.4.12 (`agy`) | Unverified. | Admitted. | Implemented but unverified; execution is refused. |
|
|
37
56
|
| Gemini | Unverified. | Not implemented. | Not implemented. |
|
|
38
57
|
|
|
39
|
-
The recorded admissions cover exact macOS arm64 binaries. Other builds, operating systems, versions, or changed recipes require verification and fail closed. An installed executable or successful login alone is insufficient. Grok reported `grok-4.7-build` in the recorded successful generation text/action checks. Antigravity's native-task actual model remains unknown; its native-task admission does not admit generation. See [release evidence and limits](docs/release-evidence.md).
|
|
58
|
+
The recorded admissions cover exact macOS arm64 binaries. Other builds, operating systems, versions, or changed recipes require verification and fail closed. An installed executable or successful login alone is insufficient. Grok reported `grok-4.7-build` in the recorded successful generation text/action checks. Antigravity's native-task actual model remains unknown; its native-task admission does not admit generation. See [release evidence and limits](https://github.com/acebytes/clink-mcp-server/blob/main/docs/release-evidence.md).
|
|
40
59
|
|
|
41
|
-
Python 3.10+ is required; Python 3.12 is the tested runtime. Process supervision targets POSIX systems. Local discovery and offline tests can run without CLI credentials. Native Windows delegation is unavailable; the [container](docker/README.md) supports local tools without installing CLI agents.
|
|
60
|
+
Python 3.10+ is required; Python 3.12 is the tested runtime. Process supervision targets POSIX systems. Local discovery and offline tests can run without CLI credentials. Native Windows delegation is unavailable; the [container](https://github.com/acebytes/clink-mcp-server/blob/main/docker/README.md) supports local tools without installing CLI agents.
|
|
42
61
|
|
|
43
62
|
## Install and connect
|
|
44
63
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```sh
|
|
48
|
-
uv tool install clink-cli
|
|
49
|
-
clink generation-capabilities --json
|
|
50
|
-
clink-mcp-server --help
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
If you installed the v0.2.0 GitHub wheel with uv, run `uv tool uninstall clink-mcp-server` first so both executable names are available to the new distribution.
|
|
64
|
+
### Install from a wheel or source checkout
|
|
54
65
|
|
|
55
66
|
For a standalone wheel installation, replace the wheel path and choose a persistent environment outside the source tree:
|
|
56
67
|
|
|
57
68
|
```sh
|
|
58
69
|
python3 -m venv /absolute/path/to/clink-runtime
|
|
59
|
-
/absolute/path/to/clink-runtime/bin/python -m pip install /absolute/path/to/clink_cli-0.2.
|
|
70
|
+
/absolute/path/to/clink-runtime/bin/python -m pip install /absolute/path/to/clink_cli-0.2.2-py3-none-any.whl
|
|
60
71
|
/absolute/path/to/clink-runtime/bin/python -m clink.setup --project /absolute/path/to/your-project
|
|
61
72
|
```
|
|
62
73
|
|
|
@@ -73,14 +84,14 @@ The installed package contains its manifests, prompts, and admission resources.
|
|
|
73
84
|
}
|
|
74
85
|
```
|
|
75
86
|
|
|
76
|
-
Alternatively, from the reviewed 0.2.
|
|
87
|
+
Alternatively, from the reviewed 0.2.2 source tree:
|
|
77
88
|
|
|
78
89
|
```sh
|
|
79
90
|
cd /absolute/path/to/clink-mcp-server
|
|
80
91
|
./run-server.sh --setup
|
|
81
92
|
```
|
|
82
93
|
|
|
83
|
-
This explicitly creates `.venv`, installs runtime requirements, and exits. Ordinary startup installs nothing. The launcher does not create `.env`, copy credentials, change native CLI configuration, or register MCP clients. Optional server settings are documented in [.env.example](.env.example). To build a wheel from this tree, install the development requirements and run `.venv/bin/python -m build`; the wheel is written under `dist/`.
|
|
94
|
+
This explicitly creates `.venv`, installs runtime requirements, and exits. Ordinary startup installs nothing. The launcher does not create `.env`, copy credentials, change native CLI configuration, or register MCP clients. Optional server settings are documented in [.env.example](https://github.com/acebytes/clink-mcp-server/blob/main/.env.example). To build a wheel from this tree, install the development requirements and run `.venv/bin/python -m build`; the wheel is written under `dist/`.
|
|
84
95
|
|
|
85
96
|
Configure an existing project from that source installation:
|
|
86
97
|
|
|
@@ -97,7 +108,7 @@ cd /absolute/path/to/your-project
|
|
|
97
108
|
claude --plugin-dir /absolute/path/to/clink-mcp-server/integrations/claude
|
|
98
109
|
```
|
|
99
110
|
|
|
100
|
-
Then run `/clink:setup`. This command is available only when that local plugin is loaded; MCP registration alone does not install it. See the [project setup guide](docs/project-setup.md) for selected clients, configuration precedence, conflicts, and recovery.
|
|
111
|
+
Then run `/clink:setup`. This command is available only when that local plugin is loaded; MCP registration alone does not install it. See the [project setup guide](https://github.com/acebytes/clink-mcp-server/blob/main/docs/project-setup.md) for selected clients, configuration precedence, conflicts, and recovery.
|
|
101
112
|
|
|
102
113
|
For another MCP client, adapt this stdio registration to its configuration format:
|
|
103
114
|
|
|
@@ -112,7 +123,7 @@ For another MCP client, adapt this stdio registration to its configuration forma
|
|
|
112
123
|
}
|
|
113
124
|
```
|
|
114
125
|
|
|
115
|
-
Authenticate the chosen CLI through its own login mechanism before an admitted model call. Ensure the MCP client's `PATH` can find it, or configure its executable path in a manifest. The server does not require hosted-provider API keys. See [getting started](docs/getting-started.md), [CLI configuration](docs/cli-configuration.md), and [migration from PAL](docs/migration.md).
|
|
126
|
+
Authenticate the chosen CLI through its own login mechanism before an admitted model call. Ensure the MCP client's `PATH` can find it, or configure its executable path in a manifest. The server does not require hosted-provider API keys. See [getting started](https://github.com/acebytes/clink-mcp-server/blob/main/docs/getting-started.md), [CLI configuration](https://github.com/acebytes/clink-mcp-server/blob/main/docs/cli-configuration.md), and [migration from PAL](https://github.com/acebytes/clink-mcp-server/blob/main/docs/migration.md).
|
|
116
127
|
|
|
117
128
|
## Consult or delegate
|
|
118
129
|
|
|
@@ -149,7 +160,7 @@ Save the returned `task_handle`. Poll, follow up when `followup_available` is tr
|
|
|
149
160
|
{"action":"cancel","task_handle":"<returned task_handle>"}
|
|
150
161
|
```
|
|
151
162
|
|
|
152
|
-
A follow-up resumes the private native session with a new attempt; native handles are separate from consultation `continuation_id` values. Identical submissions with the same request key are deduplicated while retained. Changed input with that key returns `request_key_conflict`. Handles, session mapping, and deduplication are volatile and are lost on restart. See [native task usage](docs/native-cli-tasks.md) for states, bounds, and ownership rules.
|
|
163
|
+
A follow-up resumes the private native session with a new attempt; native handles are separate from consultation `continuation_id` values. Identical submissions with the same request key are deduplicated while retained. Changed input with that key returns `request_key_conflict`. Handles, session mapping, and deduplication are volatile and are lost on restart. See [native task usage](https://github.com/acebytes/clink-mcp-server/blob/main/docs/native-cli-tasks.md) for states, bounds, and ownership rules.
|
|
153
164
|
|
|
154
165
|
## Programmatic generation
|
|
155
166
|
|
|
@@ -192,7 +203,7 @@ Schema 3 example `request.json`, using an existing canonical project path:
|
|
|
192
203
|
|
|
193
204
|
Generation reads one JSON request followed by EOF and writes one terminal JSON result. Schema 3 uses `model_selection`: Codex and Claude require `{"kind":"explicit","id":"<native model ID>"}`; Grok and Antigravity accept only `{"kind":"native_default"}`. Antigravity still refuses execution because its generation admission is unverified. Schema 2 preserves Codex/Claude's explicit `model` field. The older no-tools schema 1 profile remains refused.
|
|
194
205
|
|
|
195
|
-
Each accepted request makes at most one top-level CLI invocation, with no wrapper retry, resume, or fallback. Only `status: "completed"` with exit `0` is ordinary success; validate the result's request identity and hashes before using its text. Completion validates final-response transport, not fulfillment. Requested/effective model selection is distinct from CLI-reported actual identity, which remains `null` when unreported. See [generation setup](docs/generation-native-setup.md), [schema 2 protocol](docs/generation-native-protocol.md), and [schema 3 and family discovery](docs/generation-native-families.md).
|
|
206
|
+
Each accepted request makes at most one top-level CLI invocation, with no wrapper retry, resume, or fallback. Only `status: "completed"` with exit `0` is ordinary success; validate the result's request identity and hashes before using its text. Completion validates final-response transport, not fulfillment. Requested/effective model selection is distinct from CLI-reported actual identity, which remains `null` when unreported. See [generation setup](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-setup.md), [schema 2 protocol](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-protocol.md), and [schema 3 and family discovery](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-families.md).
|
|
196
207
|
|
|
197
208
|
## Tools and configuration
|
|
198
209
|
|
|
@@ -207,9 +218,9 @@ All 18 tools are enabled unless listed in `DISABLED_TOOLS`; `version` and `listm
|
|
|
207
218
|
| `planner`, `docgen`, `tracer`, `challenge` | Local workflow guidance. |
|
|
208
219
|
| `listmodels`, `version` | Local configuration discovery and provenance. |
|
|
209
220
|
|
|
210
|
-
Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → user `~/.clink/cli_clients/` → explicitly bound project `.clink/cli_clients/` → `CLI_CLIENTS_CONFIG_PATH`. Each later manifest replaces the entire named client. Consultation and native task model defaults are separate; generation has its own request and admission contracts. See [CLI configuration](docs/cli-configuration.md).
|
|
221
|
+
Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → user `~/.clink/cli_clients/` → explicitly bound project `.clink/cli_clients/` → `CLI_CLIENTS_CONFIG_PATH`. Each later manifest replaces the entire named client. Consultation and native task model defaults are separate; generation has its own request and admission contracts. See [CLI configuration](https://github.com/acebytes/clink-mcp-server/blob/main/docs/cli-configuration.md).
|
|
211
222
|
|
|
212
|
-
**Risk & Mitigation:** Native execution can change files or external systems before failure or cancellation. Approved roots constrain project selection and supplied context, not all native authority. Cancellation does not roll back effects or guarantee detached/remote work stopped. Inspect actual changes and independently run checks before accepting work. Clink preserves native permission controls and provides no approval bypass or relay. See [security policy](SECURITY.md).
|
|
223
|
+
**Risk & Mitigation:** Native execution can change files or external systems before failure or cancellation. Approved roots constrain project selection and supplied context, not all native authority. Cancellation does not roll back effects or guarantee detached/remote work stopped. Inspect actual changes and independently run checks before accepting work. Clink preserves native permission controls and provides no approval bypass or relay. See [security policy](https://github.com/acebytes/clink-mcp-server/blob/main/SECURITY.md).
|
|
213
224
|
|
|
214
225
|
## Development
|
|
215
226
|
|
|
@@ -222,4 +233,4 @@ Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → use
|
|
|
222
233
|
.venv/bin/python -m build
|
|
223
234
|
```
|
|
224
235
|
|
|
225
|
-
Ordinary verification uses synthetic executables and makes no live model calls. Historical live verification requires the private evidence and approval process; the public verification scripts do not submit model requests. See [release evidence](docs/release-evidence.md) and [changelog](CHANGELOG.md). Report bugs in this fork's [issue tracker](https://github.com/acebytes/clink-mcp-server/issues), excluding secrets and private transcripts.
|
|
236
|
+
Ordinary verification uses synthetic executables and makes no live model calls. Historical live verification requires the private evidence and approval process; the public verification scripts do not submit model requests. See [release evidence](https://github.com/acebytes/clink-mcp-server/blob/main/docs/release-evidence.md) and [changelog](https://github.com/acebytes/clink-mcp-server/blob/main/CHANGELOG.md). Report bugs in this fork's [issue tracker](https://github.com/acebytes/clink-mcp-server/issues), excluding secrets and private transcripts.
|
|
@@ -1,10 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Clink CLI and MCP server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Use `clink generate` to send a JSON request to an installed CLI agent from a script and read the result on stdout. To use Clink from Claude Code or another MCP client, connect `clink-mcp-server` for access to 18 tools. One Python package, `clink-cli`, installs both commands.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Consultations return advice and proposed code. Explicit native tasks can edit files, run tests, and use the selected agent’s configured tools and permissions.
|
|
6
6
|
|
|
7
|
-
Derived from [PAL MCP Server](https://github.com/BeehiveInnovations/pal-mcp-server), formerly Zen MCP. **Copyright 2025 Beehive Innovations.** Retains upstream attribution and the [Apache 2.0 license](LICENSE).
|
|
7
|
+
Derived from [PAL MCP Server](https://github.com/BeehiveInnovations/pal-mcp-server), formerly Zen MCP. **Copyright 2025 Beehive Innovations.** Retains upstream attribution and the [Apache 2.0 license](https://github.com/acebytes/clink-mcp-server/blob/main/LICENSE).
|
|
8
|
+
|
|
9
|
+
## Install with uv
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
uv tool install clink-cli
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
This installs both `clink` and `clink-mcp-server` from [PyPI](https://pypi.org/project/clink-cli/). If you installed the v0.2.0 GitHub wheel with uv, run `uv tool uninstall clink-mcp-server` first to free the command names.
|
|
16
|
+
|
|
17
|
+
## Connect to Claude Code
|
|
18
|
+
|
|
19
|
+
From the project directory where you use Claude Code, run:
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
claude mcp add --scope local --transport stdio clink -- "$(uv tool dir --bin)/clink-mcp-server" --project "$PWD"
|
|
23
|
+
claude mcp get clink
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Look for **Connected**. Local scope keeps the registration private to you in this project, and `--project "$PWD"` tells Clink which workspace to use. Open Claude Code in the same directory and run `/mcp` to see `clink`. To check the connection without calling a model, ask Claude to use Clink’s `version` tool.
|
|
8
27
|
|
|
9
28
|
## Supported operations
|
|
10
29
|
|
|
@@ -18,27 +37,19 @@ Admission is specific to an operation, executable, launch recipe, and parser. Su
|
|
|
18
37
|
| Antigravity 1.4.12 (`agy`) | Unverified. | Admitted. | Implemented but unverified; execution is refused. |
|
|
19
38
|
| Gemini | Unverified. | Not implemented. | Not implemented. |
|
|
20
39
|
|
|
21
|
-
The recorded admissions cover exact macOS arm64 binaries. Other builds, operating systems, versions, or changed recipes require verification and fail closed. An installed executable or successful login alone is insufficient. Grok reported `grok-4.7-build` in the recorded successful generation text/action checks. Antigravity's native-task actual model remains unknown; its native-task admission does not admit generation. See [release evidence and limits](docs/release-evidence.md).
|
|
40
|
+
The recorded admissions cover exact macOS arm64 binaries. Other builds, operating systems, versions, or changed recipes require verification and fail closed. An installed executable or successful login alone is insufficient. Grok reported `grok-4.7-build` in the recorded successful generation text/action checks. Antigravity's native-task actual model remains unknown; its native-task admission does not admit generation. See [release evidence and limits](https://github.com/acebytes/clink-mcp-server/blob/main/docs/release-evidence.md).
|
|
22
41
|
|
|
23
|
-
Python 3.10+ is required; Python 3.12 is the tested runtime. Process supervision targets POSIX systems. Local discovery and offline tests can run without CLI credentials. Native Windows delegation is unavailable; the [container](docker/README.md) supports local tools without installing CLI agents.
|
|
42
|
+
Python 3.10+ is required; Python 3.12 is the tested runtime. Process supervision targets POSIX systems. Local discovery and offline tests can run without CLI credentials. Native Windows delegation is unavailable; the [container](https://github.com/acebytes/clink-mcp-server/blob/main/docker/README.md) supports local tools without installing CLI agents.
|
|
24
43
|
|
|
25
44
|
## Install and connect
|
|
26
45
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
```sh
|
|
30
|
-
uv tool install clink-cli
|
|
31
|
-
clink generation-capabilities --json
|
|
32
|
-
clink-mcp-server --help
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
If you installed the v0.2.0 GitHub wheel with uv, run `uv tool uninstall clink-mcp-server` first so both executable names are available to the new distribution.
|
|
46
|
+
### Install from a wheel or source checkout
|
|
36
47
|
|
|
37
48
|
For a standalone wheel installation, replace the wheel path and choose a persistent environment outside the source tree:
|
|
38
49
|
|
|
39
50
|
```sh
|
|
40
51
|
python3 -m venv /absolute/path/to/clink-runtime
|
|
41
|
-
/absolute/path/to/clink-runtime/bin/python -m pip install /absolute/path/to/clink_cli-0.2.
|
|
52
|
+
/absolute/path/to/clink-runtime/bin/python -m pip install /absolute/path/to/clink_cli-0.2.2-py3-none-any.whl
|
|
42
53
|
/absolute/path/to/clink-runtime/bin/python -m clink.setup --project /absolute/path/to/your-project
|
|
43
54
|
```
|
|
44
55
|
|
|
@@ -55,14 +66,14 @@ The installed package contains its manifests, prompts, and admission resources.
|
|
|
55
66
|
}
|
|
56
67
|
```
|
|
57
68
|
|
|
58
|
-
Alternatively, from the reviewed 0.2.
|
|
69
|
+
Alternatively, from the reviewed 0.2.2 source tree:
|
|
59
70
|
|
|
60
71
|
```sh
|
|
61
72
|
cd /absolute/path/to/clink-mcp-server
|
|
62
73
|
./run-server.sh --setup
|
|
63
74
|
```
|
|
64
75
|
|
|
65
|
-
This explicitly creates `.venv`, installs runtime requirements, and exits. Ordinary startup installs nothing. The launcher does not create `.env`, copy credentials, change native CLI configuration, or register MCP clients. Optional server settings are documented in [.env.example](.env.example). To build a wheel from this tree, install the development requirements and run `.venv/bin/python -m build`; the wheel is written under `dist/`.
|
|
76
|
+
This explicitly creates `.venv`, installs runtime requirements, and exits. Ordinary startup installs nothing. The launcher does not create `.env`, copy credentials, change native CLI configuration, or register MCP clients. Optional server settings are documented in [.env.example](https://github.com/acebytes/clink-mcp-server/blob/main/.env.example). To build a wheel from this tree, install the development requirements and run `.venv/bin/python -m build`; the wheel is written under `dist/`.
|
|
66
77
|
|
|
67
78
|
Configure an existing project from that source installation:
|
|
68
79
|
|
|
@@ -79,7 +90,7 @@ cd /absolute/path/to/your-project
|
|
|
79
90
|
claude --plugin-dir /absolute/path/to/clink-mcp-server/integrations/claude
|
|
80
91
|
```
|
|
81
92
|
|
|
82
|
-
Then run `/clink:setup`. This command is available only when that local plugin is loaded; MCP registration alone does not install it. See the [project setup guide](docs/project-setup.md) for selected clients, configuration precedence, conflicts, and recovery.
|
|
93
|
+
Then run `/clink:setup`. This command is available only when that local plugin is loaded; MCP registration alone does not install it. See the [project setup guide](https://github.com/acebytes/clink-mcp-server/blob/main/docs/project-setup.md) for selected clients, configuration precedence, conflicts, and recovery.
|
|
83
94
|
|
|
84
95
|
For another MCP client, adapt this stdio registration to its configuration format:
|
|
85
96
|
|
|
@@ -94,7 +105,7 @@ For another MCP client, adapt this stdio registration to its configuration forma
|
|
|
94
105
|
}
|
|
95
106
|
```
|
|
96
107
|
|
|
97
|
-
Authenticate the chosen CLI through its own login mechanism before an admitted model call. Ensure the MCP client's `PATH` can find it, or configure its executable path in a manifest. The server does not require hosted-provider API keys. See [getting started](docs/getting-started.md), [CLI configuration](docs/cli-configuration.md), and [migration from PAL](docs/migration.md).
|
|
108
|
+
Authenticate the chosen CLI through its own login mechanism before an admitted model call. Ensure the MCP client's `PATH` can find it, or configure its executable path in a manifest. The server does not require hosted-provider API keys. See [getting started](https://github.com/acebytes/clink-mcp-server/blob/main/docs/getting-started.md), [CLI configuration](https://github.com/acebytes/clink-mcp-server/blob/main/docs/cli-configuration.md), and [migration from PAL](https://github.com/acebytes/clink-mcp-server/blob/main/docs/migration.md).
|
|
98
109
|
|
|
99
110
|
## Consult or delegate
|
|
100
111
|
|
|
@@ -131,7 +142,7 @@ Save the returned `task_handle`. Poll, follow up when `followup_available` is tr
|
|
|
131
142
|
{"action":"cancel","task_handle":"<returned task_handle>"}
|
|
132
143
|
```
|
|
133
144
|
|
|
134
|
-
A follow-up resumes the private native session with a new attempt; native handles are separate from consultation `continuation_id` values. Identical submissions with the same request key are deduplicated while retained. Changed input with that key returns `request_key_conflict`. Handles, session mapping, and deduplication are volatile and are lost on restart. See [native task usage](docs/native-cli-tasks.md) for states, bounds, and ownership rules.
|
|
145
|
+
A follow-up resumes the private native session with a new attempt; native handles are separate from consultation `continuation_id` values. Identical submissions with the same request key are deduplicated while retained. Changed input with that key returns `request_key_conflict`. Handles, session mapping, and deduplication are volatile and are lost on restart. See [native task usage](https://github.com/acebytes/clink-mcp-server/blob/main/docs/native-cli-tasks.md) for states, bounds, and ownership rules.
|
|
135
146
|
|
|
136
147
|
## Programmatic generation
|
|
137
148
|
|
|
@@ -174,7 +185,7 @@ Schema 3 example `request.json`, using an existing canonical project path:
|
|
|
174
185
|
|
|
175
186
|
Generation reads one JSON request followed by EOF and writes one terminal JSON result. Schema 3 uses `model_selection`: Codex and Claude require `{"kind":"explicit","id":"<native model ID>"}`; Grok and Antigravity accept only `{"kind":"native_default"}`. Antigravity still refuses execution because its generation admission is unverified. Schema 2 preserves Codex/Claude's explicit `model` field. The older no-tools schema 1 profile remains refused.
|
|
176
187
|
|
|
177
|
-
Each accepted request makes at most one top-level CLI invocation, with no wrapper retry, resume, or fallback. Only `status: "completed"` with exit `0` is ordinary success; validate the result's request identity and hashes before using its text. Completion validates final-response transport, not fulfillment. Requested/effective model selection is distinct from CLI-reported actual identity, which remains `null` when unreported. See [generation setup](docs/generation-native-setup.md), [schema 2 protocol](docs/generation-native-protocol.md), and [schema 3 and family discovery](docs/generation-native-families.md).
|
|
188
|
+
Each accepted request makes at most one top-level CLI invocation, with no wrapper retry, resume, or fallback. Only `status: "completed"` with exit `0` is ordinary success; validate the result's request identity and hashes before using its text. Completion validates final-response transport, not fulfillment. Requested/effective model selection is distinct from CLI-reported actual identity, which remains `null` when unreported. See [generation setup](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-setup.md), [schema 2 protocol](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-protocol.md), and [schema 3 and family discovery](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-families.md).
|
|
178
189
|
|
|
179
190
|
## Tools and configuration
|
|
180
191
|
|
|
@@ -189,9 +200,9 @@ All 18 tools are enabled unless listed in `DISABLED_TOOLS`; `version` and `listm
|
|
|
189
200
|
| `planner`, `docgen`, `tracer`, `challenge` | Local workflow guidance. |
|
|
190
201
|
| `listmodels`, `version` | Local configuration discovery and provenance. |
|
|
191
202
|
|
|
192
|
-
Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → user `~/.clink/cli_clients/` → explicitly bound project `.clink/cli_clients/` → `CLI_CLIENTS_CONFIG_PATH`. Each later manifest replaces the entire named client. Consultation and native task model defaults are separate; generation has its own request and admission contracts. See [CLI configuration](docs/cli-configuration.md).
|
|
203
|
+
Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → user `~/.clink/cli_clients/` → explicitly bound project `.clink/cli_clients/` → `CLI_CLIENTS_CONFIG_PATH`. Each later manifest replaces the entire named client. Consultation and native task model defaults are separate; generation has its own request and admission contracts. See [CLI configuration](https://github.com/acebytes/clink-mcp-server/blob/main/docs/cli-configuration.md).
|
|
193
204
|
|
|
194
|
-
**Risk & Mitigation:** Native execution can change files or external systems before failure or cancellation. Approved roots constrain project selection and supplied context, not all native authority. Cancellation does not roll back effects or guarantee detached/remote work stopped. Inspect actual changes and independently run checks before accepting work. Clink preserves native permission controls and provides no approval bypass or relay. See [security policy](SECURITY.md).
|
|
205
|
+
**Risk & Mitigation:** Native execution can change files or external systems before failure or cancellation. Approved roots constrain project selection and supplied context, not all native authority. Cancellation does not roll back effects or guarantee detached/remote work stopped. Inspect actual changes and independently run checks before accepting work. Clink preserves native permission controls and provides no approval bypass or relay. See [security policy](https://github.com/acebytes/clink-mcp-server/blob/main/SECURITY.md).
|
|
195
206
|
|
|
196
207
|
## Development
|
|
197
208
|
|
|
@@ -204,4 +215,4 @@ Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → use
|
|
|
204
215
|
.venv/bin/python -m build
|
|
205
216
|
```
|
|
206
217
|
|
|
207
|
-
Ordinary verification uses synthetic executables and makes no live model calls. Historical live verification requires the private evidence and approval process; the public verification scripts do not submit model requests. See [release evidence](docs/release-evidence.md) and [changelog](CHANGELOG.md). Report bugs in this fork's [issue tracker](https://github.com/acebytes/clink-mcp-server/issues), excluding secrets and private transcripts.
|
|
218
|
+
Ordinary verification uses synthetic executables and makes no live model calls. Historical live verification requires the private evidence and approval process; the public verification scripts do not submit model requests. See [release evidence](https://github.com/acebytes/clink-mcp-server/blob/main/docs/release-evidence.md) and [changelog](https://github.com/acebytes/clink-mcp-server/blob/main/CHANGELOG.md). Report bugs in this fork's [issue tracker](https://github.com/acebytes/clink-mcp-server/issues), excluding secrets and private transcripts.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clink-cli
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: CLI
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Call installed CLI agents from scripts with JSON, or connect them to an MCP client
|
|
5
5
|
License-Expression: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/acebytes/clink-mcp-server
|
|
7
7
|
Project-URL: Repository, https://github.com/acebytes/clink-mcp-server
|
|
@@ -16,13 +16,32 @@ Requires-Dist: pydantic>=2.0.0
|
|
|
16
16
|
Requires-Dist: python-dotenv>=1.0.0
|
|
17
17
|
Dynamic: license-file
|
|
18
18
|
|
|
19
|
-
#
|
|
19
|
+
# Clink CLI and MCP server
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
Use `clink generate` to send a JSON request to an installed CLI agent from a script and read the result on stdout. To use Clink from Claude Code or another MCP client, connect `clink-mcp-server` for access to 18 tools. One Python package, `clink-cli`, installs both commands.
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Consultations return advice and proposed code. Explicit native tasks can edit files, run tests, and use the selected agent’s configured tools and permissions.
|
|
24
24
|
|
|
25
|
-
Derived from [PAL MCP Server](https://github.com/BeehiveInnovations/pal-mcp-server), formerly Zen MCP. **Copyright 2025 Beehive Innovations.** Retains upstream attribution and the [Apache 2.0 license](LICENSE).
|
|
25
|
+
Derived from [PAL MCP Server](https://github.com/BeehiveInnovations/pal-mcp-server), formerly Zen MCP. **Copyright 2025 Beehive Innovations.** Retains upstream attribution and the [Apache 2.0 license](https://github.com/acebytes/clink-mcp-server/blob/main/LICENSE).
|
|
26
|
+
|
|
27
|
+
## Install with uv
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
uv tool install clink-cli
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
This installs both `clink` and `clink-mcp-server` from [PyPI](https://pypi.org/project/clink-cli/). If you installed the v0.2.0 GitHub wheel with uv, run `uv tool uninstall clink-mcp-server` first to free the command names.
|
|
34
|
+
|
|
35
|
+
## Connect to Claude Code
|
|
36
|
+
|
|
37
|
+
From the project directory where you use Claude Code, run:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
claude mcp add --scope local --transport stdio clink -- "$(uv tool dir --bin)/clink-mcp-server" --project "$PWD"
|
|
41
|
+
claude mcp get clink
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Look for **Connected**. Local scope keeps the registration private to you in this project, and `--project "$PWD"` tells Clink which workspace to use. Open Claude Code in the same directory and run `/mcp` to see `clink`. To check the connection without calling a model, ask Claude to use Clink’s `version` tool.
|
|
26
45
|
|
|
27
46
|
## Supported operations
|
|
28
47
|
|
|
@@ -36,27 +55,19 @@ Admission is specific to an operation, executable, launch recipe, and parser. Su
|
|
|
36
55
|
| Antigravity 1.4.12 (`agy`) | Unverified. | Admitted. | Implemented but unverified; execution is refused. |
|
|
37
56
|
| Gemini | Unverified. | Not implemented. | Not implemented. |
|
|
38
57
|
|
|
39
|
-
The recorded admissions cover exact macOS arm64 binaries. Other builds, operating systems, versions, or changed recipes require verification and fail closed. An installed executable or successful login alone is insufficient. Grok reported `grok-4.7-build` in the recorded successful generation text/action checks. Antigravity's native-task actual model remains unknown; its native-task admission does not admit generation. See [release evidence and limits](docs/release-evidence.md).
|
|
58
|
+
The recorded admissions cover exact macOS arm64 binaries. Other builds, operating systems, versions, or changed recipes require verification and fail closed. An installed executable or successful login alone is insufficient. Grok reported `grok-4.7-build` in the recorded successful generation text/action checks. Antigravity's native-task actual model remains unknown; its native-task admission does not admit generation. See [release evidence and limits](https://github.com/acebytes/clink-mcp-server/blob/main/docs/release-evidence.md).
|
|
40
59
|
|
|
41
|
-
Python 3.10+ is required; Python 3.12 is the tested runtime. Process supervision targets POSIX systems. Local discovery and offline tests can run without CLI credentials. Native Windows delegation is unavailable; the [container](docker/README.md) supports local tools without installing CLI agents.
|
|
60
|
+
Python 3.10+ is required; Python 3.12 is the tested runtime. Process supervision targets POSIX systems. Local discovery and offline tests can run without CLI credentials. Native Windows delegation is unavailable; the [container](https://github.com/acebytes/clink-mcp-server/blob/main/docker/README.md) supports local tools without installing CLI agents.
|
|
42
61
|
|
|
43
62
|
## Install and connect
|
|
44
63
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
```sh
|
|
48
|
-
uv tool install clink-cli
|
|
49
|
-
clink generation-capabilities --json
|
|
50
|
-
clink-mcp-server --help
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
If you installed the v0.2.0 GitHub wheel with uv, run `uv tool uninstall clink-mcp-server` first so both executable names are available to the new distribution.
|
|
64
|
+
### Install from a wheel or source checkout
|
|
54
65
|
|
|
55
66
|
For a standalone wheel installation, replace the wheel path and choose a persistent environment outside the source tree:
|
|
56
67
|
|
|
57
68
|
```sh
|
|
58
69
|
python3 -m venv /absolute/path/to/clink-runtime
|
|
59
|
-
/absolute/path/to/clink-runtime/bin/python -m pip install /absolute/path/to/clink_cli-0.2.
|
|
70
|
+
/absolute/path/to/clink-runtime/bin/python -m pip install /absolute/path/to/clink_cli-0.2.2-py3-none-any.whl
|
|
60
71
|
/absolute/path/to/clink-runtime/bin/python -m clink.setup --project /absolute/path/to/your-project
|
|
61
72
|
```
|
|
62
73
|
|
|
@@ -73,14 +84,14 @@ The installed package contains its manifests, prompts, and admission resources.
|
|
|
73
84
|
}
|
|
74
85
|
```
|
|
75
86
|
|
|
76
|
-
Alternatively, from the reviewed 0.2.
|
|
87
|
+
Alternatively, from the reviewed 0.2.2 source tree:
|
|
77
88
|
|
|
78
89
|
```sh
|
|
79
90
|
cd /absolute/path/to/clink-mcp-server
|
|
80
91
|
./run-server.sh --setup
|
|
81
92
|
```
|
|
82
93
|
|
|
83
|
-
This explicitly creates `.venv`, installs runtime requirements, and exits. Ordinary startup installs nothing. The launcher does not create `.env`, copy credentials, change native CLI configuration, or register MCP clients. Optional server settings are documented in [.env.example](.env.example). To build a wheel from this tree, install the development requirements and run `.venv/bin/python -m build`; the wheel is written under `dist/`.
|
|
94
|
+
This explicitly creates `.venv`, installs runtime requirements, and exits. Ordinary startup installs nothing. The launcher does not create `.env`, copy credentials, change native CLI configuration, or register MCP clients. Optional server settings are documented in [.env.example](https://github.com/acebytes/clink-mcp-server/blob/main/.env.example). To build a wheel from this tree, install the development requirements and run `.venv/bin/python -m build`; the wheel is written under `dist/`.
|
|
84
95
|
|
|
85
96
|
Configure an existing project from that source installation:
|
|
86
97
|
|
|
@@ -97,7 +108,7 @@ cd /absolute/path/to/your-project
|
|
|
97
108
|
claude --plugin-dir /absolute/path/to/clink-mcp-server/integrations/claude
|
|
98
109
|
```
|
|
99
110
|
|
|
100
|
-
Then run `/clink:setup`. This command is available only when that local plugin is loaded; MCP registration alone does not install it. See the [project setup guide](docs/project-setup.md) for selected clients, configuration precedence, conflicts, and recovery.
|
|
111
|
+
Then run `/clink:setup`. This command is available only when that local plugin is loaded; MCP registration alone does not install it. See the [project setup guide](https://github.com/acebytes/clink-mcp-server/blob/main/docs/project-setup.md) for selected clients, configuration precedence, conflicts, and recovery.
|
|
101
112
|
|
|
102
113
|
For another MCP client, adapt this stdio registration to its configuration format:
|
|
103
114
|
|
|
@@ -112,7 +123,7 @@ For another MCP client, adapt this stdio registration to its configuration forma
|
|
|
112
123
|
}
|
|
113
124
|
```
|
|
114
125
|
|
|
115
|
-
Authenticate the chosen CLI through its own login mechanism before an admitted model call. Ensure the MCP client's `PATH` can find it, or configure its executable path in a manifest. The server does not require hosted-provider API keys. See [getting started](docs/getting-started.md), [CLI configuration](docs/cli-configuration.md), and [migration from PAL](docs/migration.md).
|
|
126
|
+
Authenticate the chosen CLI through its own login mechanism before an admitted model call. Ensure the MCP client's `PATH` can find it, or configure its executable path in a manifest. The server does not require hosted-provider API keys. See [getting started](https://github.com/acebytes/clink-mcp-server/blob/main/docs/getting-started.md), [CLI configuration](https://github.com/acebytes/clink-mcp-server/blob/main/docs/cli-configuration.md), and [migration from PAL](https://github.com/acebytes/clink-mcp-server/blob/main/docs/migration.md).
|
|
116
127
|
|
|
117
128
|
## Consult or delegate
|
|
118
129
|
|
|
@@ -149,7 +160,7 @@ Save the returned `task_handle`. Poll, follow up when `followup_available` is tr
|
|
|
149
160
|
{"action":"cancel","task_handle":"<returned task_handle>"}
|
|
150
161
|
```
|
|
151
162
|
|
|
152
|
-
A follow-up resumes the private native session with a new attempt; native handles are separate from consultation `continuation_id` values. Identical submissions with the same request key are deduplicated while retained. Changed input with that key returns `request_key_conflict`. Handles, session mapping, and deduplication are volatile and are lost on restart. See [native task usage](docs/native-cli-tasks.md) for states, bounds, and ownership rules.
|
|
163
|
+
A follow-up resumes the private native session with a new attempt; native handles are separate from consultation `continuation_id` values. Identical submissions with the same request key are deduplicated while retained. Changed input with that key returns `request_key_conflict`. Handles, session mapping, and deduplication are volatile and are lost on restart. See [native task usage](https://github.com/acebytes/clink-mcp-server/blob/main/docs/native-cli-tasks.md) for states, bounds, and ownership rules.
|
|
153
164
|
|
|
154
165
|
## Programmatic generation
|
|
155
166
|
|
|
@@ -192,7 +203,7 @@ Schema 3 example `request.json`, using an existing canonical project path:
|
|
|
192
203
|
|
|
193
204
|
Generation reads one JSON request followed by EOF and writes one terminal JSON result. Schema 3 uses `model_selection`: Codex and Claude require `{"kind":"explicit","id":"<native model ID>"}`; Grok and Antigravity accept only `{"kind":"native_default"}`. Antigravity still refuses execution because its generation admission is unverified. Schema 2 preserves Codex/Claude's explicit `model` field. The older no-tools schema 1 profile remains refused.
|
|
194
205
|
|
|
195
|
-
Each accepted request makes at most one top-level CLI invocation, with no wrapper retry, resume, or fallback. Only `status: "completed"` with exit `0` is ordinary success; validate the result's request identity and hashes before using its text. Completion validates final-response transport, not fulfillment. Requested/effective model selection is distinct from CLI-reported actual identity, which remains `null` when unreported. See [generation setup](docs/generation-native-setup.md), [schema 2 protocol](docs/generation-native-protocol.md), and [schema 3 and family discovery](docs/generation-native-families.md).
|
|
206
|
+
Each accepted request makes at most one top-level CLI invocation, with no wrapper retry, resume, or fallback. Only `status: "completed"` with exit `0` is ordinary success; validate the result's request identity and hashes before using its text. Completion validates final-response transport, not fulfillment. Requested/effective model selection is distinct from CLI-reported actual identity, which remains `null` when unreported. See [generation setup](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-setup.md), [schema 2 protocol](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-protocol.md), and [schema 3 and family discovery](https://github.com/acebytes/clink-mcp-server/blob/main/docs/generation-native-families.md).
|
|
196
207
|
|
|
197
208
|
## Tools and configuration
|
|
198
209
|
|
|
@@ -207,9 +218,9 @@ All 18 tools are enabled unless listed in `DISABLED_TOOLS`; `version` and `listm
|
|
|
207
218
|
| `planner`, `docgen`, `tracer`, `challenge` | Local workflow guidance. |
|
|
208
219
|
| `listmodels`, `version` | Local configuration discovery and provenance. |
|
|
209
220
|
|
|
210
|
-
Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → user `~/.clink/cli_clients/` → explicitly bound project `.clink/cli_clients/` → `CLI_CLIENTS_CONFIG_PATH`. Each later manifest replaces the entire named client. Consultation and native task model defaults are separate; generation has its own request and admission contracts. See [CLI configuration](docs/cli-configuration.md).
|
|
221
|
+
Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → user `~/.clink/cli_clients/` → explicitly bound project `.clink/cli_clients/` → `CLI_CLIENTS_CONFIG_PATH`. Each later manifest replaces the entire named client. Consultation and native task model defaults are separate; generation has its own request and admission contracts. See [CLI configuration](https://github.com/acebytes/clink-mcp-server/blob/main/docs/cli-configuration.md).
|
|
211
222
|
|
|
212
|
-
**Risk & Mitigation:** Native execution can change files or external systems before failure or cancellation. Approved roots constrain project selection and supplied context, not all native authority. Cancellation does not roll back effects or guarantee detached/remote work stopped. Inspect actual changes and independently run checks before accepting work. Clink preserves native permission controls and provides no approval bypass or relay. See [security policy](SECURITY.md).
|
|
223
|
+
**Risk & Mitigation:** Native execution can change files or external systems before failure or cancellation. Approved roots constrain project selection and supplied context, not all native authority. Cancellation does not roll back effects or guarantee detached/remote work stopped. Inspect actual changes and independently run checks before accepting work. Clink preserves native permission controls and provides no approval bypass or relay. See [security policy](https://github.com/acebytes/clink-mcp-server/blob/main/SECURITY.md).
|
|
213
224
|
|
|
214
225
|
## Development
|
|
215
226
|
|
|
@@ -222,4 +233,4 @@ Manifest precedence is bundled defaults → legacy `~/.pal/cli_clients/` → use
|
|
|
222
233
|
.venv/bin/python -m build
|
|
223
234
|
```
|
|
224
235
|
|
|
225
|
-
Ordinary verification uses synthetic executables and makes no live model calls. Historical live verification requires the private evidence and approval process; the public verification scripts do not submit model requests. See [release evidence](docs/release-evidence.md) and [changelog](CHANGELOG.md). Report bugs in this fork's [issue tracker](https://github.com/acebytes/clink-mcp-server/issues), excluding secrets and private transcripts.
|
|
236
|
+
Ordinary verification uses synthetic executables and makes no live model calls. Historical live verification requires the private evidence and approval process; the public verification scripts do not submit model requests. See [release evidence](https://github.com/acebytes/clink-mcp-server/blob/main/docs/release-evidence.md) and [changelog](https://github.com/acebytes/clink-mcp-server/blob/main/CHANGELOG.md). Report bugs in this fork's [issue tracker](https://github.com/acebytes/clink-mcp-server/issues), excluding secrets and private transcripts.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "clink-cli"
|
|
3
|
-
version = "0.2.
|
|
4
|
-
description = "CLI
|
|
3
|
+
version = "0.2.2"
|
|
4
|
+
description = "Call installed CLI agents from scripts with JSON, or connect them to an MCP client"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "Apache-2.0"
|
|
7
7
|
license-files = ["LICENSE", "clink/resources/CODEX-LICENSE", "clink/resources/CODEX-NOTICE"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-generation-claude-2.1.304-admission.json
RENAMED
|
File without changes
|
{clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-generation-codex-0.166.0-admission.json
RENAMED
|
File without changes
|
{clink_cli-0.2.1 → clink_cli-0.2.2}/clink/resources/native-generation-grok-1.0.70-admission.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|