diff --git a/bot3/autonomous/auto.cc b/bot3/autonomous/auto.cc
index 3167770..8a3c1ad 100644
--- a/bot3/autonomous/auto.cc
+++ b/bot3/autonomous/auto.cc
@@ -8,6 +8,7 @@
 
 #include "bot3/autonomous/auto.q.h"
 #include "bot3/control_loops/drivetrain/drivetrain.q.h"
+#include "bot3/control_loops/shooter/shooter_motor.q.h"
 #include "frc971/constants.h"
 
 using ::aos::time::Time;
@@ -15,11 +16,41 @@
 namespace bot3 {
 namespace autonomous {
 
+bool ShouldExitAuto() {
+  ::bot3::autonomous::autonomous.FetchLatest();
+  bool ans = !::bot3::autonomous::autonomous->run_auto;
+  if (ans) {
+    LOG(INFO, "Time to exit auto mode\n");
+  }
+  return ans;
+}
+
+void SetShooter(double velocity, bool push) {
+  LOG(INFO, "Setting shooter velocity to %f\n", velocity);
+  control_loops::shooter.goal.MakeWithBuilder()
+    .velocity(velocity).push(push).Send();
+}
+
+bool ShooterReady() {
+  control_loops::shooter.status.FetchLatest();
+  return control_loops::shooter.status->ready;
+}
+
 // start with N discs in the indexer
 void HandleAuto() {
-  // TODO (danielp): Do something in auto.
-  // (That's why I left all the includes.)
-  LOG(INFO, "Auto mode is not currently implemented on this robot.\n");
+  double shooter_velocity = 250.0;
+  while (!ShouldExitAuto()) {
+    SetShooter(shooter_velocity, false);
+    while (!ShouldExitAuto() && !ShooterReady());
+    if (ShouldExitAuto()) return;
+    SetShooter(shooter_velocity, true);
+    ::aos::time::SleepFor(::aos::time::Time::InSeconds(0.5));
+    SetShooter(shooter_velocity, false);
+    // Waits because, until we have feedback,
+    // the shooter will always think it's ready.
+    ::aos::time::SleepFor(::aos::time::Time::InSeconds(0.5));
+  }
+  return;
 }
 
 }  // namespace autonomous
