Skip to content

Releases: dl4rce/flaiwheel

v3.9.33 — Glama stdio entrypoint fix

25 Mar 14:12

Choose a tag to compare

What's changed

Fixed

  • Glama "Try in Browser" crash loopentrypoint.sh was printing banner text and downloading embedding models to stdout before launching Python. In stdio mode, stdout is reserved for JSON-RPC; those prints corrupted the MCP stream, causing Glama to crash and retrigger rebuilds.

    entrypoint.sh now detects MCP_TRANSPORT=stdio and immediately execs python -m flaiwheel, skipping all stdout output and model downloads entirely.

  • No change to SSE / Docker / Web-UI behaviour — the fix is a 5-line early-exit that only activates when MCP_TRANSPORT=stdio.

Upgrading

bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)

v3.9.29 — Glama stdio crash fix (28 tools)

23 Mar 20:49

Choose a tag to compare

v3.9.29 (2026-03-23)

Fixed

  • Glama "no tools detected" — root cause found and fixed. AuthManager.__init__() called config.save() which tried to write /data/config.json. On Glama's read-only or empty Docker volumes, this crashed with OSError: Read-only file system before the MCP server could start — hence zero tools. AuthManager is now skipped entirely in stdio_cold_start mode.

  • config.save() resilient to read-only /data — wraps the write in try/except, logging a warning to stderr instead of crashing.

  • All remaining 36 print()diag()watcher.py, indexer.py, readers.py, and bootstrap.py still had print() on stdout. Zero print() calls remain outside logutil.py.

Verified

Local MCP handshake over stdio: initialize + tools/list28 tools returned, stdout clean (no non-JSON-RPC output).

See CHANGELOG.md for full history.

v3.9.28 — MCP stdio fix (Glama tools)

22 Mar 20:31

Choose a tag to compare

v3.9.28 (2026-03-22)

Fixed

  • MCP stdio / Glama "no tools detected" — MCP over stdio uses stdout exclusively for JSON-RPC. All startup and bootstrap diagnostics now write to stderr via the new logutil.diag() helper. Previously every print() on stdout corrupted the JSON-RPC frame boundary so MCP clients (Glama Inspector, Claude) could not parse tools/list and reported zero tools.

  • stdio cold-start with empty Docker volume — cold-start now also triggers when /data exists as an empty Docker VOLUME but contains no projects.json and no docs (previously only skipped when /data was absent, so the full embedding bootstrap always ran under Glama's inspector).

See CHANGELOG.md for full history.

v3.9.27

22 Mar 15:29

Choose a tag to compare

v3.9.27 (2026-03-21)

Changed

  • License file layout — single canonical LICENSE (BSL 1.1); removed LICENSE.md for correct GitHub Licensee detection.
  • References — all LICENSE.mdLICENSE across README, pyproject, Dockerfile, scripts, headers.

Added

  • [inspect] optional dependency group for Glama MCP directory builds; glama.json, SECURITY.md.

Fixed

  • stdio / Glama cold-start path; lazy chromadb import in __main__.py.

See CHANGELOG.md for full history.

v3.9.26 — Claude Cowork skill — install .skills/skills/flaiwheel/SKILL.md

21 Mar 19:45

Choose a tag to compare

What's New in v3.9.26

  • Claude Cowork skill — the Flaiwheel workflow is now distributed as a native Claude skill. The installer writes .skills/skills/flaiwheel/SKILL.md to your project. When you open the project in Claude (Cowork), the skill is auto-available — no extra setup needed. The skill drives session-start context restore, pre-coding knowledge search, mandatory post-bugfix documentation, and session-end summarisation.
  • Skill source also committed to skills/flaiwheel/SKILL.md in this repo for reference and manual install.

Install

bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)

v3.9.25 — WSL2 zero-touch setup (iptables, docker group, auto-start)

07 Mar 18:16

Choose a tag to compare

What's New in v3.9.25

WSL2: fully automatic, zero manual steps

WSL2 is now detected automatically. A dedicated pre-flight block runs before anything else and handles the complete Docker setup:

╔══════════════════════════════════════════════╗
║  WSL2 detected — running pre-flight setup    ║
╚══════════════════════════════════════════════╝

[✓] iptables-legacy activated
[✓] User 'flaiwheel' added to docker group
[✓] Docker daemon started
[✓] Docker auto-start added to ~/.bashrc
[✓] WSL2 pre-flight complete

What it does automatically:

Step What Why
1 Switch iptables to legacy backend WSL2 kernel doesn't support nftables — Docker container networking fails silently without this
2 Add user to docker group Without this, every docker command requires sudo
3 Start Docker via service docker start WSL2 has no systemd, systemctl doesn't work
4 Add auto-start to ~/.bashrc Docker doesn't survive WSL2 reboots without this

Install (WSL2 — same command as always)

bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)

v3.9.24 — Fix: auto-install python3 on minimal Linux/WSL2

07 Mar 18:10

Choose a tag to compare

What's New in v3.9.24

Fixed

Auto-install python3 if missing

The installer uses python3 for all JSON manipulation (mcp.json, config files, AGENTS.md updates, project registration checks). On minimal WSL2 / Debian / Ubuntu systems without python3, these steps silently failed with:

/dev/fd/63: line 1588: python3: command not found
[✗] Job 'agents-md' failed

python3 is now prerequisite #0 — checked and auto-installed via apt-get / dnf / yum / pacman / brew before anything else runs.

Upgrade

bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)

v3.9.23 — Fix: WSL2 iptables-legacy + docker group; all commands bash<(curl)

07 Mar 17:53

Choose a tag to compare

What's New in v3.9.23

Fixed

Docker daemon start on WSL2 — iptables-legacy

Docker Engine on WSL2 often fails to start silently because the default iptables-nft backend is not supported by the WSL2 kernel. The installer now:

  1. Runs update-alternatives --set iptables /usr/sbin/iptables-legacy before starting Docker
  2. Adds the current user to the docker group so docker commands work without sudo
  3. Applied in both the post-install and daemon-start blocks

All install commands updated

Every displayed install/re-run command throughout the script — error messages, generated AGENTS.md, Cursor rules, Claude instructions — now uses bash <(curl ...) to avoid WSL2 pipe issues.

For the WSL2 user right now

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo service docker start
bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)

v3.9.22 — Fix: bash <(curl) for WSL2; avoid pipe write errors

07 Mar 17:49

Choose a tag to compare

What's New in v3.9.22

Fixed

curl | bash pipe write failures on WSL2

curl | bash can fail with curl: (23) Failure writing output to destination on WSL2. The root cause is a pipe permission/buffer mismatch when the re-exec mechanism tries to write the script to /tmp.

Three changes:

  1. README updated — primary install command is now bash <(curl ...) (process substitution), which downloads to a file descriptor without a pipe and avoids the issue entirely:

    bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)
  2. Re-exec fallback temp dir — if writing to /tmp fails, the installer tries $HOME and $TMPDIR before giving up.

  3. Better error message — if curl: (23) still occurs, the error now explicitly says to use bash <(curl ...).

Upgrade / WSL2 users

bash <(curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh)

v3.9.21 — Fix: sudo guard fires before curl pipe truncation

07 Mar 17:47

Choose a tag to compare

What's New in v3.9.21

Fixed

sudo guard moved before re-exec block

sudo curl | bash causes curl: (23) Failure writing output — the pipe dies mid-stream and bash only receives a truncated script. The previous sudo guard was placed after the color/function definitions, so it was never reached on a truncated download.

The guard is now the very first executable code after set -euo pipefail — before version, before re-exec, before everything. It now fires on the first few bytes of the script, regardless of truncation.

When triggered, the output is now shorter and more direct:

╔══════════════════════════════════════════════════════════╗
║  ⚠️  Do NOT run this installer with sudo                 ║
╚══════════════════════════════════════════════════════════╝

  Remove 'sudo' from the front of the command.
  The installer uses sudo internally only where needed.

  Run this instead:

  curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh | bash

Upgrade

curl -sSL https://raw.githubusercontent.com/dl4rce/flaiwheel/main/scripts/install.sh | bash