diff --git a/README.md b/README.md
index cf44d4c..f11eb66 100644
--- a/README.md
+++ b/README.md
@@ -36,6 +36,13 @@ Usage
         Github     911264 548790 784099
         [=======                      ]
 
+- Run `gauth KEYNAME` to print a specific key with progress bar.
+
+- Run `gauth KEYNAME -b` to print a bare current key.
+
+        $ gauth Google -b
+        477615
+
 - `gauth` is convenient to use in `watch`.
 
         $ watch -n1 gauth
diff --git a/gauth.go b/gauth.go
index 902f602..3e457d1 100644
--- a/gauth.go
+++ b/gauth.go
@@ -10,11 +10,40 @@ import (
 	"syscall"
 	"text/tabwriter"
 
+	"github.com/creachadair/otp/otpauth"
 	"github.com/pcarrier/gauth/gauth"
 	"golang.org/x/term"
 )
 
 func main() {
+	accountName := ""
+	isBareCode := false
+
+	if len(os.Args) > 1 {
+		accountName = os.Args[1]
+	}
+	if len(os.Args) > 2 {
+		if os.Args[2] == "-b" || os.Args[2] == "-bare" {
+			isBareCode = true
+		}
+	}
+
+	urls := getUrls()
+
+	if isBareCode && accountName != "" {
+		printBareCode(accountName, urls)
+	} else {
+		printAllCodes(urls)
+	}
+}
+
+func getPassword() ([]byte, error) {
+	fmt.Printf("Encryption password: ")
+	defer fmt.Println()
+	return term.ReadPassword(int(syscall.Stdin))
+}
+
+func getUrls() []*otpauth.URL {
 	cfgPath := os.Getenv("GAUTH_CONFIG")
 	if cfgPath == "" {
 		user, err := user.Current()
@@ -34,6 +63,23 @@ func main() {
 		log.Fatalf("Decoding configuration file: %v", err)
 	}
 
+	return urls
+}
+
+func printBareCode(accountName string, urls []*otpauth.URL) {
+	for _, url := range urls {
+		if strings.EqualFold(strings.ToLower(accountName), strings.ToLower(url.Account)) {
+			_, curr, _, err := gauth.Codes(url)
+			if err != nil {
+				log.Fatalf("Generating codes for %q: %v", url.Account, err)
+			}
+			fmt.Print(curr)
+			break
+		}
+	}
+}
+
+func printAllCodes(urls []*otpauth.URL) {
 	_, progress := gauth.IndexNow() // TODO: do this per-code
 
 	tw := tabwriter.NewWriter(os.Stdout, 0, 8, 1, ' ', 0)
@@ -48,9 +94,3 @@ func main() {
 	tw.Flush()
 	fmt.Printf("[%-29s]\n", strings.Repeat("=", progress))
 }
-
-func getPassword() ([]byte, error) {
-	fmt.Printf("Encryption password: ")
-	defer fmt.Println()
-	return term.ReadPassword(int(syscall.Stdin))
-}
diff --git a/go.sum b/go.sum
index cdc7406..69705ef 100644
--- a/go.sum
+++ b/go.sum
@@ -4,4 +4,4 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.1.0 h1:g6Z6vPFA9dYBAF7DWcH6sCcOntplXsDKcliusYijMlw=
-golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
\ No newline at end of file