diff --git a/jiri/.api b/jiri/.api
index 8b75c99..2358c18 100644
--- a/jiri/.api
+++ b/jiri/.api
@@ -17,6 +17,7 @@
 pkg jiri, method (*X) ProfilesDBDir() string
 pkg jiri, method (*X) ResolveManifestPath(string) (string, error)
 pkg jiri, method (*X) RootMetaDir() string
+pkg jiri, method (*X) ScriptsDir() string
 pkg jiri, method (*X) UpdateHistoryDir() string
 pkg jiri, method (*X) UpdateHistoryLatestLink() string
 pkg jiri, method (*X) UpdateHistorySecondLatestLink() string
diff --git a/jiri/x.go b/jiri/x.go
index 09087b5..abe6b31 100644
--- a/jiri/x.go
+++ b/jiri/x.go
@@ -147,6 +147,11 @@
 	return filepath.Join(x.RootMetaDir(), "bin")
 }
 
+// ScriptsDir returns the path to the scripts directory.
+func (x *X) ScriptsDir() string {
+	return filepath.Join(x.RootMetaDir(), "scripts")
+}
+
 // UpdateHistoryDir returns the path to the update history directory.
 func (x *X) UpdateHistoryDir() string {
 	return filepath.Join(x.RootMetaDir(), "update_history")
diff --git a/project/project.go b/project/project.go
index 0a59d01..6d8c5d7 100644
--- a/project/project.go
+++ b/project/project.go
@@ -1000,7 +1000,17 @@
 		return err
 	}
 	// 3. Install the tools into $JIRI_ROOT/.jiri_root/bin.
-	return InstallTools(jirix, tmpToolsDir)
+	if err := InstallTools(jirix, tmpToolsDir); err != nil {
+		return err
+	}
+	// 4. If we have the jiri project, then update the jiri script in
+	// $JIRI_ROOT/.jiri_root/scripts.
+	jiriProject, err := remoteProjects.FindUnique(JiriProject)
+	if err != nil {
+		// jiri project not found.  This happens often in tests.  Ok to ignore.
+		return nil
+	}
+	return updateJiriScript(jirix, jiriProject)
 }
 
 // WriteUpdateHistorySnapshot creates a snapshot of the current state of all
@@ -1347,6 +1357,32 @@
 	return nil
 }
 
+// updateJiriScript copies the scripts/jiri script from the jiri repo to
+// JIRI_ROOT/.jiri_root/scripts/jiri.
+func updateJiriScript(jirix *jiri.X, jiriProject Project) error {
+	s := jirix.NewSeq()
+	updateFn := func() error {
+		return ApplyToLocalMaster(jirix, Projects{jiriProject.Key(): jiriProject}, func() error {
+			newJiriScriptPath := filepath.Join(jiriProject.Path, "scripts", "jiri")
+			newJiriScript, err := s.Open(newJiriScriptPath)
+			if err != nil {
+				return err
+			}
+			s.MkdirAll(jirix.ScriptsDir(), 0755)
+			jiriScriptOutPath := filepath.Join(jirix.ScriptsDir(), "jiri")
+			jiriScriptOut, err := s.Create(jiriScriptOutPath)
+			if err != nil {
+				return err
+			}
+			if _, err := s.Copy(jiriScriptOut, newJiriScript); err != nil {
+				return err
+			}
+			return nil
+		})
+	}
+	return jirix.NewSeq().Verbose(true).Call(updateFn, "update jiri script").Done()
+}
+
 // TransitionBinDir handles the transition from the old location
 // $JIRI_ROOT/devtools/bin to the new $JIRI_ROOT/.jiri_root/bin.  In
 // InstallTools above we've already installed the tools to the new location.
