Summary
On ChromeOS Crostini (Debian 12, x86_64), the freebuff CLI has two reproducible problems:
freebuff with zero arguments prints Usage: node mcp_proxy.js <serverId_or_socketPath> and exits 1, instead of starting the CLI.
- Any interactive TUI session exits by itself after ~6–10 seconds, with exit code 1, no error on screen, and nothing on stderr.
Non-TUI commands work perfectly: --version, --help, and login all behave correctly, and login waits indefinitely as expected. The fault appears confined to the interactive session path.
Both reproduce on 0.0.148 and 0.0.149 (0.0.149 is current latest on npm), so this is not a fresh regression.
Environment
- OS: Debian GNU/Linux 12 (bookworm) inside ChromeOS Crostini
- Kernel:
6.6.135-09383-g1140e4f27e24, x86_64
- Terminal: reproduced under a plain pipe, a
script(1) PTY, and tmux 3.3a with TERM=xterm-256color
- Install:
npm install -g freebuff (wrapper 0.0.149, binary linux-x64 0.0.149)
- Account: authenticated successfully (
freebuff login completed; the previous 401s disappeared from the logs and ads render)
Issue 1 — zero-argument invocation
$ freebuff
Usage: node mcp_proxy.js <serverId_or_socketPath>
$ echo $?
1
Passing any argument avoids it:
| Invocation |
Result |
freebuff |
Usage: node mcp_proxy.js …, exit 1 |
freebuff --cwd . |
TUI starts |
freebuff --continue |
TUI starts |
freebuff --help / --version / login |
correct |
strace shows the freebuff process itself writes that line and exits — there is no node child and no mcp_proxy.js process spawned:
3341 write(2, "\33[0m\33[31mUsage: node mcp_proxy.js <serverId_or_socketPath>\33[0m\n", 63)
3341 exit_group(1)
The string serverId_or_socketPath does not appear in the freebuff binary (verified with strings across encodings, while other known CLI strings are found), which suggests an external module is being loaded and executed in-process.
Issue 2 — interactive session exits after ~6–10s
The TUI renders correctly (logo, project picker, and — inside a project — the normal UI with ads), responds to input (arrow keys/Enter navigate the picker), and then the process exits on its own after roughly 6–10 seconds.
The shutdown is deliberate and graceful, not a crash: it writes its own terminal-reset sequence, sleeps, unmaps its heap, then exit_group(1). No signal, no core dump, no stderr output.
31776 pwritev(1, [{iov_base="\33[?25h\33[0m\33]22;\7\33[>4;0m\33[?1003l…\33[?1049l…"}])
31776 clock_nanosleep(...)
31776 openat(AT_FDCWD, "/dev/tty", O_WRONLY) = -1 ENXIO
31776 exit_group(1)
Possibly relevant: an MCP socket connect immediately precedes shutdown
About 2 ms before the shutdown sequence begins, the freebuff process attempts a UNIX-socket connect that fails:
31776 socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 18
31776 connect(18, {sa_family=AF_UNIX, sun_path="/tmp/datacloud-mcp---cwd.sock"}, 110) = -1 ENOENT
31776 close(18)
→ SIGWINCH/SIGQUIT/SIGABRT/SIGPIPE/SIGBUS reset to SIG_DFL
→ terminal reset → exit_group(1)
Note the socket name: datacloud-mcp- --cwd .sock. That third-party proxy builds its path as `/tmp/datacloud-mcp-${idOrPath}.sock` where idOrPath = process.argv[2]. Here it has picked up freebuff's own argv[2] (--cwd), which implies that proxy module is being loaded into the freebuff process and reading the host's argv.
That single mechanism would explain both issues: with no arguments argv[2] is undefined, so the module prints its usage banner and calls process.exit(1), killing the host process immediately.
The freebuff binary contains ~28 references to .agents and ~25 to mcpServers, so it appears to discover agent/MCP plugins from ~/.agents. This machine has Google's data-agent-kit-starter-pack installed there (and under ~/.gemini/extensions), which ships mcp/bin/mcp_proxy_bundle.cjs containing exactly the Usage: node mcp_proxy.js <serverId_or_socketPath> string.
Caveat, so this isn't over-claimed: removing that plugin's .mcp.json, and moving the entire plugin directory aside, did not stop the ~6–10s exit — so either freebuff finds an equivalent definition elsewhere, or the socket connect is a symptom rather than the trigger.
Ruled out
Each of these was tested and did not change the ~6–10s exit:
| Variable |
Values tested |
| Credentials |
invalid token / no credentials file / freshly authenticated |
| Working directory |
$HOME / inside a git repo / /tmp |
| Terminal |
pipe / script PTY / tmux, TERM=xterm-256color |
| Version |
0.0.148 and 0.0.149 |
CODEBUFF_NO_TERMINAL_WATCHDOG=1 |
no effect (confirmed "1" is an accepted value) |
| Launcher |
npm wrapper vs. running the downloaded binary directly |
| Stale config |
settings.json ({"mode":"MAX"}) removed |
| MCP plugin |
plugin .mcp.json removed; entire plugin directory moved aside |
| Env |
DATA_CLOUD_CURR_IDE_NAME unset |
| Verbosity |
CODEBUFF_DEBUG=1, VERBOSE=1, CODEBUFF_TRACE=1 produced no additional output |
The session log (~/.config/manicode/projects/*/chats/*/log.jsonl) for a failing authenticated run contains a single benign line (Enhanced CLI fingerprint generated successfully) — no error is recorded.
Additional note (security)
The CLI writes the account API key in plaintext into ~/.config/manicode/projects/*/chats/*/log.jsonl:
{"level":"ERROR","data":{"apiKey":"<redacted>","fields":["id","email"],"status":401}, ...}
Worth redacting, since these logs persist on disk and are easy to share when reporting bugs.
What would help
- Whether the interactive session path is expected to work when unrelated
~/.agents plugins are present
- A way to start the CLI with MCP/agent-plugin discovery disabled, to confirm or eliminate that path
- A visible error (or a log line) on this exit instead of a silent
exit(1)
Summary
On ChromeOS Crostini (Debian 12, x86_64), the freebuff CLI has two reproducible problems:
freebuffwith zero arguments printsUsage: node mcp_proxy.js <serverId_or_socketPath>and exits 1, instead of starting the CLI.Non-TUI commands work perfectly:
--version,--help, andloginall behave correctly, andloginwaits indefinitely as expected. The fault appears confined to the interactive session path.Both reproduce on 0.0.148 and 0.0.149 (0.0.149 is current
lateston npm), so this is not a fresh regression.Environment
6.6.135-09383-g1140e4f27e24, x86_64script(1)PTY, and tmux 3.3a withTERM=xterm-256colornpm install -g freebuff(wrapper0.0.149, binarylinux-x640.0.149)freebuff logincompleted; the previous 401s disappeared from the logs and ads render)Issue 1 — zero-argument invocation
Passing any argument avoids it:
freebuffUsage: node mcp_proxy.js …, exit 1freebuff --cwd .freebuff --continuefreebuff --help/--version/loginstraceshows the freebuff process itself writes that line and exits — there is nonodechild and nomcp_proxy.jsprocess spawned:The string
serverId_or_socketPathdoes not appear in the freebuff binary (verified withstringsacross encodings, while other known CLI strings are found), which suggests an external module is being loaded and executed in-process.Issue 2 — interactive session exits after ~6–10s
The TUI renders correctly (logo, project picker, and — inside a project — the normal UI with ads), responds to input (arrow keys/Enter navigate the picker), and then the process exits on its own after roughly 6–10 seconds.
The shutdown is deliberate and graceful, not a crash: it writes its own terminal-reset sequence, sleeps, unmaps its heap, then
exit_group(1). No signal, no core dump, no stderr output.Possibly relevant: an MCP socket connect immediately precedes shutdown
About 2 ms before the shutdown sequence begins, the freebuff process attempts a UNIX-socket connect that fails:
Note the socket name:
datacloud-mcp---cwd.sock. That third-party proxy builds its path as`/tmp/datacloud-mcp-${idOrPath}.sock`whereidOrPath = process.argv[2]. Here it has picked up freebuff's ownargv[2](--cwd), which implies that proxy module is being loaded into the freebuff process and reading the host's argv.That single mechanism would explain both issues: with no arguments
argv[2]isundefined, so the module prints its usage banner and callsprocess.exit(1), killing the host process immediately.The freebuff binary contains ~28 references to
.agentsand ~25 tomcpServers, so it appears to discover agent/MCP plugins from~/.agents. This machine has Google'sdata-agent-kit-starter-packinstalled there (and under~/.gemini/extensions), which shipsmcp/bin/mcp_proxy_bundle.cjscontaining exactly theUsage: node mcp_proxy.js <serverId_or_socketPath>string.Caveat, so this isn't over-claimed: removing that plugin's
.mcp.json, and moving the entire plugin directory aside, did not stop the ~6–10s exit — so either freebuff finds an equivalent definition elsewhere, or the socket connect is a symptom rather than the trigger.Ruled out
Each of these was tested and did not change the ~6–10s exit:
$HOME/ inside a git repo //tmpscriptPTY / tmux,TERM=xterm-256colorCODEBUFF_NO_TERMINAL_WATCHDOG=1"1"is an accepted value)settings.json({"mode":"MAX"}) removed.mcp.jsonremoved; entire plugin directory moved asideDATA_CLOUD_CURR_IDE_NAMEunsetCODEBUFF_DEBUG=1,VERBOSE=1,CODEBUFF_TRACE=1produced no additional outputThe session log (
~/.config/manicode/projects/*/chats/*/log.jsonl) for a failing authenticated run contains a single benign line (Enhanced CLI fingerprint generated successfully) — no error is recorded.Additional note (security)
The CLI writes the account API key in plaintext into
~/.config/manicode/projects/*/chats/*/log.jsonl:{"level":"ERROR","data":{"apiKey":"<redacted>","fields":["id","email"],"status":401}, ...}Worth redacting, since these logs persist on disk and are easy to share when reporting bugs.
What would help
~/.agentsplugins are presentexit(1)