diff --git a/lib/colvars/colvarscript.cpp b/lib/colvars/colvarscript.cpp
index 86b52ac819824a1496f1f15af2790a5a2bcb5bbd..a43907b07d3f8d41953733e9c4f7e59c13e6169f 100644
--- a/lib/colvars/colvarscript.cpp
+++ b/lib/colvars/colvarscript.cpp
@@ -14,6 +14,36 @@ colvarscript::colvarscript(colvarproxy *p)
 {
 }
 
+
+extern "C" {
+
+  // Generic hooks; NAMD and VMD have Tcl-specific versions in the respective proxies
+
+  int run_colvarscript_command(int argc, const char **argv)
+  {
+    colvarproxy *cvp = cvm::proxy;
+    if (!cvp) {
+      return -1;
+    }
+    if (!cvp->script) {
+      cvm::error("Called run_colvarscript_command without a script object initialized.\n");
+      return -1;
+    }
+    return cvp->script->run(argc, argv);
+  }
+
+  const char * get_colvarscript_result()
+  {
+    colvarproxy *cvp = cvm::proxy;
+    if (!cvp->script) {
+      cvm::error("Called run_colvarscript_command without a script object initialized.\n");
+      return "";
+    }
+    return cvp->script->result.c_str();
+  }
+}
+
+
 /// Run method based on given arguments
 int colvarscript::run(int argc, char const *argv[]) {