databrickslabs / databrickslabs/coding-agents-databricks-apps

Toggle individual CLIs on/off (extend ENABLE_HERMES pattern to Codex/OpenCode/Gemini)

Open
#29 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
40
Forks
11
Avg merge
1m
Merged PRs (30d)
1

Description

Motivation

setup_hermes.py already supports ENABLE_HERMES=false to skip its install. The other three secondary CLIs (Codex, OpenCode, Gemini) don't have an equivalent, so an operator who knows their workspace can't actually run a particular agent has to either:

  • live with the broken install + dead UI, or
  • fork and gut the setup script.

Real triggering case: workspace adb-7405613340366915.15.azuredatabricks.net serves only databricks-gpt-oss-* models. Codex is configured with wire_api = "responses", but:

$ curl -X POST .../serving-endpoints/responses -d '{"model":"databricks-gpt-oss-120b",...}'
{"error_code":"BAD_REQUEST","message":"Responses API passthrough is not supported for model databricks-gpt-oss-120b."}
HTTP 400

So Codex on this workspace won't function regardless of which model it picks. An operator needs ENABLE_CODEX=false to cleanly skip the install rather than ship a broken agent into the terminal UI.

Fix shape (PR coming)

Replicate the Hermes pattern. 4-line gate at the top of each of setup_codex.py, setup_opencode.py, setup_gemini.py:

if os.environ.get("ENABLE_<CLI>", "true").strip().lower() in ("false", "0", "no"):
    print("ENABLE_<CLI>=false — skipping <CLI> setup")
    raise SystemExit(0)

app.yaml documents all four toggles together. Defaults to "true" for all → existing deployments are unchanged.

Out of scope

  • Claude Code stays always-on. setup_claude.py also creates ~/projects, writes ~/.claude.json with MCP servers (used app-wide), and copies subagent definitions. Some of that is non-Claude-specific. Adding ENABLE_CLAUDE=false would require disentangling those side effects first. Can be a follow-up if there's demand for a "no-Claude" deploy.
  • No UI surfacing. A skipped agent's setup-status step still shows complete (because raise SystemExit(0) is a clean exit). The print line is in the step's stdout buffer; users who care can read it. Adding a "skipped" state to the UI is more invasive — keep this PR small.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the existing ENABLE_HERMES gate in setup_hermes.py, then compare setup_codex.py, setup_opencode.py, and setup_gemini.py. Add matching opt-out handling and document all four toggles together in app.yaml; verify the default path remains unchanged and false, 0, and no exit cleanly without installing the CLI.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
devops
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
78/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.