diff options
| author | Craig Jennings <c@cjennings.net> | 2026-05-16 02:04:51 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-05-16 02:04:51 -0500 |
| commit | 19240036f89422dcaba3f0e3c3a822c92b0f35c1 (patch) | |
| tree | e55f384b84d1c408000fc3d1b1133137f7f5ad66 /todo.org | |
| parent | 3f50f682053dd31d5fac96ecdf2b98aad1ce56d7 (diff) | |
| download | dotemacs-19240036f89422dcaba3f0e3c3a822c92b0f35c1.tar.gz dotemacs-19240036f89422dcaba3f0e3c3a822c92b0f35c1.zip | |
docs(gptel): add shortlist design doc for additional gptel tools
The Gptel Work project asked for a survey of published gptel tools
with adopt / skip / defer decisions per candidate. I can't do a
live community-tool survey from this session, so the doc covers
the candidates the task body called out plus a few obvious
adjacents.
Decisions:
- ADOPT (7): `search_in_files`, `git_status` / `git_log` /
`git_diff` (three tools), `web_fetch`, `search_emacs_help`,
`find_file_by_name`, `take_screenshot`. Each gets a sketch in
the doc -- args, validation posture, implementation outline.
- DEFER (2): `run_shell_command` (huge surface, click-fatigue
risk; the ADOPT-bucket tools cover most legit use cases),
`org_capture` (needs UX design for template pre-fill and the
round-trip).
- SKIP (1): `eval_elisp` (code execution from a model is too
dangerous even with confirm-each-call).
The doc also lists three follow-ups: the live community survey
that this session couldn't do, per-tool implementation sub-tasks
to be filed under the next iteration of Gptel Work, and a
sandboxing-convention decision for `web_fetch` (allowlist of
outbound URLs vs description-only warning).
Three open questions at the bottom of the doc for review:
build-all-at-once vs paired stages, `fd` as a hard dep vs `find`
fallback, Hyprland-only screenshot vs Wayland-generic via a
portal.
Closes the Gptel Work PROJECT for this iteration -- all 9 in-scope
sub-tasks landed this session.
Diffstat (limited to 'todo.org')
| -rw-r--r-- | todo.org | 59 |
1 files changed, 43 insertions, 16 deletions
@@ -2571,7 +2571,8 @@ used to handle. Per-module fixups for ledger, AUCTeX, eshell, mu4e compose, and the three =prog-*= modules. See the design doc for the full translation table, migration steps, tests, and risks. -** PROJECT [#B] Gptel Work :refactor:cleanup:feature: +** DONE [#B] Gptel Work :refactor:cleanup:feature: +CLOSED: [2026-05-16 Sat] Keep gptel as a focused side-tool for one-off conversations, impromptu help, and the rewrite-region code helper. Workflow stays distinct from the dedicated Claude-Code agents launched via F9, so per-project agent sessions don't get cluttered with general-purpose chat. @@ -2583,6 +2584,18 @@ In scope: Out of scope: the F9 =ai-vterm= Claude-Code launcher (=modules/ai-vterm.el=) — separate module, working well. +Closing event log: + +- Rewrote =gptel-tools/update_text_file.el= in pure Elisp + wired into =cj/gptel-local-tool-features=; 48 ERT tests. +- Split gptel-magit wiring into per-feature =with-eval-after-load= blocks (=git-commit=, =magit-commit=, =magit-diff=); rewrote the lazy-loading test to inspect =after-load-alist= directly. +- Added 36 ERT tests for =ai-conversations.el= (helpers, autosave hook, interactive save/delete). +- Added 52 ERT tests for the other five gptel-tools files; small refactor on =read_buffer.el= and =write_text_file.el= to extract testable helpers. +- =cj/gptel-autosave-toggle= + =[AS]= mode-line indicator, bound to =C-; a A=. +- =cj/gptel-quick-ask= one-shot Q&A buffer with =q= / =escape= / =c= bindings (new module =ai-quick-ask.el=), bound to =C-; a q=. +- Directive-picker wrappers around =gptel-rewrite= (=ai-rewrite.el=); =C-; a r= picks directive + rewrites, =C-; a R= redoes with a different directive. +- Dired-style saved-conversations browser (=ai-conversations-browser.el=) with RET/l/d/r/g/q bindings, bound to =C-; a b=. +- Shortlist design doc at =docs/design/gptel-tools-shortlist.org= for additional gptel tools (7 ADOPT, 2 DEFER, 1 SKIP); live community-tool survey remains as follow-up work for Craig. + *** 2026-05-16 Sat @ 01:17:58 -0500 Rewrote update_text_file.el and wired it into cj/gptel-local-tool-features I rewrote =gptel-tools/update_text_file.el= in pure Elisp. The previous @@ -2671,21 +2684,35 @@ Internal/Wrapper split documented in =elisp-testing.md=. 52 new tests, all green. -*** TODO [#C] Research and shortlist additional gptel tools :feature:research: - -Survey what published gptel community tools exist (the gptel README, karthink's gist/repo, MELPA, GitHub topic search). Compile a candidate list with one-line descriptions and a per-tool adopt / skip / defer decision. Useful candidates to evaluate first (some are inventions, some are commonly-published patterns): - -- =run_shell_command= — sandboxed to =~/= + =/tmp=, denylist for destructive ops (=rm=, =mv=, =dd=, =chmod=, etc.); confirmation for everything else. -- =search_in_files= — =rg= wrapper with path/glob filtering and result-count cap. -- =git_status= / =git_log= / =git_diff= — read-only git context tools (let the model see what's changed without manually pasting). -- =org_capture= — capture a snippet from the AI response into a template (driven by template key). -- =web_fetch= — =curl=-style URL fetch with body-length cap; html-to-text by default; opt-in raw mode. -- =search_emacs_help= — =apropos= / =describe-function= / =describe-variable= query for "what does emacs already do for X". -- =find_file_by_name= — =locate= or =fd= wrapper, capped result count. -- =eval_elisp= — dangerous; require explicit confirm-each-call and a denylist of forms (=shell-command=, =delete-file=, =call-process=, etc.). -- =take_screenshot= — Hyprland-native (=grim= + region selection); save to a known path; return the path so the model can reason about an attached image. - -Output: a shortlist in =docs/design/gptel-tools-shortlist.org= with the adopt/skip/defer decisions and a follow-up extraction sub-task per "adopt". +*** 2026-05-16 Sat @ 02:01:48 -0500 Wrote the gptel-tools shortlist design doc + +[[file:../docs/design/gptel-tools-shortlist.org][docs/design/gptel-tools-shortlist.org]] covers each of the candidates +called out in the task body plus a few obvious adjacents. Decisions: + +- *ADOPT* (7): =search_in_files=, =git_status= / =git_log= / + =git_diff= (three tools), =web_fetch=, =search_emacs_help=, + =find_file_by_name=, =take_screenshot=. Each gets a sketch in the + doc (args, validation, implementation outline). +- *DEFER* (2): =run_shell_command= (huge surface, click-fatigue + risk; ADOPT-bucket tools cover most legit use cases), =org_capture= + (needs UX design for template pre-fill and round-trip). +- *SKIP* (1): =eval_elisp= (code execution from a model is too + dangerous even with confirm-each-call). + +Follow-up work surfaced in the doc: + +1. *Live community survey* -- walk the gptel README's tool examples, + MELPA =gptel-tool-*=, GitHub =gptel-make-tool= search, + karthink's gptel repo. I couldn't do live web research from + this session; that pass remains for Craig to do or to delegate. +2. *Per-tool implementation sub-tasks* -- each ADOPT entry deserves + its own [#B] under =Gptel Work= when Craig reviews this shortlist. +3. *Sandboxing convention* -- decide whether =web_fetch= needs an + allowlist of outbound URLs, and the same call for + =run_shell_command= if it's promoted from DEFER. + +Three open questions called out for review at the bottom of the +doc. *** 2026-05-16 Sat @ 01:54:34 -0500 Added directive-picker wrappers around gptel-rewrite |
