diff --git a/goaljobs.ml b/goaljobs.ml
index 4f99de4a14a1a427b086c283a1b142ee8d981dea..1aa8c0d9fd9562ba52aa04a3ea7d540c15248ccf 100644
--- a/goaljobs.ml
+++ b/goaljobs.ml
@@ -21,6 +21,9 @@ open Printf
 
 open Goaljobs_config
 
+let (//) = Filename.concat
+let quote = Filename.quote
+
 type goal_result_t = Goal_OK | Goal_failed of string
 exception Goal_result of goal_result_t
 
diff --git a/goaljobs.mli b/goaljobs.mli
index 07d717b09d84b7ccda5c91121e185cf5e793bae0..072fcef55d2785dd5122a527c5dc3f163c3c9331 100644
--- a/goaljobs.mli
+++ b/goaljobs.mli
@@ -171,6 +171,11 @@ val url_contains_string : string -> string -> bool
 
       There is also a goal version of this function. *)
 
+val (//) : string -> string -> string
+  (** Concatenate two paths. *)
+
+val quote : string -> string
+  (** Quote the string to make it safe to pass directly to the shell. *)
 
 (** {2 Shell}