diff --git a/gopls/doc/codelenses.md b/gopls/doc/codelenses.md
index 378a3db..3477627 100644
--- a/gopls/doc/codelenses.md
+++ b/gopls/doc/codelenses.md
@@ -16,7 +16,7 @@
 
 <!-- This portion is generated by doc/generate from the ../internal/settings package. -->
 <!-- BEGIN Lenses: DO NOT MANUALLY EDIT THIS SECTION -->
-## ⬤ `gc_details`: Toggle display of Go compiler optimization decisions
+## `gc_details`: Toggle display of Go compiler optimization decisions
 
 
 This codelens source causes the `package` declaration of
@@ -40,7 +40,7 @@
 
 File type: Go
 
-## ⬤ `generate`: Run `go generate`
+## `generate`: Run `go generate`
 
 
 This codelens source annotates any `//go:generate` comments
@@ -55,7 +55,7 @@
 
 File type: Go
 
-## ⬤ `regenerate_cgo`: Re-generate cgo declarations
+## `regenerate_cgo`: Re-generate cgo declarations
 
 
 This codelens source annotates an `import "C"` declaration
@@ -71,7 +71,7 @@
 
 File type: Go
 
-## ⬤ `test`: Run tests and benchmarks
+## `test`: Run tests and benchmarks
 
 
 This codelens source annotates each `Test` and `Benchmark`
@@ -90,7 +90,7 @@
 
 File type: Go
 
-## ⬤ `run_govulncheck`: Run govulncheck
+## `run_govulncheck`: Run govulncheck
 
 
 This codelens source annotates the `module` directive in a
@@ -107,7 +107,7 @@
 
 File type: go.mod
 
-## ⬤ `tidy`: Tidy go.mod file
+## `tidy`: Tidy go.mod file
 
 
 This codelens source annotates the `module` directive in a
@@ -120,7 +120,7 @@
 
 File type: go.mod
 
-## ⬤ `upgrade_dependency`: Update dependencies
+## `upgrade_dependency`: Update dependencies
 
 
 This codelens source annotates the `module` directive in a
@@ -135,7 +135,7 @@
 
 File type: go.mod
 
-## ⬤ `vendor`: Update vendor directory
+## `vendor`: Update vendor directory
 
 
 This codelens source annotates the `module` directive in a
diff --git a/gopls/doc/commands.md b/gopls/doc/commands.md
index 1e15310..69c3af8 100644
--- a/gopls/doc/commands.md
+++ b/gopls/doc/commands.md
@@ -3,8 +3,7 @@
 This document describes the LSP-level commands supported by `gopls`. They cannot be invoked directly by users, and all the details are subject to change, so nobody should rely on this information.
 
 <!-- BEGIN Commands: DO NOT MANUALLY EDIT THIS SECTION -->
-### **Add a dependency**
-Identifier: `gopls.add_dependency`
+## `gopls.add_dependency`: **Add a dependency**
 
 Adds a dependency to the go.mod file for a module.
 
@@ -21,8 +20,7 @@
 }
 ```
 
-### **Add an import**
-Identifier: `gopls.add_import`
+## `gopls.add_import`: **Add an import**
 
 Ask the server to add an import path to a given Go file.  The method will
 call applyEdit on the client so that clients don't have to apply the edit
@@ -41,8 +39,7 @@
 }
 ```
 
-### **Update the given telemetry counters**
-Identifier: `gopls.add_telemetry_counters`
+## `gopls.add_telemetry_counters`: **Update the given telemetry counters**
 
 Gopls will prepend "fwd/" to all the counters updated using this command
 to avoid conflicts with other counters gopls collects.
@@ -57,8 +54,7 @@
 }
 ```
 
-### **Apply a fix**
-Identifier: `gopls.apply_fix`
+## `gopls.apply_fix`: **Apply a fix**
 
 Applies a fix to a region of source code.
 
@@ -144,8 +140,7 @@
 }
 ```
 
-### **Perform a "change signature" refactoring**
-Identifier: `gopls.change_signature`
+## `gopls.change_signature`: **Perform a "change signature" refactoring**
 
 This command is experimental, currently only supporting parameter removal.
 Its signature will certainly change in the future (pun intended).
@@ -217,8 +212,7 @@
 }
 ```
 
-### **Check for upgrades**
-Identifier: `gopls.check_upgrades`
+## `gopls.check_upgrades`: **Check for upgrades**
 
 Checks for module upgrades.
 
@@ -233,8 +227,7 @@
 }
 ```
 
-### **Cause server to publish diagnostics for the specified files.**
-Identifier: `gopls.diagnose_files`
+## `gopls.diagnose_files`: **Cause server to publish diagnostics for the specified files.**
 
 This command is needed by the 'gopls {check,fix}' CLI subcommands.
 
@@ -246,8 +239,7 @@
 }
 ```
 
-### **View package documentation.**
-Identifier: `gopls.doc`
+## `gopls.doc`: **View package documentation.**
 
 Opens the Go package documentation page for the current
 package in a browser.
@@ -270,8 +262,7 @@
 }
 ```
 
-### **Run go mod edit -go=version**
-Identifier: `gopls.edit_go_directive`
+## `gopls.edit_go_directive`: **Run go mod edit -go=version**
 
 Runs `go mod edit -go=version` for a module.
 
@@ -286,8 +277,7 @@
 }
 ```
 
-### **Get known vulncheck result**
-Identifier: `gopls.fetch_vulncheck_result`
+## `gopls.fetch_vulncheck_result`: **Get known vulncheck result**
 
 Fetch the result of latest vulnerability check (`govulncheck`).
 
@@ -306,8 +296,7 @@
 map[golang.org/x/tools/gopls/internal/protocol.DocumentURI]*golang.org/x/tools/gopls/internal/vulncheck.Result
 ```
 
-### **report free symbols referenced by the selection.**
-Identifier: `gopls.free_symbols`
+## `gopls.free_symbols`: **report free symbols referenced by the selection.**
 
 This command is a query over a selected range of Go source
 code. It reports the set of "free" symbols of the
@@ -335,8 +324,7 @@
 }
 ```
 
-### **Toggle gc_details**
-Identifier: `gopls.gc_details`
+## `gopls.gc_details`: **Toggle gc_details**
 
 Toggle the calculation of gc annotations.
 
@@ -346,8 +334,7 @@
 string
 ```
 
-### **Run go generate**
-Identifier: `gopls.generate`
+## `gopls.generate`: **Run go generate**
 
 Runs `go generate` for a given directory.
 
@@ -362,8 +349,7 @@
 }
 ```
 
-### **'go get' a package**
-Identifier: `gopls.go_get_package`
+## `gopls.go_get_package`: **'go get' a package**
 
 Runs `go get` to fetch a package.
 
@@ -379,8 +365,7 @@
 }
 ```
 
-### **List imports of a file and its package**
-Identifier: `gopls.list_imports`
+## `gopls.list_imports`: **List imports of a file and its package**
 
 Retrieve a list of imports in the given Go file, and the package it
 belongs to.
@@ -410,8 +395,7 @@
 }
 ```
 
-### **List known packages**
-Identifier: `gopls.list_known_packages`
+## `gopls.list_known_packages`: **List known packages**
 
 Retrieve a list of packages that are importable from the given URI.
 
@@ -437,15 +421,13 @@
 }
 ```
 
-### **Prompt user to enable telemetry**
-Identifier: `gopls.maybe_prompt_for_telemetry`
+## `gopls.maybe_prompt_for_telemetry`: **Prompt user to enable telemetry**
 
 Checks for the right conditions, and then prompts the user
 to ask if they want to enable Go telemetry uploading. If
 the user responds 'Yes', the telemetry mode is set to "on".
 
-### **Fetch memory statistics**
-Identifier: `gopls.mem_stats`
+## `gopls.mem_stats`: **Fetch memory statistics**
 
 Call runtime.GC multiple times and return memory statistics as reported by
 runtime.MemStats.
@@ -462,8 +444,7 @@
 }
 ```
 
-### **Regenerate cgo**
-Identifier: `gopls.regenerate_cgo`
+## `gopls.regenerate_cgo`: **Regenerate cgo**
 
 Regenerates cgo definitions.
 
@@ -476,8 +457,7 @@
 }
 ```
 
-### **Remove a dependency**
-Identifier: `gopls.remove_dependency`
+## `gopls.remove_dependency`: **Remove a dependency**
 
 Removes a dependency from the go.mod file of a module.
 
@@ -496,8 +476,7 @@
 }
 ```
 
-### **Reset go.mod diagnostics**
-Identifier: `gopls.reset_go_mod_diagnostics`
+## `gopls.reset_go_mod_diagnostics`: **Reset go.mod diagnostics**
 
 Reset diagnostics in the go.mod file of a module.
 
@@ -514,8 +493,7 @@
 }
 ```
 
-### **Run `go work [args...]`, and apply the resulting go.work**
-Identifier: `gopls.run_go_work_command`
+## `gopls.run_go_work_command`: **Run `go work [args...]`, and apply the resulting go.work**
 
 edits to the current go.work file
 
@@ -529,8 +507,7 @@
 }
 ```
 
-### **Run vulncheck**
-Identifier: `gopls.run_govulncheck`
+## `gopls.run_govulncheck`: **Run vulncheck**
 
 Run vulnerability check (`govulncheck`).
 
@@ -557,8 +534,7 @@
 }
 ```
 
-### **Run test(s)**
-Identifier: `gopls.run_tests`
+## `gopls.run_tests`: **Run test(s)**
 
 Runs `go test` for a specific set of test or benchmark functions.
 
@@ -577,8 +553,7 @@
 }
 ```
 
-### **Start the gopls debug server**
-Identifier: `gopls.start_debugging`
+## `gopls.start_debugging`: **Start the gopls debug server**
 
 Start the gopls debug server if it isn't running, and return the debug
 address.
@@ -622,8 +597,7 @@
 }
 ```
 
-### **Start capturing a profile of gopls' execution**
-Identifier: `gopls.start_profile`
+## `gopls.start_profile`: **Start capturing a profile of gopls' execution**
 
 Start a new pprof profile. Before using the resulting file, profiling must
 be stopped with a corresponding call to StopProfile.
@@ -643,8 +617,7 @@
 struct{}
 ```
 
-### **Stop an ongoing profile**
-Identifier: `gopls.stop_profile`
+## `gopls.stop_profile`: **Stop an ongoing profile**
 
 This command is intended for internal use only, by the gopls benchmark
 runner.
@@ -664,8 +637,7 @@
 }
 ```
 
-### **Run test(s) (legacy)**
-Identifier: `gopls.test`
+## `gopls.test`: **Run test(s) (legacy)**
 
 Runs `go test` for a specific set of test or benchmark functions.
 
@@ -684,8 +656,7 @@
 []string
 ```
 
-### **Run go mod tidy**
-Identifier: `gopls.tidy`
+## `gopls.tidy`: **Run go mod tidy**
 
 Runs `go mod tidy` for a module.
 
@@ -698,8 +669,7 @@
 }
 ```
 
-### **Toggle gc_details**
-Identifier: `gopls.toggle_gc_details`
+## `gopls.toggle_gc_details`: **Toggle gc_details**
 
 Toggle the calculation of gc annotations.
 
@@ -712,8 +682,7 @@
 }
 ```
 
-### **Update go.sum**
-Identifier: `gopls.update_go_sum`
+## `gopls.update_go_sum`: **Update go.sum**
 
 Updates the go.sum file for a module.
 
@@ -726,8 +695,7 @@
 }
 ```
 
-### **Upgrade a dependency**
-Identifier: `gopls.upgrade_dependency`
+## `gopls.upgrade_dependency`: **Upgrade a dependency**
 
 Upgrades a dependency in the go.mod file for a module.
 
@@ -744,8 +712,7 @@
 }
 ```
 
-### **Run go mod vendor**
-Identifier: `gopls.vendor`
+## `gopls.vendor`: **Run go mod vendor**
 
 Runs `go mod vendor` for a module.
 
@@ -758,8 +725,7 @@
 }
 ```
 
-### **List current Views on the server.**
-Identifier: `gopls.views`
+## `gopls.views`: **List current Views on the server.**
 
 This command is intended for use by gopls tests only.
 
@@ -775,8 +741,7 @@
 }
 ```
 
-### **Fetch workspace statistics**
-Identifier: `gopls.workspace_stats`
+## `gopls.workspace_stats`: **Fetch workspace statistics**
 
 Query statistics about workspace builds, modules, packages, and files.
 
diff --git a/gopls/doc/generate/generate.go b/gopls/doc/generate/generate.go
index f49a787..3373527 100644
--- a/gopls/doc/generate/generate.go
+++ b/gopls/doc/generate/generate.go
@@ -40,7 +40,6 @@
 	"golang.org/x/tools/gopls/internal/golang"
 	"golang.org/x/tools/gopls/internal/mod"
 	"golang.org/x/tools/gopls/internal/protocol"
-	"golang.org/x/tools/gopls/internal/protocol/command"
 	"golang.org/x/tools/gopls/internal/protocol/command/commandmeta"
 	"golang.org/x/tools/gopls/internal/settings"
 	"golang.org/x/tools/gopls/internal/util/maps"
@@ -170,10 +169,6 @@
 		return nil, err
 	}
 
-	// Transform the internal command name to the external command name.
-	for _, c := range api.Commands {
-		c.Command = command.ID(c.Command)
-	}
 	api.Hints = loadHints(golang.AllInlayHints)
 	for _, category := range []reflect.Value{
 		reflect.ValueOf(defaults.UserOptions),
@@ -707,8 +702,6 @@
 				fmt.Fprintf(&buf, "<a id='%s'></a>\n", opt.Name)
 
 				// heading
-				// (The blob helps the reader see the start of each item,
-				// which is otherwise hard to discern in GitHub markdown.)
 				//
 				// TODO(adonovan): We should display not the Go type (e.g.
 				// `time.Duration`, `map[Enum]bool`) for each setting,
@@ -720,7 +713,7 @@
 				//
 				// We do not display the undocumented dotted-path alias
 				// (h.title + "." + opt.Name) used by VS Code only.
-				fmt.Fprintf(&buf, "### ⬤ `%s` *%v*\n\n", opt.Name, opt.Type)
+				fmt.Fprintf(&buf, "### `%s` *%v*\n\n", opt.Name, opt.Type)
 
 				// status
 				switch opt.Status {
@@ -848,7 +841,7 @@
 func rewriteCodeLenses(prevContent []byte, api *doc.API) ([]byte, error) {
 	var buf bytes.Buffer
 	for _, lens := range api.Lenses {
-		fmt.Fprintf(&buf, "## ⬤ `%s`: %s\n\n", lens.Lens, lens.Title)
+		fmt.Fprintf(&buf, "## `%s`: %s\n\n", lens.Lens, lens.Title)
 		fmt.Fprintf(&buf, "%s\n\n", lens.Doc)
 		fmt.Fprintf(&buf, "Default: %v\n\n", onOff(lens.Default))
 		fmt.Fprintf(&buf, "File type: %s\n\n", lens.FileType)
@@ -859,7 +852,7 @@
 func rewriteCommands(prevContent []byte, api *doc.API) ([]byte, error) {
 	var buf bytes.Buffer
 	for _, command := range api.Commands {
-		fmt.Fprintf(&buf, "### **%v**\nIdentifier: `%v`\n\n%v\n\n", command.Title, command.Command, command.Doc)
+		fmt.Fprintf(&buf, "## `%s`: **%s**\n\n%v\n\n", command.Command, command.Title, command.Doc)
 		if command.ArgDoc != "" {
 			fmt.Fprintf(&buf, "Args:\n\n```\n%s\n```\n\n", command.ArgDoc)
 		}
diff --git a/gopls/doc/settings.md b/gopls/doc/settings.md
index a3c5bb5..83f6280 100644
--- a/gopls/doc/settings.md
+++ b/gopls/doc/settings.md
@@ -48,7 +48,7 @@
 ## Build
 
 <a id='buildFlags'></a>
-### ⬤ `buildFlags` *[]string*
+### `buildFlags` *[]string*
 
 buildFlags is the set of flags passed on to the build system when invoked.
 It is applied to queries like `go list`, which is used when discovering files.
@@ -57,14 +57,14 @@
 Default: `[]`.
 
 <a id='env'></a>
-### ⬤ `env` *map[string]string*
+### `env` *map[string]string*
 
 env adds environment variables to external commands run by `gopls`, most notably `go list`.
 
 Default: `{}`.
 
 <a id='directoryFilters'></a>
-### ⬤ `directoryFilters` *[]string*
+### `directoryFilters` *[]string*
 
 directoryFilters can be used to exclude unwanted directories from the
 workspace. By default, all directories are included. Filters are an
@@ -88,7 +88,7 @@
 Default: `["-**/node_modules"]`.
 
 <a id='templateExtensions'></a>
-### ⬤ `templateExtensions` *[]string*
+### `templateExtensions` *[]string*
 
 templateExtensions gives the extensions of file names that are treateed
 as template files. (The extension
@@ -97,7 +97,7 @@
 Default: `[]`.
 
 <a id='memoryMode'></a>
-### ⬤ `memoryMode` *string*
+### `memoryMode` *string*
 
 **This setting is experimental and may be deleted.**
 
@@ -106,7 +106,7 @@
 Default: `""`.
 
 <a id='expandWorkspaceToModule'></a>
-### ⬤ `expandWorkspaceToModule` *bool*
+### `expandWorkspaceToModule` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -122,7 +122,7 @@
 Default: `true`.
 
 <a id='allowImplicitNetworkAccess'></a>
-### ⬤ `allowImplicitNetworkAccess` *bool*
+### `allowImplicitNetworkAccess` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -133,7 +133,7 @@
 Default: `false`.
 
 <a id='standaloneTags'></a>
-### ⬤ `standaloneTags` *[]string*
+### `standaloneTags` *[]string*
 
 standaloneTags specifies a set of build constraints that identify
 individual Go source files that make up the entire main package of an
@@ -160,7 +160,7 @@
 ## Formatting
 
 <a id='local'></a>
-### ⬤ `local` *string*
+### `local` *string*
 
 local is the equivalent of the `goimports -local` flag, which puts
 imports beginning with this string after third-party packages. It should
@@ -170,7 +170,7 @@
 Default: `""`.
 
 <a id='gofumpt'></a>
-### ⬤ `gofumpt` *bool*
+### `gofumpt` *bool*
 
 gofumpt indicates if we should run gofumpt formatting.
 
@@ -180,7 +180,7 @@
 ## UI
 
 <a id='codelenses'></a>
-### ⬤ `codelenses` *map[golang.org/x/tools/gopls/internal/protocol.CodeLensSource]bool*
+### `codelenses` *map[golang.org/x/tools/gopls/internal/protocol.CodeLensSource]bool*
 
 codelenses overrides the enabled/disabled state of each of gopls'
 sources of [Code Lenses](codelenses.md).
@@ -201,7 +201,7 @@
 Default: `{"gc_details":false,"generate":true,"regenerate_cgo":true,"run_govulncheck":false,"tidy":true,"upgrade_dependency":true,"vendor":true}`.
 
 <a id='semanticTokens'></a>
-### ⬤ `semanticTokens` *bool*
+### `semanticTokens` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -211,7 +211,7 @@
 Default: `false`.
 
 <a id='noSemanticString'></a>
-### ⬤ `noSemanticString` *bool*
+### `noSemanticString` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -220,7 +220,7 @@
 Default: `false`.
 
 <a id='noSemanticNumber'></a>
-### ⬤ `noSemanticNumber` *bool*
+### `noSemanticNumber` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -232,7 +232,7 @@
 ## Completion
 
 <a id='usePlaceholders'></a>
-### ⬤ `usePlaceholders` *bool*
+### `usePlaceholders` *bool*
 
 placeholders enables placeholders for function parameters or struct
 fields in completion responses.
@@ -240,7 +240,7 @@
 Default: `false`.
 
 <a id='completionBudget'></a>
-### ⬤ `completionBudget` *time.Duration*
+### `completionBudget` *time.Duration*
 
 **This setting is for debugging purposes only.**
 
@@ -253,7 +253,7 @@
 Default: `"100ms"`.
 
 <a id='matcher'></a>
-### ⬤ `matcher` *enum*
+### `matcher` *enum*
 
 **This is an advanced setting and should not be configured by most `gopls` users.**
 
@@ -269,7 +269,7 @@
 Default: `"Fuzzy"`.
 
 <a id='experimentalPostfixCompletions'></a>
-### ⬤ `experimentalPostfixCompletions` *bool*
+### `experimentalPostfixCompletions` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -279,7 +279,7 @@
 Default: `true`.
 
 <a id='completeFunctionCalls'></a>
-### ⬤ `completeFunctionCalls` *bool*
+### `completeFunctionCalls` *bool*
 
 completeFunctionCalls enables function call completion.
 
@@ -293,7 +293,7 @@
 ## Diagnostic
 
 <a id='analyses'></a>
-### ⬤ `analyses` *map[string]bool*
+### `analyses` *map[string]bool*
 
 analyses specify analyses that the user would like to enable or disable.
 A map of the names of analysis passes that should be enabled/disabled.
@@ -314,7 +314,7 @@
 Default: `{}`.
 
 <a id='staticcheck'></a>
-### ⬤ `staticcheck` *bool*
+### `staticcheck` *bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -325,7 +325,7 @@
 Default: `false`.
 
 <a id='annotations'></a>
-### ⬤ `annotations` *map[string]bool*
+### `annotations` *map[string]bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -342,7 +342,7 @@
 Default: `{"bounds":true,"escape":true,"inline":true,"nil":true}`.
 
 <a id='vulncheck'></a>
-### ⬤ `vulncheck` *enum*
+### `vulncheck` *enum*
 
 **This setting is experimental and may be deleted.**
 
@@ -357,7 +357,7 @@
 Default: `"Off"`.
 
 <a id='diagnosticsDelay'></a>
-### ⬤ `diagnosticsDelay` *time.Duration*
+### `diagnosticsDelay` *time.Duration*
 
 **This is an advanced setting and should not be configured by most `gopls` users.**
 
@@ -371,7 +371,7 @@
 Default: `"1s"`.
 
 <a id='diagnosticsTrigger'></a>
-### ⬤ `diagnosticsTrigger` *enum*
+### `diagnosticsTrigger` *enum*
 
 **This setting is experimental and may be deleted.**
 
@@ -386,7 +386,7 @@
 Default: `"Edit"`.
 
 <a id='analysisProgressReporting'></a>
-### ⬤ `analysisProgressReporting` *bool*
+### `analysisProgressReporting` *bool*
 
 analysisProgressReporting controls whether gopls sends progress
 notifications when construction of its index of analysis facts is taking a
@@ -404,7 +404,7 @@
 ## Documentation
 
 <a id='hoverKind'></a>
-### ⬤ `hoverKind` *enum*
+### `hoverKind` *enum*
 
 hoverKind controls the information that appears in the hover text.
 SingleLine and Structured are intended for use only by authors of editor plugins.
@@ -423,7 +423,7 @@
 Default: `"FullDocumentation"`.
 
 <a id='linkTarget'></a>
-### ⬤ `linkTarget` *string*
+### `linkTarget` *string*
 
 linkTarget controls where documentation links go.
 It might be one of:
@@ -439,7 +439,7 @@
 Default: `"pkg.go.dev"`.
 
 <a id='linksInHover'></a>
-### ⬤ `linksInHover` *bool*
+### `linksInHover` *bool*
 
 linksInHover toggles the presence of links to documentation in hover.
 
@@ -449,7 +449,7 @@
 ## Inlayhint
 
 <a id='hints'></a>
-### ⬤ `hints` *map[string]bool*
+### `hints` *map[string]bool*
 
 **This setting is experimental and may be deleted.**
 
@@ -463,7 +463,7 @@
 ## Navigation
 
 <a id='importShortcut'></a>
-### ⬤ `importShortcut` *enum*
+### `importShortcut` *enum*
 
 importShortcut specifies whether import statements should link to
 documentation or go to definitions.
@@ -477,7 +477,7 @@
 Default: `"Both"`.
 
 <a id='symbolMatcher'></a>
-### ⬤ `symbolMatcher` *enum*
+### `symbolMatcher` *enum*
 
 **This is an advanced setting and should not be configured by most `gopls` users.**
 
@@ -493,7 +493,7 @@
 Default: `"FastFuzzy"`.
 
 <a id='symbolStyle'></a>
-### ⬤ `symbolStyle` *enum*
+### `symbolStyle` *enum*
 
 **This is an advanced setting and should not be configured by most `gopls` users.**
 
@@ -523,7 +523,7 @@
 Default: `"Dynamic"`.
 
 <a id='symbolScope'></a>
-### ⬤ `symbolScope` *enum*
+### `symbolScope` *enum*
 
 symbolScope controls which packages are searched for workspace/symbol
 requests. When the scope is "workspace", gopls searches only workspace
@@ -539,7 +539,7 @@
 Default: `"all"`.
 
 <a id='verboseOutput'></a>
-### ⬤ `verboseOutput` *bool*
+### `verboseOutput` *bool*
 
 **This setting is for debugging purposes only.**
 
diff --git a/gopls/internal/cmd/execute.go b/gopls/internal/cmd/execute.go
index 485e6d0..0797c9f 100644
--- a/gopls/internal/cmd/execute.go
+++ b/gopls/internal/cmd/execute.go
@@ -11,7 +11,6 @@
 	"fmt"
 	"log"
 	"os"
-	"strings"
 
 	"golang.org/x/tools/gopls/internal/protocol"
 	"golang.org/x/tools/gopls/internal/protocol/command"
@@ -58,7 +57,7 @@
 		return tool.CommandLineErrorf("execute requires a command name")
 	}
 	cmd := args[0]
-	if !slices.Contains(command.Commands, command.Command(strings.TrimPrefix(cmd, "gopls."))) {
+	if !slices.Contains(command.Commands, command.Command(cmd)) {
 		return tool.CommandLineErrorf("unrecognized command: %s", cmd)
 	}
 
@@ -127,8 +126,7 @@
 
 	// Some commands are asynchronous, so clients
 	// must wait for the "end" progress notification.
-	enum := command.Command(strings.TrimPrefix(cmd.Command, "gopls."))
-	if enum.IsAsync() {
+	if command.Command(cmd.Command).IsAsync() {
 		status := <-endStatus
 		if status != server.CommandCompleted {
 			return nil, fmt.Errorf("command %s", status)
diff --git a/gopls/internal/cmd/remote.go b/gopls/internal/cmd/remote.go
index 8de4365..ae4aa55 100644
--- a/gopls/internal/cmd/remote.go
+++ b/gopls/internal/cmd/remote.go
@@ -151,7 +151,7 @@
 		Addr: debugAddr,
 	}
 	var result command.DebuggingResult
-	if err := lsprpc.ExecuteCommand(ctx, remote, command.StartDebugging.ID(), debugArgs, &result); err != nil {
+	if err := lsprpc.ExecuteCommand(ctx, remote, command.StartDebugging.String(), debugArgs, &result); err != nil {
 		return err
 	}
 	if len(result.URLs) == 0 {
diff --git a/gopls/internal/cmd/stats.go b/gopls/internal/cmd/stats.go
index a788801..cc19a94 100644
--- a/gopls/internal/cmd/stats.go
+++ b/gopls/internal/cmd/stats.go
@@ -128,7 +128,7 @@
 
 	if _, err := do("Querying memstats", func() error {
 		memStats, err := conn.executeCommand(ctx, &protocol.Command{
-			Command: command.MemStats.ID(),
+			Command: command.MemStats.String(),
 		})
 		if err != nil {
 			return err
@@ -141,7 +141,7 @@
 
 	if _, err := do("Querying workspace stats", func() error {
 		wsStats, err := conn.executeCommand(ctx, &protocol.Command{
-			Command: command.WorkspaceStats.ID(),
+			Command: command.WorkspaceStats.String(),
 		})
 		if err != nil {
 			return err
diff --git a/gopls/internal/doc/api.go b/gopls/internal/doc/api.go
index 54bd917..62e6b5b 100644
--- a/gopls/internal/doc/api.go
+++ b/gopls/internal/doc/api.go
@@ -55,7 +55,7 @@
 }
 
 type Command struct {
-	Command   string
+	Command   string // e.g. "gopls.run_tests"
 	Title     string
 	Doc       string
 	ArgDoc    string
diff --git a/gopls/internal/lsprpc/lsprpc.go b/gopls/internal/lsprpc/lsprpc.go
index ceb47aa..b77557c 100644
--- a/gopls/internal/lsprpc/lsprpc.go
+++ b/gopls/internal/lsprpc/lsprpc.go
@@ -290,7 +290,7 @@
 		case "workspace/executeCommand":
 			var params protocol.ExecuteCommandParams
 			if err := json.Unmarshal(r.Params(), &params); err == nil {
-				if params.Command == command.StartDebugging.ID() {
+				if params.Command == command.StartDebugging.String() {
 					var args command.DebuggingArgs
 					if err := command.UnmarshalArgs(params.Arguments, &args); err == nil {
 						reply = f.replyWithDebugAddress(ctx, reply, args)
diff --git a/gopls/internal/protocol/command/command_gen.go b/gopls/internal/protocol/command/command_gen.go
index fe4b7d3..5e267af 100644
--- a/gopls/internal/protocol/command/command_gen.go
+++ b/gopls/internal/protocol/command/command_gen.go
@@ -18,45 +18,47 @@
 	"golang.org/x/tools/gopls/internal/protocol"
 )
 
-// Symbolic names for gopls commands, excluding "gopls." prefix.
-// These commands may be requested by ExecuteCommand, CodeLens,
-// CodeAction, and other LSP requests.
+// Symbolic names for gopls commands, corresponding to methods of [Interface].
+//
+// The string value is used in the Command field of protocol.Command.
+// These commands may be obtained from a CodeLens or CodeAction request
+// and executed by an ExecuteCommand request.
 const (
-	AddDependency           Command = "add_dependency"
-	AddImport               Command = "add_import"
-	AddTelemetryCounters    Command = "add_telemetry_counters"
-	ApplyFix                Command = "apply_fix"
-	ChangeSignature         Command = "change_signature"
-	CheckUpgrades           Command = "check_upgrades"
-	DiagnoseFiles           Command = "diagnose_files"
-	Doc                     Command = "doc"
-	EditGoDirective         Command = "edit_go_directive"
-	FetchVulncheckResult    Command = "fetch_vulncheck_result"
-	FreeSymbols             Command = "free_symbols"
-	GCDetails               Command = "gc_details"
-	Generate                Command = "generate"
-	GoGetPackage            Command = "go_get_package"
-	ListImports             Command = "list_imports"
-	ListKnownPackages       Command = "list_known_packages"
-	MaybePromptForTelemetry Command = "maybe_prompt_for_telemetry"
-	MemStats                Command = "mem_stats"
-	RegenerateCgo           Command = "regenerate_cgo"
-	RemoveDependency        Command = "remove_dependency"
-	ResetGoModDiagnostics   Command = "reset_go_mod_diagnostics"
-	RunGoWorkCommand        Command = "run_go_work_command"
-	RunGovulncheck          Command = "run_govulncheck"
-	RunTests                Command = "run_tests"
-	StartDebugging          Command = "start_debugging"
-	StartProfile            Command = "start_profile"
-	StopProfile             Command = "stop_profile"
-	Test                    Command = "test"
-	Tidy                    Command = "tidy"
-	ToggleGCDetails         Command = "toggle_gc_details"
-	UpdateGoSum             Command = "update_go_sum"
-	UpgradeDependency       Command = "upgrade_dependency"
-	Vendor                  Command = "vendor"
-	Views                   Command = "views"
-	WorkspaceStats          Command = "workspace_stats"
+	AddDependency           Command = "gopls.add_dependency"
+	AddImport               Command = "gopls.add_import"
+	AddTelemetryCounters    Command = "gopls.add_telemetry_counters"
+	ApplyFix                Command = "gopls.apply_fix"
+	ChangeSignature         Command = "gopls.change_signature"
+	CheckUpgrades           Command = "gopls.check_upgrades"
+	DiagnoseFiles           Command = "gopls.diagnose_files"
+	Doc                     Command = "gopls.doc"
+	EditGoDirective         Command = "gopls.edit_go_directive"
+	FetchVulncheckResult    Command = "gopls.fetch_vulncheck_result"
+	FreeSymbols             Command = "gopls.free_symbols"
+	GCDetails               Command = "gopls.gc_details"
+	Generate                Command = "gopls.generate"
+	GoGetPackage            Command = "gopls.go_get_package"
+	ListImports             Command = "gopls.list_imports"
+	ListKnownPackages       Command = "gopls.list_known_packages"
+	MaybePromptForTelemetry Command = "gopls.maybe_prompt_for_telemetry"
+	MemStats                Command = "gopls.mem_stats"
+	RegenerateCgo           Command = "gopls.regenerate_cgo"
+	RemoveDependency        Command = "gopls.remove_dependency"
+	ResetGoModDiagnostics   Command = "gopls.reset_go_mod_diagnostics"
+	RunGoWorkCommand        Command = "gopls.run_go_work_command"
+	RunGovulncheck          Command = "gopls.run_govulncheck"
+	RunTests                Command = "gopls.run_tests"
+	StartDebugging          Command = "gopls.start_debugging"
+	StartProfile            Command = "gopls.start_profile"
+	StopProfile             Command = "gopls.stop_profile"
+	Test                    Command = "gopls.test"
+	Tidy                    Command = "gopls.tidy"
+	ToggleGCDetails         Command = "gopls.toggle_gc_details"
+	UpdateGoSum             Command = "gopls.update_go_sum"
+	UpgradeDependency       Command = "gopls.upgrade_dependency"
+	Vendor                  Command = "gopls.vendor"
+	Views                   Command = "gopls.views"
+	WorkspaceStats          Command = "gopls.workspace_stats"
 )
 
 var Commands = []Command{
@@ -98,163 +100,163 @@
 }
 
 func Dispatch(ctx context.Context, params *protocol.ExecuteCommandParams, s Interface) (interface{}, error) {
-	switch params.Command {
-	case "gopls.add_dependency":
+	switch Command(params.Command) {
+	case AddDependency:
 		var a0 DependencyArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.AddDependency(ctx, a0)
-	case "gopls.add_import":
+	case AddImport:
 		var a0 AddImportArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.AddImport(ctx, a0)
-	case "gopls.add_telemetry_counters":
+	case AddTelemetryCounters:
 		var a0 AddTelemetryCountersArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.AddTelemetryCounters(ctx, a0)
-	case "gopls.apply_fix":
+	case ApplyFix:
 		var a0 ApplyFixArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.ApplyFix(ctx, a0)
-	case "gopls.change_signature":
+	case ChangeSignature:
 		var a0 ChangeSignatureArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.ChangeSignature(ctx, a0)
-	case "gopls.check_upgrades":
+	case CheckUpgrades:
 		var a0 CheckUpgradesArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.CheckUpgrades(ctx, a0)
-	case "gopls.diagnose_files":
+	case DiagnoseFiles:
 		var a0 DiagnoseFilesArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.DiagnoseFiles(ctx, a0)
-	case "gopls.doc":
+	case Doc:
 		var a0 protocol.Location
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.Doc(ctx, a0)
-	case "gopls.edit_go_directive":
+	case EditGoDirective:
 		var a0 EditGoDirectiveArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.EditGoDirective(ctx, a0)
-	case "gopls.fetch_vulncheck_result":
+	case FetchVulncheckResult:
 		var a0 URIArg
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.FetchVulncheckResult(ctx, a0)
-	case "gopls.free_symbols":
+	case FreeSymbols:
 		var a0 protocol.DocumentURI
 		var a1 protocol.Range
 		if err := UnmarshalArgs(params.Arguments, &a0, &a1); err != nil {
 			return nil, err
 		}
 		return nil, s.FreeSymbols(ctx, a0, a1)
-	case "gopls.gc_details":
+	case GCDetails:
 		var a0 protocol.DocumentURI
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.GCDetails(ctx, a0)
-	case "gopls.generate":
+	case Generate:
 		var a0 GenerateArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.Generate(ctx, a0)
-	case "gopls.go_get_package":
+	case GoGetPackage:
 		var a0 GoGetPackageArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.GoGetPackage(ctx, a0)
-	case "gopls.list_imports":
+	case ListImports:
 		var a0 URIArg
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.ListImports(ctx, a0)
-	case "gopls.list_known_packages":
+	case ListKnownPackages:
 		var a0 URIArg
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.ListKnownPackages(ctx, a0)
-	case "gopls.maybe_prompt_for_telemetry":
+	case MaybePromptForTelemetry:
 		return nil, s.MaybePromptForTelemetry(ctx)
-	case "gopls.mem_stats":
+	case MemStats:
 		return s.MemStats(ctx)
-	case "gopls.regenerate_cgo":
+	case RegenerateCgo:
 		var a0 URIArg
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.RegenerateCgo(ctx, a0)
-	case "gopls.remove_dependency":
+	case RemoveDependency:
 		var a0 RemoveDependencyArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.RemoveDependency(ctx, a0)
-	case "gopls.reset_go_mod_diagnostics":
+	case ResetGoModDiagnostics:
 		var a0 ResetGoModDiagnosticsArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.ResetGoModDiagnostics(ctx, a0)
-	case "gopls.run_go_work_command":
+	case RunGoWorkCommand:
 		var a0 RunGoWorkArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.RunGoWorkCommand(ctx, a0)
-	case "gopls.run_govulncheck":
+	case RunGovulncheck:
 		var a0 VulncheckArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.RunGovulncheck(ctx, a0)
-	case "gopls.run_tests":
+	case RunTests:
 		var a0 RunTestsArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.RunTests(ctx, a0)
-	case "gopls.start_debugging":
+	case StartDebugging:
 		var a0 DebuggingArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.StartDebugging(ctx, a0)
-	case "gopls.start_profile":
+	case StartProfile:
 		var a0 StartProfileArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.StartProfile(ctx, a0)
-	case "gopls.stop_profile":
+	case StopProfile:
 		var a0 StopProfileArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return s.StopProfile(ctx, a0)
-	case "gopls.test":
+	case Test:
 		var a0 protocol.DocumentURI
 		var a1 []string
 		var a2 []string
@@ -262,39 +264,39 @@
 			return nil, err
 		}
 		return nil, s.Test(ctx, a0, a1, a2)
-	case "gopls.tidy":
+	case Tidy:
 		var a0 URIArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.Tidy(ctx, a0)
-	case "gopls.toggle_gc_details":
+	case ToggleGCDetails:
 		var a0 URIArg
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.ToggleGCDetails(ctx, a0)
-	case "gopls.update_go_sum":
+	case UpdateGoSum:
 		var a0 URIArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.UpdateGoSum(ctx, a0)
-	case "gopls.upgrade_dependency":
+	case UpgradeDependency:
 		var a0 DependencyArgs
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.UpgradeDependency(ctx, a0)
-	case "gopls.vendor":
+	case Vendor:
 		var a0 URIArg
 		if err := UnmarshalArgs(params.Arguments, &a0); err != nil {
 			return nil, err
 		}
 		return nil, s.Vendor(ctx, a0)
-	case "gopls.views":
+	case Views:
 		return s.Views(ctx)
-	case "gopls.workspace_stats":
+	case WorkspaceStats:
 		return s.WorkspaceStats(ctx)
 	}
 	return nil, fmt.Errorf("unsupported command %q", params.Command)
@@ -307,7 +309,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.add_dependency",
+		Command:   AddDependency.String(),
 		Arguments: args,
 	}, nil
 }
@@ -319,7 +321,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.add_import",
+		Command:   AddImport.String(),
 		Arguments: args,
 	}, nil
 }
@@ -331,7 +333,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.add_telemetry_counters",
+		Command:   AddTelemetryCounters.String(),
 		Arguments: args,
 	}, nil
 }
@@ -343,7 +345,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.apply_fix",
+		Command:   ApplyFix.String(),
 		Arguments: args,
 	}, nil
 }
@@ -355,7 +357,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.change_signature",
+		Command:   ChangeSignature.String(),
 		Arguments: args,
 	}, nil
 }
@@ -367,7 +369,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.check_upgrades",
+		Command:   CheckUpgrades.String(),
 		Arguments: args,
 	}, nil
 }
@@ -379,7 +381,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.diagnose_files",
+		Command:   DiagnoseFiles.String(),
 		Arguments: args,
 	}, nil
 }
@@ -391,7 +393,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.doc",
+		Command:   Doc.String(),
 		Arguments: args,
 	}, nil
 }
@@ -403,7 +405,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.edit_go_directive",
+		Command:   EditGoDirective.String(),
 		Arguments: args,
 	}, nil
 }
@@ -415,7 +417,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.fetch_vulncheck_result",
+		Command:   FetchVulncheckResult.String(),
 		Arguments: args,
 	}, nil
 }
@@ -427,7 +429,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.free_symbols",
+		Command:   FreeSymbols.String(),
 		Arguments: args,
 	}, nil
 }
@@ -439,7 +441,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.gc_details",
+		Command:   GCDetails.String(),
 		Arguments: args,
 	}, nil
 }
@@ -451,7 +453,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.generate",
+		Command:   Generate.String(),
 		Arguments: args,
 	}, nil
 }
@@ -463,7 +465,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.go_get_package",
+		Command:   GoGetPackage.String(),
 		Arguments: args,
 	}, nil
 }
@@ -475,7 +477,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.list_imports",
+		Command:   ListImports.String(),
 		Arguments: args,
 	}, nil
 }
@@ -487,7 +489,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.list_known_packages",
+		Command:   ListKnownPackages.String(),
 		Arguments: args,
 	}, nil
 }
@@ -499,7 +501,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.maybe_prompt_for_telemetry",
+		Command:   MaybePromptForTelemetry.String(),
 		Arguments: args,
 	}, nil
 }
@@ -511,7 +513,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.mem_stats",
+		Command:   MemStats.String(),
 		Arguments: args,
 	}, nil
 }
@@ -523,7 +525,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.regenerate_cgo",
+		Command:   RegenerateCgo.String(),
 		Arguments: args,
 	}, nil
 }
@@ -535,7 +537,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.remove_dependency",
+		Command:   RemoveDependency.String(),
 		Arguments: args,
 	}, nil
 }
@@ -547,7 +549,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.reset_go_mod_diagnostics",
+		Command:   ResetGoModDiagnostics.String(),
 		Arguments: args,
 	}, nil
 }
@@ -559,7 +561,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.run_go_work_command",
+		Command:   RunGoWorkCommand.String(),
 		Arguments: args,
 	}, nil
 }
@@ -571,7 +573,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.run_govulncheck",
+		Command:   RunGovulncheck.String(),
 		Arguments: args,
 	}, nil
 }
@@ -583,7 +585,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.run_tests",
+		Command:   RunTests.String(),
 		Arguments: args,
 	}, nil
 }
@@ -595,7 +597,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.start_debugging",
+		Command:   StartDebugging.String(),
 		Arguments: args,
 	}, nil
 }
@@ -607,7 +609,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.start_profile",
+		Command:   StartProfile.String(),
 		Arguments: args,
 	}, nil
 }
@@ -619,7 +621,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.stop_profile",
+		Command:   StopProfile.String(),
 		Arguments: args,
 	}, nil
 }
@@ -631,7 +633,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.test",
+		Command:   Test.String(),
 		Arguments: args,
 	}, nil
 }
@@ -643,7 +645,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.tidy",
+		Command:   Tidy.String(),
 		Arguments: args,
 	}, nil
 }
@@ -655,7 +657,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.toggle_gc_details",
+		Command:   ToggleGCDetails.String(),
 		Arguments: args,
 	}, nil
 }
@@ -667,7 +669,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.update_go_sum",
+		Command:   UpdateGoSum.String(),
 		Arguments: args,
 	}, nil
 }
@@ -679,7 +681,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.upgrade_dependency",
+		Command:   UpgradeDependency.String(),
 		Arguments: args,
 	}, nil
 }
@@ -691,7 +693,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.vendor",
+		Command:   Vendor.String(),
 		Arguments: args,
 	}, nil
 }
@@ -703,7 +705,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.views",
+		Command:   Views.String(),
 		Arguments: args,
 	}, nil
 }
@@ -715,7 +717,7 @@
 	}
 	return protocol.Command{
 		Title:     title,
-		Command:   "gopls.workspace_stats",
+		Command:   WorkspaceStats.String(),
 		Arguments: args,
 	}, nil
 }
diff --git a/gopls/internal/protocol/command/commandmeta/meta.go b/gopls/internal/protocol/command/commandmeta/meta.go
index db66bb3..d9a5d27 100644
--- a/gopls/internal/protocol/command/commandmeta/meta.go
+++ b/gopls/internal/protocol/command/commandmeta/meta.go
@@ -23,19 +23,14 @@
 
 // A Command describes a workspace/executeCommand extension command.
 type Command struct {
-	MethodName string
-	Name       string
-	// TODO(rFindley): I think Title can actually be eliminated. In all cases
-	// where we use it, there is probably a more appropriate contextual title.
-	Title  string
-	Doc    string
-	Args   []*Field
-	Result *Field
+	MethodName string // e.g. "RunTests"
+	Name       string // e.g. "gopls.run_tests"
+	Title      string
+	Doc        string
+	Args       []*Field
+	Result     *Field
 }
 
-// (used by the ../command/gen template)
-func (c *Command) ID() string { return "gopls." + c.Name }
-
 type Field struct {
 	Name     string
 	Doc      string
@@ -208,7 +203,7 @@
 	for i := range words {
 		words[i] = strings.ToLower(words[i])
 	}
-	return strings.Join(words, "_")
+	return "gopls." + strings.Join(words, "_")
 }
 
 // splitCamel splits s into words, according to camel-case word boundaries.
diff --git a/gopls/internal/protocol/command/gen/gen.go b/gopls/internal/protocol/command/gen/gen.go
index fadb12a..8ae50f6 100644
--- a/gopls/internal/protocol/command/gen/gen.go
+++ b/gopls/internal/protocol/command/gen/gen.go
@@ -35,9 +35,11 @@
 	{{end}}
 )
 
-// Symbolic names for gopls commands, excluding "gopls." prefix.
-// These commands may be requested by ExecuteCommand, CodeLens,
-// CodeAction, and other LSP requests.
+// Symbolic names for gopls commands, corresponding to methods of [Interface].
+//
+// The string value is used in the Command field of protocol.Command.
+// These commands may be obtained from a CodeLens or CodeAction request
+// and executed by an ExecuteCommand request.
 const (
 {{- range .Commands}}
 	{{.MethodName}} Command = "{{.Name}}"
@@ -51,9 +53,9 @@
 }
 
 func Dispatch(ctx context.Context, params *protocol.ExecuteCommandParams, s Interface) (interface{}, error) {
-	switch params.Command {
+	switch Command(params.Command) {
 	{{- range .Commands}}
-	case "{{.ID}}":
+	case {{.MethodName}}:
 		{{- if .Args -}}
 			{{- range $i, $v := .Args}}
 		var a{{$i}} {{typeString $v.Type}}
@@ -76,7 +78,7 @@
 	}
 	return protocol.Command{
 		Title: title,
-		Command: "{{.ID}}",
+		Command: {{.MethodName}}.String(),
 		Arguments: args,
 	}, nil
 }
diff --git a/gopls/internal/protocol/command/interface.go b/gopls/internal/protocol/command/interface.go
index 0934cf2..e8d6d7d 100644
--- a/gopls/internal/protocol/command/interface.go
+++ b/gopls/internal/protocol/command/interface.go
@@ -29,9 +29,8 @@
 //  1. All method arguments must be JSON serializable.
 //  2. Methods must return either error or (T, error), where T is a
 //     JSON serializable type.
-//  3. The first line of the doc string is special. Everything after the colon
-//     is considered the command 'Title'.
-//     TODO(rFindley): reconsider this -- Title may be unnecessary.
+//  3. The first line of the doc string is special.
+//     Everything after the colon is considered the command 'Title'.
 //
 // The doc comment on each method is eventually published at
 // https://github.com/golang/tools/blob/master/gopls/doc/commands.md,
diff --git a/gopls/internal/protocol/command/util.go b/gopls/internal/protocol/command/util.go
index 0d9799f..b403679 100644
--- a/gopls/internal/protocol/command/util.go
+++ b/gopls/internal/protocol/command/util.go
@@ -9,35 +9,24 @@
 	"fmt"
 )
 
-// TODO(adonovan): use the "gopls."-prefix forms everywhere. The
-// existence of two forms is a nuisance. I think it should be a
-// straightforward fix, as all public APIs and docs use that form
-// already.
-
-// ID returns the command name for use in the LSP.
-func ID(name string) string {
-	return "gopls." + name
-}
-
+// A Command identifies one of gopls' ad-hoc extension commands
+// that may be invoked through LSP's executeCommand.
 type Command string
 
+func (c Command) String() string { return string(c) }
+
 // IsAsync reports whether the command is asynchronous:
 // clients must wait for the "end" progress notification.
 func (c Command) IsAsync() bool {
 	switch string(c) {
 	// TODO(adonovan): derive this list from interface.go somewhow.
 	// Unfortunately we can't even reference the enum from here...
-	case "run_tests", "run_govulncheck", "test":
+	case "gopls.run_tests", "gopls.run_govulncheck", "gopls.test":
 		return true
 	}
 	return false
 }
 
-// ID returns the command identifier to use in the executeCommand request.
-func (c Command) ID() string {
-	return ID(string(c))
-}
-
 // MarshalArgs encodes the given arguments to json.RawMessages. This function
 // is used to construct arguments to a protocol.Command.
 //
diff --git a/gopls/internal/server/command.go b/gopls/internal/server/command.go
index ad2eb95..0a64d1c 100644
--- a/gopls/internal/server/command.go
+++ b/gopls/internal/server/command.go
@@ -187,8 +187,7 @@
 		return err
 	}
 
-	enum := command.Command(strings.TrimPrefix(c.params.Command, "gopls."))
-	if enum.IsAsync() {
+	if enum := command.Command(c.params.Command); enum.IsAsync() {
 		if cfg.progress == "" {
 			log.Fatalf("asynchronous command %q does not enable progress reporting",
 				enum)
diff --git a/gopls/internal/settings/default.go b/gopls/internal/settings/default.go
index 56dce7e..e280c75 100644
--- a/gopls/internal/settings/default.go
+++ b/gopls/internal/settings/default.go
@@ -27,7 +27,7 @@
 	optionsOnce.Do(func() {
 		var commands []string
 		for _, c := range command.Commands {
-			commands = append(commands, c.ID())
+			commands = append(commands, c.String())
 		}
 		defaultOptions = &Options{
 			ClientOptions: ClientOptions{
diff --git a/gopls/internal/telemetry/telemetry_test.go b/gopls/internal/telemetry/telemetry_test.go
index d2eecdf..6c1944b 100644
--- a/gopls/internal/telemetry/telemetry_test.go
+++ b/gopls/internal/telemetry/telemetry_test.go
@@ -123,11 +123,11 @@
 	}
 	var res error
 	env.ExecuteCommand(&protocol.ExecuteCommandParams{
-		Command:   command.AddTelemetryCounters.ID(),
+		Command:   command.AddTelemetryCounters.String(),
 		Arguments: args,
 	}, &res)
 	if res != nil {
-		env.T.Errorf("%v failed - %v", command.AddTelemetryCounters.ID(), res)
+		env.T.Errorf("%v failed - %v", command.AddTelemetryCounters, res)
 	}
 }
 
diff --git a/gopls/internal/test/integration/bench/bench_test.go b/gopls/internal/test/integration/bench/bench_test.go
index a04c63d..5de6804 100644
--- a/gopls/internal/test/integration/bench/bench_test.go
+++ b/gopls/internal/test/integration/bench/bench_test.go
@@ -288,7 +288,7 @@
 // the profile is written to a temp file that is deleted after the cpu_seconds
 // metric has been computed.
 func startProfileIfSupported(b *testing.B, env *integration.Env, name string) func() {
-	if !env.Editor.HasCommand(command.StartProfile.ID()) {
+	if !env.Editor.HasCommand(command.StartProfile) {
 		return nil
 	}
 	b.StopTimer()
diff --git a/gopls/internal/test/integration/bench/iwl_test.go b/gopls/internal/test/integration/bench/iwl_test.go
index 07a5d90..ecf26f9 100644
--- a/gopls/internal/test/integration/bench/iwl_test.go
+++ b/gopls/internal/test/integration/bench/iwl_test.go
@@ -57,10 +57,10 @@
 
 	env.Await(InitialWorkspaceLoad)
 
-	if env.Editor.HasCommand(command.MemStats.ID()) {
+	if env.Editor.HasCommand(command.MemStats) {
 		b.StopTimer()
 		params := &protocol.ExecuteCommandParams{
-			Command: command.MemStats.ID(),
+			Command: command.MemStats.String(),
 		}
 		var memstats command.MemStatsResult
 		env.ExecuteCommand(params, &memstats)
diff --git a/gopls/internal/test/integration/codelens/codelens_test.go b/gopls/internal/test/integration/codelens/codelens_test.go
index 399b8d3..800856d 100644
--- a/gopls/internal/test/integration/codelens/codelens_test.go
+++ b/gopls/internal/test/integration/codelens/codelens_test.go
@@ -54,7 +54,7 @@
 		},
 		{
 			label:        "generate disabled",
-			enabled:      map[string]bool{string(command.Generate): false},
+			enabled:      map[string]bool{string(protocol.CodeLensGenerate): false},
 			wantCodeLens: false,
 		},
 	}
diff --git a/gopls/internal/test/integration/codelens/gcdetails_test.go b/gopls/internal/test/integration/codelens/gcdetails_test.go
index 1ac3a88..359a780 100644
--- a/gopls/internal/test/integration/codelens/gcdetails_test.go
+++ b/gopls/internal/test/integration/codelens/gcdetails_test.go
@@ -101,7 +101,7 @@
 		hasGCDetails := func() bool {
 			lenses := env.CodeLens("p_test.go") // should not crash
 			for _, lens := range lenses {
-				if lens.Command.Command == command.GCDetails.ID() {
+				if lens.Command.Command == command.GCDetails.String() {
 					return true
 				}
 			}
diff --git a/gopls/internal/test/integration/debug/debug_test.go b/gopls/internal/test/integration/debug/debug_test.go
index 3b43de9..1dccea4 100644
--- a/gopls/internal/test/integration/debug/debug_test.go
+++ b/gopls/internal/test/integration/debug/debug_test.go
@@ -80,7 +80,7 @@
 		return nil, err
 	}
 	res0, err := server.ExecuteCommand(ctx, &protocol.ExecuteCommandParams{
-		Command:   command.StartDebugging.ID(),
+		Command:   command.StartDebugging.String(),
 		Arguments: rawArgs,
 	})
 	if err != nil {
diff --git a/gopls/internal/test/integration/fake/editor.go b/gopls/internal/test/integration/fake/editor.go
index 36354d5..f5d62b0 100644
--- a/gopls/internal/test/integration/fake/editor.go
+++ b/gopls/internal/test/integration/fake/editor.go
@@ -391,9 +391,9 @@
 }
 
 // HasCommand reports whether the connected server supports the command with the given ID.
-func (e *Editor) HasCommand(id string) bool {
+func (e *Editor) HasCommand(cmd command.Command) bool {
 	for _, command := range e.serverCapabilities.ExecuteCommandProvider.Commands {
-		if command == id {
+		if command == cmd.String() {
 			return true
 		}
 	}
diff --git a/gopls/internal/test/integration/misc/debugserver_test.go b/gopls/internal/test/integration/misc/debugserver_test.go
index d1ce21b..87f892f 100644
--- a/gopls/internal/test/integration/misc/debugserver_test.go
+++ b/gopls/internal/test/integration/misc/debugserver_test.go
@@ -23,7 +23,7 @@
 			t.Fatal(err)
 		}
 		params := &protocol.ExecuteCommandParams{
-			Command:   command.StartDebugging.ID(),
+			Command:   command.StartDebugging.String(),
 			Arguments: args,
 		}
 		var result command.DebuggingResult
diff --git a/gopls/internal/test/integration/misc/import_test.go b/gopls/internal/test/integration/misc/import_test.go
index 0df3f8d..af933b1 100644
--- a/gopls/internal/test/integration/misc/import_test.go
+++ b/gopls/internal/test/integration/misc/import_test.go
@@ -121,7 +121,7 @@
 			}
 			var result command.ListImportsResult
 			env.ExecuteCommand(&protocol.ExecuteCommandParams{
-				Command:   command.ListImports.ID(),
+				Command:   command.ListImports.String(),
 				Arguments: cmd.Arguments,
 			}, &result)
 			if diff := cmp.Diff(tt.want, result); diff != "" {
diff --git a/gopls/internal/test/integration/misc/vuln_test.go b/gopls/internal/test/integration/misc/vuln_test.go
index f47d06a..6ba1ec8 100644
--- a/gopls/internal/test/integration/misc/vuln_test.go
+++ b/gopls/internal/test/integration/misc/vuln_test.go
@@ -41,7 +41,7 @@
 		}
 
 		params := &protocol.ExecuteCommandParams{
-			Command:   command.RunGovulncheck.ID(),
+			Command:   command.RunGovulncheck.String(),
 			Arguments: cmd.Arguments,
 		}
 
diff --git a/gopls/internal/test/integration/wrappers.go b/gopls/internal/test/integration/wrappers.go
index 55b99ea..0982f8a 100644
--- a/gopls/internal/test/integration/wrappers.go
+++ b/gopls/internal/test/integration/wrappers.go
@@ -355,13 +355,13 @@
 	var lens protocol.CodeLens
 	var found bool
 	for _, l := range lenses {
-		if l.Command.Command == cmd.ID() {
+		if l.Command.Command == cmd.String() {
 			lens = l
 			found = true
 		}
 	}
 	if !found {
-		e.T.Fatalf("found no command with the ID %s", cmd.ID())
+		e.T.Fatalf("found no command with the ID %s", cmd)
 	}
 	e.ExecuteCommand(&protocol.ExecuteCommandParams{
 		Command:   lens.Command.Command,
@@ -421,7 +421,7 @@
 		e.T.Fatal(err)
 	}
 	params := &protocol.ExecuteCommandParams{
-		Command:   command.StartProfile.ID(),
+		Command:   command.StartProfile.String(),
 		Arguments: args,
 	}
 	var result command.StartProfileResult
@@ -433,7 +433,7 @@
 			e.T.Fatal(err)
 		}
 		stopParams := &protocol.ExecuteCommandParams{
-			Command:   command.StopProfile.ID(),
+			Command:   command.StopProfile.String(),
 			Arguments: stopArgs,
 		}
 		var result command.StopProfileResult
