lcode-cli 0.18.0__tar.gz → 0.20.0__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.
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/CHANGELOG.md +36 -1
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/PKG-INFO +3 -3
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/README.md +2 -2
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/configuration.md +2 -0
- lcode_cli-0.20.0/docs/editors.md +85 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/hooks.md +1 -1
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/quickstart.md +1 -1
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/usage.md +36 -1
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/mkdocs.yml +1 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/pyproject.toml +1 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/__init__.py +1 -1
- lcode_cli-0.20.0/src/lcode/acp.py +635 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/agent.py +39 -1
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/api.py +6 -2
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/cli.py +12 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/config.py +2 -0
- lcode_cli-0.20.0/src/lcode/jobs.py +165 -0
- lcode_cli-0.20.0/src/lcode/notify.py +43 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/permissions.py +5 -3
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/planning.py +8 -1
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/repl.py +26 -3
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/subagents.py +1 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/tools.py +100 -8
- lcode_cli-0.20.0/tests/test_acp.py +267 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_api.py +6 -1
- lcode_cli-0.20.0/tests/test_jobs.py +172 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.editorconfig +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/CODEOWNERS +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/ISSUE_TEMPLATE/model_request.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/dependabot.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/workflows/ci.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/workflows/docs.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.github/workflows/release.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.gitignore +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/.pre-commit-config.yaml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/AGENTS.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/CODE_OF_CONDUCT.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/CONTRIBUTING.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/LICENSE +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/SECURITY.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/action.yml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/agents.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/assets/demo.svg +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/assets/extra.css +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/assets/logo.svg +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/assets/social-preview.png +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/automation.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/bench.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/changelog.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/commands.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/contributing.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/git.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/how-it-works.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/index.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/installation.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/lsp.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/mcp.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/memory.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/models.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/sandbox.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/search.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/servers.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/docs/troubleshooting.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/examples/README.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/examples/api/fix_tests.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/examples/commands/review.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/examples/skills/commit-message/SKILL.md +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/examples/skills/commit-message/scripts/staged.sh +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/install.sh +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/overrides/main.html +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/scripts/record_demo.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/scripts/social-preview.html +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/__main__.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/action.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/backends.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/bench.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/bench_backend.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/catalog.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/checkpoints.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/codesearch.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/context.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/extensions.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/frontmatter.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/gitflow.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/hardware.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/hooks.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/limits.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/lsp.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/__init__.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/auth.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/catalog.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/catalog.toml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/client.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/commands.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/config.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/http.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/manager.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/protocol.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/server.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/mcp/stdio.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/memory.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/models.toml +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/ollama.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/render.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/repomap.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/sandbox.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/servers/__init__.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/servers/encord.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/servers/valohai.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/sessions.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/vision.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/src/lcode/web.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/conftest.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/fake_lsp_server.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/fake_mcp_server.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_action.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_agent.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_backends.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_bench.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_catalog.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_checkpoints.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_cli.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_codesearch.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_config.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_context.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_context_picker.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_extensions.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_gitflow.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_hooks.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_lsp.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_mcp.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_memory.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_permissions.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_plan_mode.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_repomap.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_sandbox.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_servers.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_sessions.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_subagents.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_tools.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_vision.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/tests/test_web.py +0 -0
- {lcode_cli-0.18.0 → lcode_cli-0.20.0}/uv.lock +0 -0
|
@@ -6,6 +6,39 @@ All notable changes to lcode are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.20.0] - 2026-10-06
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Background commands: the model starts a dev server, a watcher or another process that keeps
|
|
14
|
+
running with `bash` and `background: true`, reads its new output with `bash_output` and stops it
|
|
15
|
+
with `bash_stop`. `/jobs` lists them, and they all stop when the session ends.
|
|
16
|
+
- Desktop notifications (`notify-send` on Linux, `osascript` on macOS, else the terminal bell)
|
|
17
|
+
when a request that ran longer than 30 seconds is done, or lcode waits for your answer during
|
|
18
|
+
one. Settings: `notify` and `notify_after`.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
|
|
22
|
+
- A command that starts something with `&` no longer hangs until its timeout while that process
|
|
23
|
+
holds the output open. What it left running is stopped when it ends, and the model is told to
|
|
24
|
+
use a background command instead.
|
|
25
|
+
|
|
26
|
+
## [0.19.0] - 2026-10-06
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- `lcode acp`: lcode inside editors that speak the Agent Client Protocol (Zed, JetBrains IDEs,
|
|
31
|
+
Neovim, Emacs and others). The editor shows the answers and thinking as they stream, each tool
|
|
32
|
+
call with the files it touches and a diff for edits, and asks permission questions and plan
|
|
33
|
+
approvals in its own dialog. lcode's permission modes are the session's modes, the todo list is
|
|
34
|
+
the editor's plan, and saved sessions reopen with their conversation. The model reads the
|
|
35
|
+
editor's buffers (unsaved changes included) and edits through them, and MCP servers the editor
|
|
36
|
+
passes join lcode's own. See [Editors](https://nasser1941.github.io/lcode/editors/) for setup.
|
|
37
|
+
|
|
38
|
+
### Fixed
|
|
39
|
+
|
|
40
|
+
- Cancelling a request whose answer was cut off mid-stream no longer ends it as if it were done.
|
|
41
|
+
|
|
9
42
|
## [0.18.0] - 2026-10-06
|
|
10
43
|
|
|
11
44
|
### Added
|
|
@@ -434,7 +467,9 @@ First public release.
|
|
|
434
467
|
- `AGENTS.md` project instructions and `/init` to generate them.
|
|
435
468
|
- One-line installer for Linux and macOS.
|
|
436
469
|
|
|
437
|
-
[Unreleased]: https://github.com/nasser1941/lcode/compare/v0.
|
|
470
|
+
[Unreleased]: https://github.com/nasser1941/lcode/compare/v0.20.0...HEAD
|
|
471
|
+
[0.20.0]: https://github.com/nasser1941/lcode/compare/v0.19.0...v0.20.0
|
|
472
|
+
[0.19.0]: https://github.com/nasser1941/lcode/compare/v0.18.0...v0.19.0
|
|
438
473
|
[0.18.0]: https://github.com/nasser1941/lcode/compare/v0.17.0...v0.18.0
|
|
439
474
|
[0.17.0]: https://github.com/nasser1941/lcode/compare/v0.16.0...v0.17.0
|
|
440
475
|
[0.16.0]: https://github.com/nasser1941/lcode/compare/v0.15.0...v0.16.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: lcode-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.20.0
|
|
4
4
|
Summary: A local-first terminal coding agent powered by open-weight models on your own GPU or Mac, via Ollama.
|
|
5
5
|
Project-URL: Homepage, https://nasser1941.github.io/lcode/
|
|
6
6
|
Project-URL: Documentation, https://nasser1941.github.io/lcode/
|
|
@@ -104,6 +104,8 @@ through [Ollama](https://ollama.com), and when it needs current information it c
|
|
|
104
104
|
- **Git workflow.** `/commit` writes messages in your repository's style, `/review` checks the
|
|
105
105
|
changes with `file:line` findings, `/pr` opens the pull request, each after you approve it, and
|
|
106
106
|
`lcode --worktree` runs parallel sessions on one repository.
|
|
107
|
+
- **In your editor.** Zed, JetBrains IDEs, Neovim and other editors that speak the Agent Client
|
|
108
|
+
Protocol run lcode with `lcode acp`, with diffs and approvals in the editor.
|
|
107
109
|
- **Automation.** `lcode -p --output json` for scripts and CI, a Python API (`from lcode import
|
|
108
110
|
Session`), and a GitHub Action that answers `@lcode` in issues and pull requests on your own
|
|
109
111
|
self-hosted runner.
|
|
@@ -214,8 +216,6 @@ fills up. Details: [How it works](https://nasser1941.github.io/lcode/how-it-work
|
|
|
214
216
|
|
|
215
217
|
See the pinned [Roadmap issue](https://github.com/nasser1941/lcode/issues/10). Next up:
|
|
216
218
|
|
|
217
|
-
- [Editor integration through the Agent Client Protocol](https://github.com/nasser1941/lcode/issues/49)
|
|
218
|
-
- [Long-running work: finish notifications and background commands](https://github.com/nasser1941/lcode/issues/51)
|
|
219
219
|
- More models in the catalog, and test reports from your hardware ([report one](https://github.com/nasser1941/lcode/issues/new?template=model_request.yml))
|
|
220
220
|
|
|
221
221
|
## Contributing
|
|
@@ -68,6 +68,8 @@ through [Ollama](https://ollama.com), and when it needs current information it c
|
|
|
68
68
|
- **Git workflow.** `/commit` writes messages in your repository's style, `/review` checks the
|
|
69
69
|
changes with `file:line` findings, `/pr` opens the pull request, each after you approve it, and
|
|
70
70
|
`lcode --worktree` runs parallel sessions on one repository.
|
|
71
|
+
- **In your editor.** Zed, JetBrains IDEs, Neovim and other editors that speak the Agent Client
|
|
72
|
+
Protocol run lcode with `lcode acp`, with diffs and approvals in the editor.
|
|
71
73
|
- **Automation.** `lcode -p --output json` for scripts and CI, a Python API (`from lcode import
|
|
72
74
|
Session`), and a GitHub Action that answers `@lcode` in issues and pull requests on your own
|
|
73
75
|
self-hosted runner.
|
|
@@ -178,8 +180,6 @@ fills up. Details: [How it works](https://nasser1941.github.io/lcode/how-it-work
|
|
|
178
180
|
|
|
179
181
|
See the pinned [Roadmap issue](https://github.com/nasser1941/lcode/issues/10). Next up:
|
|
180
182
|
|
|
181
|
-
- [Editor integration through the Agent Client Protocol](https://github.com/nasser1941/lcode/issues/49)
|
|
182
|
-
- [Long-running work: finish notifications and background commands](https://github.com/nasser1941/lcode/issues/51)
|
|
183
183
|
- More models in the catalog, and test reports from your hardware ([report one](https://github.com/nasser1941/lcode/issues/new?template=model_request.yml))
|
|
184
184
|
|
|
185
185
|
## Contributing
|
|
@@ -40,6 +40,8 @@ lcode config path # print the file location
|
|
|
40
40
|
| `prune` | `true` | When the context is 85% full, first remove old tool output, and summarize the conversation only if that's not enough ([how](how-it-works.md#context-management)) |
|
|
41
41
|
| `subagents` | `true` | Let the model hand tasks to [subagents](agents.md) with their own context |
|
|
42
42
|
| `max_parallel_agents` | `1` | Subagents that run at the same time; more needs `OLLAMA_NUM_PARALLEL` on the Ollama server ([details](agents.md#several-at-once)) |
|
|
43
|
+
| `notify` | `true` | A desktop [notification](usage.md#notifications) when a long request is done or waits for your answer |
|
|
44
|
+
| `notify_after` | `30` | Seconds a request runs before it notifies |
|
|
43
45
|
| `checkpoints` | `true` | Save a checkpoint before the model changes files, so [`/undo`](usage.md#undo-and-checkpoints) can restore them |
|
|
44
46
|
|
|
45
47
|
Besides these settings, `config.toml` can hold [hooks](hooks.md) (`[[hooks]]`) and
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# Editors
|
|
2
|
+
|
|
3
|
+
lcode also works inside editors that support the
|
|
4
|
+
[Agent Client Protocol](https://agentclientprotocol.com) (ACP), such as Zed, JetBrains IDEs,
|
|
5
|
+
Neovim and Emacs. The editor starts `lcode acp` and shows lcode's work in its own UI: answers,
|
|
6
|
+
tool calls, a diff for each edit, and permission questions.
|
|
7
|
+
|
|
8
|
+
## Zed
|
|
9
|
+
|
|
10
|
+
Add lcode to Zed's `settings.json`:
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"agent_servers": {
|
|
15
|
+
"lcode": {
|
|
16
|
+
"type": "custom",
|
|
17
|
+
"command": "lcode",
|
|
18
|
+
"args": ["acp"],
|
|
19
|
+
"env": {}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Then open the Agent Panel and start a new thread with **lcode** from the new-thread menu.
|
|
26
|
+
|
|
27
|
+
- **Zed can't start lcode:** use the full path in `command`, from `which lcode` (usually
|
|
28
|
+
`~/.local/bin/lcode`). An editor started from the desktop may not see your shell's `PATH`.
|
|
29
|
+
- **Something goes wrong:** run **dev: open acp logs** in Zed's command palette to see the
|
|
30
|
+
messages lcode and Zed exchange.
|
|
31
|
+
|
|
32
|
+
## JetBrains IDEs
|
|
33
|
+
|
|
34
|
+
Add lcode to `~/.jetbrains/acp.json`, with the full path from `which lcode`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"agent_servers": {
|
|
39
|
+
"lcode": {
|
|
40
|
+
"command": "/home/you/.local/bin/lcode",
|
|
41
|
+
"args": ["acp"]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Then pick lcode in the AI Chat tool window.
|
|
48
|
+
|
|
49
|
+
## Other editors
|
|
50
|
+
|
|
51
|
+
Any [ACP client](https://agentclientprotocol.com/overview/clients) works the same way: tell it
|
|
52
|
+
to run `lcode acp`. That includes Neovim (CodeCompanion, avante.nvim), Emacs (agent-shell),
|
|
53
|
+
VS Code extensions and more.
|
|
54
|
+
|
|
55
|
+
## What the editor shows
|
|
56
|
+
|
|
57
|
+
| In the editor | From lcode |
|
|
58
|
+
|---|---|
|
|
59
|
+
| The conversation | lcode's answers and its thinking, as they stream |
|
|
60
|
+
| Tool calls | Each tool call, with its kind (read, search, edit, run, fetch) and the files it touches |
|
|
61
|
+
| Edits | A diff of the whole file for each edit |
|
|
62
|
+
| Open files | Edits go through the editor, so open files update right away. The model reads what's in the editor, unsaved changes included |
|
|
63
|
+
| Permission questions | **Allow**, **Always allow** (for this session) or **Reject**, in the editor's own dialog |
|
|
64
|
+
| Modes | lcode's [permission modes](usage.md#permissions): Ask, Auto-edit, Plan and Yolo |
|
|
65
|
+
| Plans | In Plan mode, the plan is approved in the editor, which then switches to Ask or Auto-edit |
|
|
66
|
+
| The plan list | The model's todo list |
|
|
67
|
+
| Context | How much of the context window is in use |
|
|
68
|
+
| Commands | `/review` and [your own commands](commands.md) |
|
|
69
|
+
| Past threads | lcode's saved sessions: an editor that reopens a thread gets its conversation back |
|
|
70
|
+
|
|
71
|
+
[Checkpoints](usage.md#undo-and-checkpoints), [hooks and permission rules](hooks.md),
|
|
72
|
+
[memory](memory.md), [subagents](agents.md) and [MCP servers](mcp.md) work as in the terminal.
|
|
73
|
+
MCP servers the editor passes to its agents are added to lcode's own.
|
|
74
|
+
|
|
75
|
+
## Settings
|
|
76
|
+
|
|
77
|
+
lcode uses your [configuration](configuration.md): the model, the context window, the
|
|
78
|
+
[model server](servers.md) and the default permission mode. To use different settings in an
|
|
79
|
+
editor, set them in the agent's `env`, for example `"env": {"LCODE_MODEL": "qwen3.5-9b"}`.
|
|
80
|
+
|
|
81
|
+
A repository's own commands, skills, agents and hooks are used only after you
|
|
82
|
+
[approve them](commands.md#approving-a-repositorys-commands-skills-and-agents). An editor can't
|
|
83
|
+
ask, so run `lcode` in the repository once and approve them there.
|
|
84
|
+
|
|
85
|
+
To see lcode's own output while it runs in an editor, set `LCODE_ACP_LOG` to a file in `env`.
|
|
@@ -46,7 +46,7 @@ command = "ruff format {path} && ruff check --fix {path}"
|
|
|
46
46
|
| `after_tool` | After a tool call | Its output goes to the model when it exits with an error, or always with `feedback = true` |
|
|
47
47
|
| `after_request` | When a request is done | Its output is shown to you |
|
|
48
48
|
| `session_start` | When a session starts | Its output is shown, and with `feedback = true` given to the model |
|
|
49
|
-
| `notification` | When lcode waits for your answer, and when a request that
|
|
49
|
+
| `notification` | When lcode waits for your answer, and when a request that ran longer than `notify_after` seconds (30) is done | Send a message, play a sound (lcode shows [desktop notifications](usage.md#notifications) itself) |
|
|
50
50
|
|
|
51
51
|
| Key | |
|
|
52
52
|
|---|---|
|
|
@@ -10,6 +10,7 @@ lcode doctor # check the installation (include this in bug repor
|
|
|
10
10
|
lcode config [set|unset] # show or change settings
|
|
11
11
|
lcode bench [models] # score models on small coding tasks on this machine
|
|
12
12
|
lcode mcp [catalog|add|list] # connect MCP servers: Jira, GitHub, AWS, databases… (see MCP servers)
|
|
13
|
+
lcode acp # run inside an editor over the Agent Client Protocol (see Editors)
|
|
13
14
|
```
|
|
14
15
|
|
|
15
16
|
| Option | Meaning |
|
|
@@ -78,6 +79,7 @@ reasoning is on.
|
|
|
78
79
|
| `/mode [ask\|plan\|auto-edit\|yolo]` | Set the permission mode |
|
|
79
80
|
| `/cd DIR` | Change the working directory |
|
|
80
81
|
| `/todos` | Show the model's task list |
|
|
82
|
+
| `/jobs [stop ID]` | The [background commands](#background-commands) the model started; stop one |
|
|
81
83
|
| `/commit [notes]` | [Commit](git.md#commit) the changes with a message in the repository's style, once you approve it |
|
|
82
84
|
| `/review [base]` | [Review](git.md#review) the uncommitted changes, or the branch against a base |
|
|
83
85
|
| `/pr [base] [notes]` | Push the branch and open a GitHub [pull request](git.md#pr), once you approve it |
|
|
@@ -93,7 +95,8 @@ reasoning is on.
|
|
|
93
95
|
| `list_dir` | Directory tree, skipping `.git`, `node_modules`, virtualenvs and caches |
|
|
94
96
|
| `glob` | Find files by pattern, newest first |
|
|
95
97
|
| `grep` | Regex search with ripgrep (falls back to Python if ripgrep is missing) |
|
|
96
|
-
| `bash` | Run a shell command with live output, a timeout and a persistent working directory |
|
|
98
|
+
| `bash` | Run a shell command with live output, a timeout and a persistent working directory; with `background`, keep it running ([details](#background-commands)) |
|
|
99
|
+
| `bash_output`, `bash_stop` | Read what a background command printed since last time; stop it |
|
|
97
100
|
| `todo_write` | Keep a visible task list for multi-step work |
|
|
98
101
|
| `web_search` | Search the web for current information (needs a [search provider](#web-search)) |
|
|
99
102
|
| `web_fetch` | Read a web page or text file by URL as clean text |
|
|
@@ -109,6 +112,38 @@ reasoning is on.
|
|
|
109
112
|
lcode refuses to edit a file the model hasn't read in the session, or one that changed on disk since
|
|
110
113
|
it was read, so the model always edits the current version.
|
|
111
114
|
|
|
115
|
+
## Background commands
|
|
116
|
+
|
|
117
|
+
Some commands keep running: a dev server, a test watcher, a build in watch mode. The model starts
|
|
118
|
+
one with `bash` and `background: true` and carries on working. It reads what the command printed
|
|
119
|
+
since last time with `bash_output`, and stops it with `bash_stop`.
|
|
120
|
+
|
|
121
|
+
```text
|
|
122
|
+
$ npm run dev (in the background)
|
|
123
|
+
> vite
|
|
124
|
+
VITE v6.0.0 ready in 312 ms
|
|
125
|
+
⎿ background job 1, /jobs to see it
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- `/jobs` lists the background commands; `/jobs stop 1` stops one.
|
|
129
|
+
- They all stop when the session ends.
|
|
130
|
+
- Anything else a command starts with `&` is stopped when that command ends. Only background
|
|
131
|
+
commands keep running, so no process outlives the session unnoticed.
|
|
132
|
+
- Background commands ask for permission like any other command, and run in the
|
|
133
|
+
[sandbox](sandbox.md) when it's on.
|
|
134
|
+
|
|
135
|
+
## Notifications
|
|
136
|
+
|
|
137
|
+
Local models take a while, so you'll often switch to something else during a request. lcode shows
|
|
138
|
+
a desktop notification:
|
|
139
|
+
- when a request that ran longer than 30 seconds is done;
|
|
140
|
+
- when, during such a request, lcode waits for your answer (a permission question or a plan).
|
|
141
|
+
|
|
142
|
+
It uses `notify-send` on Linux and `osascript` on macOS, and rings the terminal bell where neither
|
|
143
|
+
works. Change the time with `lcode config set notify_after 60`, or turn notifications off with
|
|
144
|
+
`lcode config set notify false`. For something else, such as a sound or a phone message, use a
|
|
145
|
+
[notification hook](hooks.md#hooks).
|
|
146
|
+
|
|
112
147
|
## Images
|
|
113
148
|
|
|
114
149
|
lcode can look at screenshots, mockups, diagrams and photos:
|