commit 88701b4c01498f5bd987f71d01e34eeda4f90e62
parent 6c25a2f8f115ec2d29557ca7731d41ee4866ed1e
Author: Vineet Kumar <git@vineetk.net>
Date: Wed, 15 Apr 2026 10:56:17 -0400
emacs: add gptel-agent
Diffstat:
1 file changed, 160 insertions(+), 0 deletions(-)
diff --git a/epistemia/packages/emacs.scm b/epistemia/packages/emacs.scm
@@ -65,3 +65,163 @@ underline style instead of regular underline. (setq kaolin-themes-underline-wave
t) ;; When t, will display colored hl-line style (setq
kaolin-themes-hl-line-colored t).")
(license license:gpl3)))
+
+(define-public emacs-gptel-new
+ (package
+ (name "emacs-gptel-new")
+ (version "20260410.711")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/karthink/gptel")
+ (commit "8d6411b5f89d796c817ff79324973b8910e164fe")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "0zl5qdp9qqh8chadsp2m3jpbpsxlywdlfkax8p97y73q1yias0q6"))))
+ (build-system emacs-build-system)
+ (propagated-inputs (list emacs-transient emacs-compat))
+ (home-page "https://github.com/karthink/gptel")
+ (synopsis "Interact with ChatGPT or other LLMs")
+ (description
+ "gptel is a simple Large Language Model chat client, with support for multiple
+models and backends. It works in the spirit of Emacs, available at any time and
+in any buffer. gptel supports: - The services @code{ChatGPT}, Azure, Gemini,
+Anthropic AI, Together.ai, Perplexity, AI/ML API, Anyscale, @code{OpenRouter},
+Groq, @code{PrivateGPT}, @code{DeepSeek}, Cerebras, Github Models, @code{GitHub}
+Copilot chat, AWS Bedrock, Novita AI, @code{xAI}, Sambanova, Mistral Le Chat and
+Kagi (@code{FastGPT} & Summarizer). - Local models via Ollama, Llama.cpp,
+Llamafiles or GPT4All Additionally, any LLM service (local or remote) that
+provides an @code{OpenAI-compatible} API is supported. Features: - Interact
+with LLMs from anywhere in Emacs (any buffer, shell, minibuffer, wherever). -
+LLM responses are in Markdown or Org markup. - Supports conversations and
+multiple independent sessions. - Supports tool-use to equip LLMs with agentic
+capabilities. - Supports Model Context Protocol (MCP) integration using the
+mcp.el package. - Supports multi-modal models (send images, documents). -
+Supports \"reasoning\" content in LLM responses. - Save chats as regular
+Markdown/Org/Text files and resume them later. - You can go back and edit your
+previous prompts or LLM responses when continuing a conversation. These will be
+fed back to the model. - Redirect prompts and responses easily - Rewrite,
+refactor or fill in regions in buffers. - Write your own commands for custom
+tasks with a simple API. Requirements for @code{ChatGPT}, Azure, Gemini or Kagi:
+- You need an appropriate API key. Set the variable `gptel-api-key to the key
+or to a function of no arguments that returns the key. (It tries to use
+`auth-source by default) @code{ChatGPT} is configured out of the box. For the
+other sources: - For Azure: define a gptel-backend with `gptel-make-azure'. -
+For Gemini: define a gptel-backend with `gptel-make-gemini'. - For Anthropic
+(Claude): define a gptel-backend with `gptel-make-anthropic'. - For AI/ML API,
+Together.ai, Anyscale, Groq, @code{OpenRouter}, @code{DeepSeek}, Cerebras or
+Github Models: define a gptel-backend with `gptel-make-openai'. - For
+@code{PrivateGPT}: define a backend with `gptel-make-privategpt'. - For
+Perplexity: define a backend with `gptel-make-perplexity'. - For Deepseek:
+define a backend with `gptel-make-deepseek'. - For Kagi: define a gptel-backend
+with `gptel-make-kagi'. For local models using Ollama, Llama.cpp or GPT4All: -
+The model has to be running on an accessible address (or localhost) - Define a
+gptel-backend with `gptel-make-ollama or `gptel-make-gpt4all'. - Llama.cpp or
+Llamafiles: Define a gptel-backend with `gptel-make-openai'. Consult the
+package README for examples and more help with configuring backends. Usage:
+gptel can be used in any buffer or in a dedicated chat buffer. The interaction
+model is simple: Type in a query and the response will be inserted below. You
+can continue the conversation by typing below the response. To use this in any
+buffer: - Call `gptel-send to send the buffer's text up to the cursor. Select a
+region to send only the region. - You can select previous prompts and responses
+to continue the conversation. - Call `gptel-send with a prefix argument to
+access a menu where you can set your backend, model and other parameters, or to
+redirect the prompt/response. To use this in a dedicated buffer: - M-x gptel:
+Start a chat session. - In the chat session: Press `C-c RET (`gptel-send') to
+send your prompt. Use a prefix argument (`C-u C-c RET') to access a menu. In
+this menu you can set chat parameters like the system directives, active backend
+or model, or choose to redirect the input or output elsewhere (such as to the
+kill ring or the echo area). - You can save this buffer to a file. When opening
+this file, turn on `gptel-mode before editing it to restore the conversation
+state and continue chatting. - To include media files with your request, you can
+add them to the context (described next), or include them as links in Org or
+Markdown mode chat buffers. Sending media is disabled by default, you can turn
+it on globally via `gptel-track-media', or locally in a chat buffer via the
+header line. Include more context with requests: If you want to provide the LLM
+with more context, you can add arbitrary regions, buffers, files or directories
+to the query with `gptel-add'. To add text or media files, call `gptel-add in
+Dired or use the dedicated `gptel-add-file'. You can also add context from
+gptel's menu instead (`gptel-send with a prefix arg), as well as examine or
+modify context. When context is available, gptel will include it with each LLM
+query. LLM Tool use: gptel supports \"tool calling\" behavior, where LLMs can
+specify arguments with which to call provided \"tools\" (elisp functions). The
+results of running the tools are fed back to the LLM, giving it capabilities and
+knowledge beyond what is available out of the box. For example, tools can
+perform web searches or API lookups, modify files and directories, and so on.
+Tools can be specified via `gptel-make-tool', or obtained from other
+repositories, or from Model Context Protocol (MCP) servers using the mcp.el
+package. See the README for details. Tools can be included with LLM queries
+using gptel's menu, or from `gptel-tools'. Rewrite interface In any buffer:
+with a region selected, you can rewrite prose, refactor code or fill in the
+region. This is accessible via `gptel-rewrite', and also from the `gptel-send
+menu. Presets Define a bundle of configuration (model, backend, system message,
+tools etc) as a \"preset\" that can be applied together, making it easy to switch
+between tasks in gptel. Presets can be saved and applied from gptel's transient
+menu. You can also include a cookie of the form \"@@preset-name\" in the prompt
+to send a request with a preset applied. This feature works everywhere, but
+preset cookies are also fontified in chat buffers. gptel in Org mode: gptel
+offers a few extra conveniences in Org mode: - You can limit the conversation
+context to an Org heading with `gptel-org-set-topic'. - You can have branching
+conversations in Org mode, where each hierarchical outline path through the
+document is a separate conversation branch. See the variable
+`gptel-org-branching-context'. - You can declare the gptel model, backend,
+temperature, system message and other parameters as Org properties with the
+command `gptel-org-set-properties'. gptel queries under the corresponding
+heading will always use these settings, allowing you to create mostly
+reproducible LLM chat notebooks. Finally, gptel offers a general purpose API
+for writing LLM ineractions that suit your workflow. See `gptel-request', and
+`gptel-fsm for more advanced usage.")
+ (license license:gpl3)))
+
+(define-public emacs-gptel-agent
+ (package
+ (name "emacs-gptel-agent")
+ (version "20260412.716")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/karthink/gptel-agent")
+ (commit "bef06bccdbf847e0c4a94d1b57dd96d979437430")))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "1g33w8db2g33l3qf4f9vnafkdpilaxh4s9cy76yv79rphg92ipaw"))))
+ (build-system emacs-build-system)
+ (propagated-inputs (list emacs-compat emacs-gptel-new emacs-yaml
+ emacs-orderless))
+ (arguments
+ '(#:include '("^[^/]*.el$" "^[^/]*.el.in$"
+ "^dir$"
+ "^[^/]*.info$"
+ "^[^/]*.texi$"
+ "^[^/]*.texinfo$"
+ "^doc/dir$"
+ "^doc/[^/]*.info$"
+ "^doc/[^/]*.texi$"
+ "^doc/[^/]*.texinfo$"
+ "^agents$")
+ #:exclude '("^.dir-locals.el$" "^test.el$" "^tests.el$"
+ "^[^/]*-test.el$" "^[^/]*-tests.el$")))
+ (home-page "https://github.com/karthink/gptel-agent")
+ (synopsis "Agentic LLM use for gptel")
+ (description
+ "This is a collection of tools and prompts to use gptel \"agentically\" with any
+LLM, to autonomously perform tasks. It has access to - the web (via basic web
+search, URL fetching and @code{YouTube} video metadata), - local files
+(read/write/edit), - the state of Emacs (documentation and Elisp evaluation), -
+and Bash, if you are in a POSIX-y environment. To use gptel-agent in a
+dedicated buffer: - Set `gptel-model and `gptel-backend to use your preferred
+LLM. - Run M-x `gptel-agent'. This will open a buffer with the agent preset
+loaded. - Use gptel as usual, calling `gptel-send etc. - If you change the
+system prompt, tools or other settings in this buffer, you can reset the agent
+state by (re)applying the \"gptel-agent\" preset from gptel's menu. To use
+gptel-agent anywhere in Emacs: - As with gptel, you can use gptel-agent in any
+buffer. Just apply the \"gptel-agent\" preset in the buffer, or include
+\"@@gptel-agent\" in a prompt. gptel-agent can delegate tasks to \"sub-agents\".
+Sub-agents can be specified in Markdown or Org files in a directory. To see how
+to specify agents, examine the \"agents\" directory in this package. You can add
+your directory of agents to `gptel-agent-dirs', which see. Please note:
+gptel-agent uses significantly more tokens than the average gptel LLM
+interaction.")
+ (license license:gpl3)))