What I built agent-quick-menu is a menu for Claude Code, built on the mods API that arrived in 2.1.287. It gathers the commands and settings of every installed plugin in one place, so you stop memorising slash commands and digging through /config. A /menu pane with one foldable section per plugin: commands as buttons with their slash command and a description, settings as toggles, option buttons or an inline editor with save/cancel. Claude Code's own /config settings in the same pane, with a filter. A band above the prompt : ≣ menu opens the pane; commands you pin with ☆ sit next to it as one-click buttons. Commands that need an argument (a branch name, a ticket) open an input first instead of running blind. A confirm-twice before running a command from a plugin you didn't add to the menu yourself. For plugin authors it's one JSON file: .claude-plugin/quick-menu.json lists your commands (label, args, description, optional ask ) and which of your userConfig settings to show. No dependency, no code; there's a JSON schema and a written convention. How I used Claude Code I did the product side: the convention, the UX, and what goes where. Claude Code wrote nearly all of the TypeScript and the 118 tests (the mods testing kit with a mocked clock). The loop was always the same: Claude writes a slice spec, implements it, runs claude plugin validate and claude plugin test , I reload, screenshot the terminal and paste the screenshot back in with "this is ugly / this doesn't fold / the focus is wrong". Most of the UX came out of those screenshot rounds. It also did the boring open-source parts: CI, rulesets, SECURITY/PRIVACY docs, and the release automation (a PR from develop to main bumps the version from the Conventional Commits and publishes the release on merge). What I learned Interactive command.run returns nothing. Running /config key=value from a mod answers {} in an interactive session, so "did the write work?" has to be answered by reading the setting back. Before I changed that, the menu showed "not changed" on every successful write. A settings change reloads your mod. register() runs again with the new options; $.state survives, module variables don't. Glyph width matters. ☰ is two cells wide in many terminals and left a stray character behind; everything in the UI is now a width-1 glyph ( ≣ , ▸ , ● ). The plugin directory's validator is stricter than Claude Code. Don't alias or shadow $ or on , write calls as $.noun.method() , keep userConfig free of options , and declare "types" in plugin.json, or validation rejects every state key. Mods compose. Two plugins drawing into the band must call next(e) , or one silently swallows the other's band. Try it /plugin marketplace add agentic-workbench/agent-quick-menu /plugin install agent-quick-menu@agent-quick-menu then /reload-plugins . MIT, fully local, sends nothing anywhere. Repo: https://github.com/agentic-workbench/agent-quick-menu Feedback welcome, especially from plugin authors: what would you put in your plugin's menu? submitted by /u/DasGanni [link] [comments]