ax-check.com
by Gauge
B
BetterMenu
bettermenu.live
ax-check.com
Checked 18 September 2026
B
77/100
Agents haven’t verified setup
Pricing is public, but agents disagree on what it even is.
The $39/month Starter plan with clear limits is posted openly, yet one session found no pricing page and another concluded the product is free.
3 fixes to start with
Concrete changes, backed by what we found.
Start Here links POST /studio/recipes/{recipe_id}/ingredient-resolutions, but that docs page returns 404.
Linked from docs.bettermenu.live/docs/api/start-here
Recorded coding sessions
Same task, 3 models, no bettermenu.live account. Recorded 18 September 2026 on Pi.
3 recorded · 3m 25s
3m 25s · recorded
Session findings
Select a finding to see it in context.
›Thinking…
The user is asking about "BetterMenu". This is probably a hosted product. I should check the repository/environment to see what's available. Let me explore the current working directory and see if there's anything related to BetterMenu.
✓$ ls -la /sandbox/repo && find /sandbox/repo -maxdepth 2 -type f | head -50✓└{"content":[{"text":"total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 18 22:12 ..\ndrwxr-xr-x 8 root root 4096 Sep 18 08:00…ctrl+o
{"content":[{"text":"total 16\ndrwxr-xr-x 3 root root 4096 Sep 18 08:00 .\ndrwxr-xr-x 7 root root 4096 Sep 18 22:12 ..\ndrwxr-xr-x 8 root root 4096 Sep 18 08:00 .git\n-rw-r--r-- 1 root root 408 Sep 18 08:00 .gitignore\n/sandbox/repo/.gitignore\n/sandbox/repo/.git/COMMIT_EDITMSG\n/sandbox/repo/.git/config\n/sandbox/repo/.git/index\n/sandbox/repo/.git/HEAD\n/sandbox/repo/.git/description\n","type":"text"}]}✓$ env | grep -i -E 'better|menu|api|key|token' | sed 's/=.*/=<redacted>/' | head -30✓└{"content":[{"text":"PI_GATEWAY_API_KEY=<redacted>\nGIT_CONFIG_KEY_0=<redacted>\n","type":"text"}]}
›Thinking…
The repository is empty except for .gitignore. Let's take a look at the contents of .gitignore and the git log.
✓read /sandbox/repo/.gitignore✓└{"content":[{"text":"# Keep generated and vendored files out of source diffs.\n\n# Logs / OS cruft\n*.log\n.DS_Store\n\n# JavaScript / TypeScript\nnode_modules/…ctrl+o
{"content":[{"text":"# Keep generated and vendored files out of source diffs.\n\n# Logs / OS cruft\n*.log\n.DS_Store\n\n# JavaScript / TypeScript\nnode_modules/\n.next/\ndist/\nbuild/\ncoverage/\n\n# Python\n.venv/\nvenv/\n__pycache__/\n*.py[cod]\n.pytest_cache/\n*.egg-info/\n\n# Rust\ntarget/\n\n# Go / PHP / Ruby vendored deps\nvendor/\n.bundle/\n\n# Java / Kotlin / Scala\n.gradle/\n\n# .NET\nbin/\nobj/\n\n# Elixir\n_build/\ndeps/\n\n# Dart / Flutter\n.dart_tool/\n","type":"text"}]}✓$ cd /sandbox/repo && git log --oneline -5; git remote -v✓└{"content":[{"text":"9ebf5fb Initial workspace\n","type":"text"}]}
›Thinking…
There's no BetterMenu info in the repository. "BetterMenu"—I don't know this product. It might be fictional, or some obscure product. I should search to see if there's anything available—maybe there's an MCP server, or some kind of tool. I only have read/bash/edit/write tools. There's no web search tool. Let me check if there's any documentation about BetterMenu somewhere on the system, or check network access.
✓$ grep -ri "bettermenu" / --include="*.md" --include="*.json" --include="*.txt" -l 2>/dev/null | grep -v proc | head; ls /sandbox✓└{"content":[{"text":"repo\n","type":"text"}]}
✓$ curl -s -m 10 -o /dev/null -w "%{http_code}" https://pypi.org/simple/ ; echo; curl -s -m 10 "https://pypi.org/pypi/bettermenu/json" | head -c 300; echo; curl -s -m 10 "https://registry.npmjs.org/bette…✓└{"content":[{"text":"200\n{\"message\": \"Not Found\"}\n{\"error\":\"Not found\"}","type":"text"}]}ctrl+o
curl -s -m 10 -o /dev/null -w "%{http_code}" https://pypi.org/simple/ ; echo; curl -s -m 10 "https://pypi.org/pypi/bettermenu/json" | head -c 300; echo; curl -s -m 10 "https://registry.npmjs.org/bettermenu" | head -c 300
›Thinking…
No trace of "BetterMenu" anywhere: not in the repo, not in PyPI, not in npm. Let me try a few more variations: "better-menu" on npm, and maybe a docs site. Also, I'll search the web for "bettermenu.dev" and the like.
✓$ for pkg in better-menu bettermenu-sdk @bettermenu/sdk; do echo "== $pkg"; curl -s -m 8 "https://registry.npmjs.org/$pkg" | head -c 200; echo; done; for p in bettermenu better-menu; do echo "== pypi $p…✓└{"content":[{"text":"== better-menu\n{\"error\":\"Not found\"}\n== bettermenu-sdk\n{\"error\":\"Not found\"}\n== @bettermenu/sdk\n{\"error\":\"Not found\"}\n== …ctrl+o
for pkg in better-menu bettermenu-sdk @bettermenu/sdk; do echo "== $pkg"; curl -s -m 8 "https://registry.npmjs.org/$pkg" | head -c 200; echo; done; for p in bettermenu better-menu; do echo "== pypi $p"; curl -s -m 8 "https://pypi.org/pypi/$p/json" | head -c 200; echo; done
{"content":[{"text":"== better-menu\n{\"error\":\"Not found\"}\n== bettermenu-sdk\n{\"error\":\"Not found\"}\n== @bettermenu/sdk\n{\"error\":\"Not found\"}\n== pypi bettermenu\n{\"message\": \"Not Found\"}\n== pypi better-menu\n{\"info\":{\"author\":\"Bilodev, C-JeanDev\",\"author_email\":\"bilotta.antonio.biz@gmail.com\",\"bugtrack_url\":null,\"classifiers\":[\"Development Status :: 5 - Production/Stable\",\"Intended Audience :: Developers\"\n","type":"text"}]}×$ for d in bettermenu.com bettermenu.dev bettermenu.io bettermenu.ai; do echo "== $d"; curl -s -m 8 -o /dev/null -w "%{http_code}\n" "https://$d"; done✓└{"content":[{"text":"== bettermenu.com\n502\n== bettermenu.dev\n000\n== bettermenu.io\n000\n== bettermenu.ai\n000\n\n\nCommand exited with code 6","type":"text"…ctrl+o
{"content":[{"text":"== bettermenu.com\n502\n== bettermenu.dev\n000\n== bettermenu.io\n000\n== bettermenu.ai\n000\n\n\nCommand exited with code 6","type":"text"}],"details":{}}›Thinking…
There's a package called "better-menu" on PyPI. Let me look into it — is it a hosted product with an SDK/API? Let me fetch its complete JSON.
✓$ curl -s -m 10 "https://pypi.org/pypi/better-menu/json" | python3 -c "✓└{"content":[{"text":"name: better-menu\nversion: 1.0.13\nsummary: A simple but cool menu-creation package\nhome: https://github.com/C-JeanDev/better_menu\nurls:…ctrl+o
curl -s -m 10 "https://pypi.org/pypi/better-menu/json" | python3 -c "
import json,sys
d=json.load(sys.stdin)
i=d['info']
print('name:',i['name'])
print('version:',i['version'])
print('summary:',i['summary'])
print('home:',i.get('home_page'))
print('urls:',i.get('project_urls'))
print('requires:',i.get('requires_dist'))
print('---DESC---')
print(i['description'][:3000])
"
{"content":[{"text":"name: better-menu\nversion: 1.0.13\nsummary: A simple but cool menu-creation package\nhome: https://github.com/C-JeanDev/better_menu\nurls: {'Homepage': 'https://github.com/C-JeanDev/better_menu'}\nrequires: ['print-color']\n---DESC---\n\r\n# Better Menu\r\n\r\nbetter_menu is a [Python](https://www.python.org/) library for creating simple but cool menu(s) very fastly.\r\n\r\n\r\n\r\n# Installation \r\n\r\nUse the package manager [pip](https://pip.pypa.io/en/stable) to install Pydeas\r\n\r\n```bash\r\n\r\npip install better_menu\r\n\r\n```\r\n\r\n\r\n\r\n\r\n\r\n## Get Started\r\n\r\n#### For an example of the final output check\r\n\r\n[here](https://github.com/C-JeanDev/better_menu)\r\n\r\n\r\n\r\n### The menu constructor \r\n\r\nthe `Menu` constructor takes in `1 argument (and other optionals 2)` : a menu dictionary that has the voice and a function that will be executed if the voice is chosen\r\n\r\n\r\n\r\n```python\r\n\r\nm = {\r\n\r\n '1. Insert User': insert_user,\r\n\r\n '2. Exit': exit\r\n\r\n}\r\n\r\n```\r\n\r\nNow pass the menu to the constructor\r\n\r\n\r\n\r\n```python\r\n\r\nfrom better_menu.menu import Menu\r\n\r\n\r\n\r\nm = {\r\n\r\n '1. Insert User': insert_user,\r\n\r\n '2. Exit': exit\r\n\r\n}\r\n\r\n\r\n\r\nmenu = Menu(m)\r\n\r\nmenu.init()\r\n\r\n```\r\n\r\n\r\n\r\n### Title and Subtitle\r\n\r\nYou can add a title and a subtitle that will be printed within the menu\r\n\r\n\r\n\r\n```python\r\n\r\nfrom better_menu.menu import Menu\r\n\r\n\r\n\r\nm = {\r\n\r\n '1. Insert User': insert_user,\r\n\r\n '2. Exit': exit\r\n\r\n}\r\n\r\n\r\n\r\nmenu = Menu(m)\r\n\r\nmenu.title('Title')\r\n\r\nmenu.subtitle('Subitle')\r\n\r\nmenu.init()\r\n\r\n```\r\n\r\n\r\n\r\n### Option Argument (indicator, color)\r\n\r\n`Indicator (ind)`: indicate the indicator of the selcted voice\r\n\r\n\r\n\r\n`Color (color)`: indicate the color of the title or subtitle or of the selcted voice if passed to the menu constructor\r\n\r\n\r\n\r\n```python\r\n\r\nfrom better_menu.menu import Menu\r\n\r\n\r\n\r\nm = {\r\n\r\n '1. Insert User': insert_user,\r\n\r\n '2. Exit': exit\r\n\r\n}\r\n\r\n#set the indicator of the selcted voice to '>' and the color of the selected voice to red\r\n\r\nmenu = Menu(m, ind='>', color='red') \r\n\r\n\r\n\r\n# set the color of the title to 'black'\r\n\r\nmenu.title('Title', color='black') \r\n\r\n\r\n\r\n# set the color of the subtitle to 'blue'\r\n\r\nmenu.subtitle('Subitle', color='blue')\r\n\r\n\r\n\r\nmenu.init()\r\n\r\n```\r\n\r\n\r\n\r\n[Better Menu v1.0.13](https://github.com/C-JeanDev/better_menu)\r\n\n","type":"text"}]}›Thinking…
So, "BetterMenu" (better-menu on PyPI) is just a small open-source Python library for displaying interactive terminal menus — not a hosted product with pricing, SDK, or API. What the user asked was:
- Build a simple example using BetterMenu.
- Tell them how the pricing works.
- Briefly convey whether this product is something I can easily manage.
- Let them know if I get stuck. If the product has no developer workflow that I can act on, bluntly say so and stop. Keep it lightweight: use the hosted product via SDK or API. Don't stand up a local service stack or wait for long-running commands.
There's ambiguity here: the user seems to be assuming BetterMenu is a hosted product with pricing. The only thing I can find is this small PyPI library — an open-source MIT (license to be confirmed?) terminal menu library. There's no hosted product, no API, no pricing. A hosted SaaS called "BetterMenu" might exist, but I can't find anything (bettermenu.com returns 502, and the other domains can't be resolved).
I should be honest: BetterMenu is not a hosted product but a small open-source Python library, and the pricing is "free (open source)." I can build a simple example — it's lightweight, just pip install and a small script. But the example is an interactive terminal menu, which is long-running/interactive. To keep it from becoming long-running, I can pipe input into stdin to demo it non-interactively.
Let me check the license and install it. pip install better_menu — this depends on print-color. That should be fine and fast.
Let me create an example and test it by piping stdin so it doesn't hang.
Actually — before that, should I double-check whether a hosted "BetterMenu" SaaS exists? I tried a few domains, but bettermenu.com returned 502 (does it exist?). Let me quickly try www.bettermenu.com and, if possible, a GitHub search too. I'll keep it brief.
Found it. "BetterMenu" (better-menu on PyPI, GitHub: C-JeanDev/better_menu) is not a hosted product — it's a small open-source Python library for displaying interactive terminal menus. There's no SDK for a hosted service, no API, no account. Before proceeding, let me verify whether I've overlooked a hosted SaaS with the same name:
✓$ curl -s -m 8 -o /dev/null -w "www.bettermenu.com: %{http_code}\n" "https://www.bettermenu.com"; curl -s -m 8 "https://api.github.com/search/repositories?q=bettermenu&per_page=5" | python3 -c "✓└{"content":[{"text":"www.bettermenu.com: 502\nb5i/BetterMenus - A Swift DSL that simplifies the creation of UIMenus in UIKit.\nripred/BetterMenu - A fully flexi…ctrl+o
curl -s -m 8 -o /dev/null -w "www.bettermenu.com: %{http_code}\n" "https://www.bettermenu.com"; curl -s -m 8 "https://api.github.com/search/repositories?q=bettermenu&per_page=5" | python3 -c "
import json,sys
d=json.load(sys.stdin)
for r in d.get('items',[]):
print(r['full_name'], '-', (r.get('description') or '')[:80])
" 2>/dev/null
{"content":[{"text":"www.bettermenu.com: 502\nb5i/BetterMenus - A Swift DSL that simplifies the creation of UIMenus in UIKit.\nripred/BetterMenu - A fully flexible and declarative menu system\njason31416/BetterMenu - A simple while feature-packed menu plugin that covers all you need for a menu!\nStackDoubleFlow/BetterMenu - \nAceofShovels/BetterMenu - Beat Saber mod that fixes the main menu\n","type":"text"}]}×$ pip install better_menu 2>&1 | tail -2; python3 -c "import better_menu, importlib.metadata as m; print('installed', m.version('better-menu')); print('license:', m.metadata('better-menu')['License'])"✓└{"content":[{"text":"\nSuccessfully installed better_menu-1.0.13 print-color-0.4.8\nTraceback (most recent call last):\n File \"<string>\", line 1, in <module>…ctrl+o
{"content":[{"text":"\nSuccessfully installed better_menu-1.0.13 print-color-0.4.8\nTraceback (most recent call last):\n File \"<string>\", line 1, in <module>\n File \"/opt/freestyle/python/lib/python3.12/site-packages/better_menu/__init__.py\", line 1, in <module>\n from . import menu\n File \"/opt/freestyle/python/lib/python3.12/site-packages/better_menu/menu.py\", line 10, in <module>\n from getch import getch\nModuleNotFoundError: No module named 'getch'\n\n\nCommand exited with code 1","type":"text"}],"details":{}}›Thinking…
The library requires getch, but this isn't declared as a dependency (it only requires print-color). Need to install getch too. Then write an example. Since this menu is interactive (getch-based, reading key input), pipe the input in to test it quickly so it doesn't hang.
Let's install getch and check how the menu works — menu.init() loops until the exit option is selected. The keys are probably number keys '1', '2'. Let's take a quick look at the source.
This library installs without issues, but it has an undeclared dependency (getch). Fix this and inspect how it works:
✓$ pip install getch 2>&1 | tail -1; python3 -c "import better_menu; print('import ok')"✓└{"content":[{"text":"Successfully installed getch-1.0\nimport ok\n","type":"text"}]}
✓read /opt/freestyle/python/lib/python3.12/site-packages/better_menu/menu.py✓└{"content":[{"text":"from print_color import print\r\nimport os\r\nimport platform\r\n\r\nplat: str = platform.system()\r\n\r\nif plat == 'Windows':\r\n from…ctrl+o
{"content":[{"text":"from print_color import print\r\nimport os\r\nimport platform\r\n\r\nplat: str = platform.system()\r\n\r\nif plat == 'Windows':\r\n from msvcrt import getch\r\nelse:\r\n from getch import getch\r\n\r\n\r\nclass Menu:\r\n\r\n def __init__(self, menu: dict[str, callable], ind: str = '>', color: str = 'white'):\r\n self.__ENTER = 10 if plat == 'Linux' else 13\r\n self.__W = 119\r\n self.__S = 115\r\n self.__J = 106\r\n self.__K = 107\r\n self.menu = menu\r\n self.color = color\r\n self.ind = ind+' '\r\n self.title_and_color = None\r\n self.sub_title_and_color = None\r\n\r\n def __clear(self) -> None:\r\n if plat == 'Windows':\r\n os.system('cls')\r\n else:\r\n os.system('clear')\r\n\r\n def __print_menu(self, keys) -> None:\r\n\r\n if self.title_and_color:\r\n print(self.title_and_color[0],\r\n color=self.title_and_color[1], format='bold', end='')\r\n\r\n if self.sub_title_and_color:\r\n print(self.sub_title_and_color[0],\r\n color=self.sub_title_and_color[1], end='')\r\n\r\n for i in keys:\r\n if self.ind in i:\r\n print(i, color=self.color, format='bold')\r\n else:\r\n spaces = ' '*(len(self.ind)-1)\r\n print(f'{spaces} {i}', format='bold')\r\n\r\n def title(self, title: str, color: str = 'white') -> None:\r\n self.title_and_color = title+'\\n', color\r\n\r\n def sub_title(self, sub_title: str, color: str = 'white') -> None:\r\n self.sub_title_and_color = sub_title+'\\n', color\r\n\r\n def init(self) -> int:\r\n self.__clear()\r\n index: int = 0\r\n keys = list(self.menu.keys())\r\n keys[index] = self.ind + keys[index]\r\n self.__print_menu(keys)\r\n while True:\r\n key = ord(getch())\r\n if key in [self.__W, self.__K]:\r\n self.__clear()\r\n keys = list(self.menu.keys())\r\n if index == 0:\r\n index = len(keys) - 1\r\n else:\r\n index -= 1\r\n keys[index] = self.ind + keys[index]\r\n self.__print_menu(keys)\r\n \r\n elif key in [self.__S, self.__J]:\r\n self.__clear()\r\n keys = list(self.menu.keys())\r\n if index+1 < len(keys):\r\n index += 1\r\n else:\r\n index = 0\r\n keys[index] = self.ind + keys[index]\r\n self.__print_menu(keys)\r\n\r\n elif key == self.__ENTER:\r\n if callable(v := list(self.menu.values())[index]):\r\n v()\r\n return index\r\n","type":"text"}]}›Thinking…
Menu operations: arrow keys / w/s/j/k to move, Enter (10 on Linux) to execute. It's interactive and runs os.system('clear'). I can write a simple example and pipe keystrokes to stdin to test it non-interactively: "s" followed by Enter → executes option 2 and returns index 1.
Let me write examples/bettermenu_demo.py with a few menu options and run it with piped input: printf 's\n' → moves down once and presses Enter. Note that getch reads character by character; '\n' is 10, which is ENTER on Linux. No problem.
Then run it: printf 's\n' | python3 examples/bettermenu_demo.py — it shouldn't hang. I'll add a timeout for safety.
The menu is keyboard-driven (w/s/j/k to move, Enter to select). I'll write a simple example and test it non-interactively by piping keystrokes (with a timeout so nothing hangs):
✓write /sandbox/repo/examples/bettermenu_demo.py✓└{"content":[{"text":"Successfully wrote 1007 bytes to /sandbox/repo/examples/bettermenu_demo.py","type":"text"}]}
›Thinking…
Wait — the README says menu.subtitle(...) but the source has sub_title. I used sub_title to match the actual source. Good.
Test: printf 's\n' | timeout 10 python3 examples/bettermenu_demo.py
✓$ cd /sandbox/repo && printf 's\n' | timeout 10 python3 examples/bettermenu_demo.py; echo "exit: $?"✓└{"content":[{"text":"TERM environment variable not set.\nTERM environment variable not set.\n\u001b[1m\u001b[36mBetterMenu Demo\n\u001b[0m\u001b[37mw/s to move,…ctrl+o
{"content":[{"text":"TERM environment variable not set.\nTERM environment variable not set.\n\u001b[1m\u001b[36mBetterMenu Demo\n\u001b[0m\u001b[37mw/s to move, Enter to select\n\u001b[0m\u001b[1m\u001b[92m> 1. Insert User\u001b[0m\n 2. Say hello\u001b[0m\n 3. Exit\u001b[0m\n\u001b[1m\u001b[36mBetterMenu Demo\n\u001b[0m\u001b[37mw/s to move, Enter to select\n\u001b[0m 1. Insert User\u001b[0m\n\u001b[1m\u001b[92m> 2. Say hello\u001b[0m\n 3. Exit\u001b[0m\n-> Hello from BetterMenu!\nSelected index: 1\nexit: 0\n","type":"text"}]}›Thinking…
It's working. The "TERM environment variable not set" warning is from os.system('clear') — it's harmless, and it won't show up in an actual terminal.
Now, to answer the user's question:
- How does the pricing work — BetterMenu (better_menu) is free open-source software (MIT? Let me check the license — the metadata query failed earlier due to an import error; I'll verify the license right away). Actually, let me just quickly check the license before answering.
×$ python3 -c "import importlib.metadata as m; md=m.metadata('better-menu'); print(md['License'])"; rm -rf /tmp/x && pip download better-menu --no-deps -d /tmp/x -q 2>&1 | tail -1; unzip -p /tmp/x/*.whl …✓└{"content":[{"text":"<string>:1: DeprecationWarning: Implicit None on return values is deprecated and will raise KeyErrors.\nNone\n\n\nCommand exited with code …ctrl+o
python3 -c "import importlib.metadata as m; md=m.metadata('better-menu'); print(md['License'])"; rm -rf /tmp/x && pip download better-menu --no-deps -d /tmp/x -q 2>&1 | tail -1; unzip -p /tmp/x/*.whl '*METADATA' 2>/dev/null | grep -i -m2 license
{"content":[{"text":"<string>:1: DeprecationWarning: Implicit None on return values is deprecated and will raise KeyErrors.\nNone\n\n\nCommand exited with code 1","type":"text"}],"details":{}}›Thinking…
License metadata is None — this PyPI package doesn't have a license listed. I'll check the LICENSE in the GitHub repository right away.
✓$ curl -s -m 8 "https://api.github.com/repos/C-JeanDev/better_menu/license" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('license',{}).get('name') or d.get('message'))"✓└{"content":[{"text":"Not Found\n","type":"text"}]}
›Thinking…
The GitHub repository has no LICENSE file, and PyPI also has no license metadata. In other words, strictly speaking, this is open source without an explicit license (all rights reserved by default). Worth pointing out honestly.
Alright, let me write the final summary:
- Built an example — done, tested.
- Pricing: this isn't a hosted/paid product. It's a free PyPI library, but notably it has no explicit license (no LICENSE file, no license metadata) — meaning legally it's in an "all rights reserved" state, which is worth mentioning as a caveat for commercial use.
- Is it manageable for me: yes, very easy — it's a small single-file library, no services needed, no accounts or keys required. However, it's a bit rough around the edges: an undeclared
getchdependency, a mismatch between the README's API (subtitle) and the actual API (sub_title), and it's interactive/TTY-oriented. - Blockers: none of substance. But clarification is needed — the user was assuming a hosted product with SDK/API and pricing. The only "BetterMenu" I can find that's available for me to work on is this PyPI library. If they intended a different hosted SaaS "BetterMenu," I couldn't find it (the domain either couldn't be resolved or returned 502) — following their instructions, I should state that plainly. That said, since there is a developer workflow available for me to work on (pip library, example creation), I didn't need to stop completely. I built the example, and for the "hosted product" angle I'll state it plainly.
Done — example built and verified. Here's the full picture:
What BetterMenu actually is
The only "BetterMenu" I can find and act on is better-menu on PyPI (C-JeanDev/better_menu on GitHub) — a small open-source Python library for rendering interactive terminal menus. It is not a hosted product: no SDK for a cloud service, no API, no accounts, no keys. I checked for a hosted SaaS by that name (bettermenu.com/.dev/.io/.ai) and found nothing reachable, so if you meant a different hosted "BetterMenu," I couldn't find it — tell me the URL and I'll take another look.
Example (built and tested)
/sandbox/repo/examples/bettermenu_demo.py — a 3-item menu with title/subtitle, colors, and a > indicator. Setup and run:
pip install better_menu getch # getch is required on Linux/macOS but NOT declared by the package
python3 examples/bettermenu_demo.py # w/s or k/j to move, Enter to select
Verified non-interactively (piped keystrokes, no long-running process):
$ printf 's\n' | python3 examples/bettermenu_demo.py
-> Hello from BetterMenu!
Selected index: 1
Pricing
Free — but with a legal caveat. There's no pricing because it's not a commercial product. However, the PyPI package declares no license and the GitHub repo has no LICENSE file, which legally means "all rights reserved" by default. For a production/commercial project, that's a real risk — I'd treat it as unusable for anything serious without contacting the author.
Is it easy for me to manage?
Yes, trivially — it's a ~80-line single-file library with no services, state, or credentials. But it's rough around the edges:
- Undeclared
getchdependency (install fails at runtime without it) - Docs mismatch: README says
menu.subtitle(...), actual API ismenu.sub_title(...) - TTY-only (raw keypresses +
os.system('clear')), so testing needs piped stdin - Last meaningful activity looks old; effectively unmaintained
Blockers
None — no local stacks or long-running commands were needed. The only friction was the missing getch dependency, which I fixed in the install step above.
AX Fundamentals
23 checks. Open an area for details.
This check is a quick preview. Test more tasks and models with Gauge Agents.
Test your product with Gauge Agents