From 18c52fa9d7660baabadb570edd5b3511185d087e Mon Sep 17 00:00:00 2001
From: Phil Bajsicki <phil@bajsicki.com>
Date: Thu, 17 Apr 2025 03:01:42 +0200
Subject: [PATCH] Wrap regexp tool query in word boundary

---
 README.org         | 13 ++++++++-----
 gptel-org-tools.el | 11 ++++++-----
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/README.org b/README.org
index 742cc54..acb073d 100644
--- a/README.org
+++ b/README.org
@@ -757,11 +757,14 @@ This means that /every org-mode file I have/ is part of this search.
 ***** org-ql-select-all-regexp
 #+begin_src elisp
 (defun gptel-org-tools--org-ql-select-all-regexp (query)
-  (org-ql-select
-    (org-agenda-files)
-    `(regexp ,query)
-    :action #'gptel-org-tools--heading-body))
+  (let ((bound-query (format "\\b%s\\b" (regexp-quote query))))
+    (org-ql-select
+      (org-agenda-files)
+      `(regexp ,bound-query)
+      :action #'gptel-org-tools--heading-body)))
+#+end_src
 
+#+begin_src elisp
 (add-to-list 'gptel-org-tools
 	     (gptel-make-tool
 	      :function #'gptel-org-tools--org-ql-select-all-regexp
@@ -769,7 +772,7 @@ This means that /every org-mode file I have/ is part of this search.
 	      :description "Run regexp on ALL files at once."
 	      :args (list '(:name "query"
 			    :type string
-			    :description "Regexp, Emacs Lisp format."))
+			    :description "Regexp, Emacs Lisp format. Automatically wrapped in a word boundary by the tool."))
 	      :category "org-ql"))
 #+end_src
 
diff --git a/gptel-org-tools.el b/gptel-org-tools.el
index 8749f4a..11fec42 100644
--- a/gptel-org-tools.el
+++ b/gptel-org-tools.el
@@ -375,10 +375,11 @@
 	      :category "org-ql"))
 
 (defun gptel-org-tools--org-ql-select-all-regexp (query)
-  (org-ql-select
-    (org-agenda-files)
-    `(regexp ,query)
-    :action #'gptel-org-tools--heading-body))
+  (let ((bound-query (format "\\b%s\\b" (regexp-quote query))))
+    (org-ql-select
+      (org-agenda-files)
+      `(regexp ,bound-query)
+      :action #'gptel-org-tools--heading-body)))
 
 (add-to-list 'gptel-org-tools
 	     (gptel-make-tool
@@ -387,7 +388,7 @@
 	      :description "Run regexp on ALL files at once."
 	      :args (list '(:name "query"
 			    :type string
-			    :description "Regexp, Emacs Lisp format."))
+			    :description "Regexp, Emacs Lisp format. Automatically wrapped in a word boundary by the tool."))
 	      :category "org-ql"))
 
 (provide 'gptel-org-tools)