diff --git a/sweet/cli/bootstrap/cache.go b/sweet/cli/bootstrap/cache.go
index 774ae7d..70decbd 100644
--- a/sweet/cli/bootstrap/cache.go
+++ b/sweet/cli/bootstrap/cache.go
@@ -16,13 +16,13 @@
 func CachedAssets(cache, version string) (string, error) {
 	name := VersionArchiveName(version)
 	if err := os.MkdirAll(cache, os.ModePerm); err != nil {
-		return "", fmt.Errorf("failed to create cache directory: %v", err)
+		return "", fmt.Errorf("failed to create cache directory: %w", err)
 	}
 	cacheloc := filepath.Join(cache, name)
 	if _, err := os.Lstat(cacheloc); os.IsNotExist(err) {
 		return cacheloc, ErrNotInCache
 	} else if err != nil {
-		return "", fmt.Errorf("failed to check cache: %v", err)
+		return "", fmt.Errorf("failed to check cache: %w", err)
 	}
 	return cacheloc, nil
 }
diff --git a/sweet/cli/bootstrap/gcs.go b/sweet/cli/bootstrap/gcs.go
index 35fd72a..40c9dd9 100644
--- a/sweet/cli/bootstrap/gcs.go
+++ b/sweet/cli/bootstrap/gcs.go
@@ -63,7 +63,7 @@
 	}
 	o := client.Bucket(bucket).Object(VersionArchiveName(version))
 	if _, err := o.Attrs(ctx); err != nil && err != storage.ErrObjectNotExist {
-		return nil, fmt.Errorf("checking if object exists: %v", err)
+		return nil, fmt.Errorf("checking if object exists: %w", err)
 	} else if err == nil && !force {
 		return nil, fmt.Errorf("assets object already exists for version %s", version)
 	}
diff --git a/sweet/cmd/sweet/gen.go b/sweet/cmd/sweet/gen.go
index 247f9d6..2af8216 100644
--- a/sweet/cmd/sweet/gen.go
+++ b/sweet/cmd/sweet/gen.go
@@ -102,15 +102,15 @@
 	var err error
 	c.assetsDir, err = filepath.Abs(c.assetsDir)
 	if err != nil {
-		return fmt.Errorf("creating absolute path from assets path: %v", err)
+		return fmt.Errorf("creating absolute path from assets path: %w", err)
 	}
 	c.sourceAssetsDir, err = filepath.Abs(c.sourceAssetsDir)
 	if err != nil {
-		return fmt.Errorf("creating absolute path from source assets path: %v", err)
+		return fmt.Errorf("creating absolute path from source assets path: %w", err)
 	}
 	c.outputDir, err = filepath.Abs(c.outputDir)
 	if err != nil {
-		return fmt.Errorf("creating absolute path from output path: %v", err)
+		return fmt.Errorf("creating absolute path from output path: %w", err)
 	}
 
 	// Make sure the assets directory is there.
diff --git a/sweet/cmd/sweet/get.go b/sweet/cmd/sweet/get.go
index 2d80290..a53f5e4 100644
--- a/sweet/cmd/sweet/get.go
+++ b/sweet/cmd/sweet/get.go
@@ -178,7 +178,7 @@
 
 func extractAssets(archive *os.File, outdir string) error {
 	if err := os.MkdirAll(outdir, os.ModePerm); err != nil {
-		return fmt.Errorf("create assets directory: %v", err)
+		return fmt.Errorf("create assets directory: %w", err)
 	}
 	archiveInfo, err := archive.Stat()
 	if err != nil {
diff --git a/sweet/cmd/sweet/run.go b/sweet/cmd/sweet/run.go
index 3a2f142..0ca218b 100644
--- a/sweet/cmd/sweet/run.go
+++ b/sweet/cmd/sweet/run.go
@@ -159,27 +159,27 @@
 		// Create a temporary work tree for running the benchmarks.
 		c.workDir, err = ioutil.TempDir("", "gosweet")
 		if err != nil {
-			return fmt.Errorf("creating work root: %v", err)
+			return fmt.Errorf("creating work root: %w", err)
 		}
 	}
 	// Ensure all provided directories are absolute paths. This avoids problems with
 	// benchmarks potentially changing their current working directory.
 	c.workDir, err = filepath.Abs(c.workDir)
 	if err != nil {
-		return fmt.Errorf("creating absolute path from provided work root: %v", err)
+		return fmt.Errorf("creating absolute path from provided work root: %w", err)
 	}
 	c.benchDir, err = filepath.Abs(c.benchDir)
 	if err != nil {
-		return fmt.Errorf("creating absolute path from benchmarks path: %v", err)
+		return fmt.Errorf("creating absolute path from benchmarks path: %w", err)
 	}
 	c.resultsDir, err = filepath.Abs(c.resultsDir)
 	if err != nil {
-		return fmt.Errorf("creating absolute path from results path: %v", err)
+		return fmt.Errorf("creating absolute path from results path: %w", err)
 	}
 	if c.assetsDir != "" {
 		c.assetsDir, err = filepath.Abs(c.assetsDir)
 		if err != nil {
-			return fmt.Errorf("creating absolute path from assets path: %v", err)
+			return fmt.Errorf("creating absolute path from assets path: %w", err)
 		}
 		if info, err := os.Stat(c.assetsDir); os.IsNotExist(err) {
 			return fmt.Errorf("assets not found at %q: did you mean to specify assets-dir?", c.assetsDir)
@@ -195,7 +195,7 @@
 		}
 		c.assetsCache, err = filepath.Abs(c.assetsCache)
 		if err != nil {
-			return fmt.Errorf("creating absolute path from assets cache path: %v", err)
+			return fmt.Errorf("creating absolute path from assets cache path: %w", err)
 		}
 		if info, err := os.Stat(c.assetsCache); os.IsNotExist(err) {
 			return fmt.Errorf("assets not found at %q: forgot to run `sweet get`?", c.assetsDir)
diff --git a/sweet/common/gotool.go b/sweet/common/gotool.go
index 6113d1f..20fc76c 100644
--- a/sweet/common/gotool.go
+++ b/sweet/common/gotool.go
@@ -22,7 +22,7 @@
 func SystemGoTool() (*Go, error) {
 	tool, err := exec.LookPath("go")
 	if err != nil {
-		return nil, fmt.Errorf("looking for system Go: %v", err)
+		return nil, fmt.Errorf("looking for system Go: %w", err)
 	}
 	return &Go{
 		Tool: tool,
@@ -70,11 +70,11 @@
 	}
 	cwd, err := os.Getwd()
 	if err != nil {
-		return fmt.Errorf("failed to get current working directory: %v", err)
+		return fmt.Errorf("failed to get current working directory: %w", err)
 	}
 	defer chdir(cwd)
 	if err := chdir(path); err != nil {
-		return fmt.Errorf("failed to enter build directory: %v", err)
+		return fmt.Errorf("failed to enter build directory: %w", err)
 	}
 	return g.Do("build", "-o", out)
 }
diff --git a/sweet/generators/tile38.go b/sweet/generators/tile38.go
index d6bb2b2..21a0e14 100644
--- a/sweet/generators/tile38.go
+++ b/sweet/generators/tile38.go
@@ -109,7 +109,7 @@
 		for _, line := range strings.Split(buf.String(), "\n") {
 			log.Printf(line)
 		}
-		return fmt.Errorf("error: starting server: %v", err)
+		return fmt.Errorf("error: starting server: %w", err)
 	}
 
 	// Clean up the server process after we're done.
@@ -229,7 +229,7 @@
 	srvCmd.Stdout = out
 	srvCmd.Stderr = out
 	if err := srvCmd.Start(); err != nil {
-		return nil, fmt.Errorf("failed to start server: %v", err)
+		return nil, fmt.Errorf("failed to start server: %w", err)
 	}
 
 	// Poll until the server is ready to serve, up to 120 seconds.
@@ -244,7 +244,7 @@
 		}
 		time.Sleep(2 * time.Second)
 	}
-	return nil, fmt.Errorf("timeout trying to connect to server: %v", err)
+	return nil, fmt.Errorf("timeout trying to connect to server: %w", err)
 }
 
 // tsvScanner returns a bufio.Scanner that emits a cell in
diff --git a/sweet/harnesses/gvisor.go b/sweet/harnesses/gvisor.go
index dce4612..bd16741 100644
--- a/sweet/harnesses/gvisor.go
+++ b/sweet/harnesses/gvisor.go
@@ -51,7 +51,7 @@
 	// See https://gvisor.dev/docs/user_guide/install/#install-directly
 	log.CommandPrintf("chmod 755 %s", bin)
 	if err := os.Chmod(bin, 0755); err != nil {
-		return fmt.Errorf("failed to set permissions on runsc: %v", err)
+		return fmt.Errorf("failed to set permissions on runsc: %w", err)
 	}
 	return nil
 }
