diff --git a/service/jenkins.md b/service/jenkins.md
index f77ced07cbcf677e83b631db63e7455c034871f1..dbcca15a8d7069af6fa6d9b0b66f547f65e1a1d5 100644
--- a/service/jenkins.md
+++ b/service/jenkins.md
@@ -173,13 +173,33 @@ No Git consumers using SCM API plugin for: https://git.torproject.org/admin/tsa-
 
 Which comes straight out of the plain text output of the web hook.
 
+### Job execution
+
 The actual job configuration defines what happens next. But in
 general, the `jenkins/tools.git` repository has a lot of common code
 that gets ran in jobs. In practice, we generally copy-paste a bunch of
 stuff until things work.
 
-TODO: this is obviously incomplete, but it might not be worth walking
-through the entire `jenkins/tools.git` repository...
+NOTE: this is obviously incomplete, but it might not be worth walking
+through the entire `jenkins/tools.git` repository... A job generally
+will run a command line:
+
+    SUITE=buster ARCHITECTURE=amd64 /home/jenkins/jenkins-tools/slaves/linux/build-wrapper
+
+... which then runs inside a `buster_amd64.tar.gz` chroot on the
+builders. The `build-wrapper` takes care of unpacking the chroot and
+find the right job script to run.
+
+Scripts are generally the `build` command inside a directory, for
+example Hugo websites are built with
+[slaves/linux/hugo-website/build](https://gitweb.torproject.org/project/jenkins/tools.git/tree/slaves/linux/hugo-website/build), because the base name of the job
+template is `hugo-website`.. The build ends up in
+`RESULT/output.tar.gz`, which gets passed to the `install` job
+(e.g. `hugo-website-$site-install`). That job then ships the files off
+to the static source server for deployment.
+
+See [the static mirror jenkins docs](howto/static-component#jenkins-build-jobs) for more information on how
+static sites are built.
 
 ### Interfaces