Skip to content

feat: zero-touch install, session-per-folder, plugin rename, README rewrite - #529

Merged
namastex888 merged 18 commits into
mainfrom
dev
Mar 10, 2026
Merged

namastex888 merged 18 commits into
mainfrom
dev

Conversation

@namastex888

@namastex888 namastex888 commented Mar 10, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Major release consolidating install overhaul, session architecture, naming cleanup, and developer experience improvements across 14 commits.

Zero-Touch Install Pipeline

  • Install script fully autonomous — installs Bun, tmux, Claude Code plugin, orchestration config, and genie CLI in one curl | bash command with no prompts
  • Smart install plugin (smart-install.js) replaces old shell-based installer with JS-driven setup that handles orchestration prompt injection, config defaults, and tmux configuration
  • promptMode setting — controls --system-prompt vs --append-system-prompt for flexible prompt loading
  • Dead code cleanup — removed old install.ts command, system-detect.ts exports, and install-genie-cli.sh script

Session-Per-Folder Architecture

  • tui.ts → session.ts rename — reflects that each folder gets its own isolated session, not a shared TUI
  • Session isolation — agents and context are scoped per working directory, preventing cross-project bleed

Plugin & Skill Rename

  • /debug → /trace — agent and skill renamed to better reflect its investigation-focused behavior
  • /report skill added — new skill for generating structured project reports

README Rewrite & Visual Enhancement

  • Content rewrite — cognitive-load positioning, "Wishes in, PRs out" tagline, structured feature grid
  • Visual upgrade — HTML feature table with emoji headers, bold nav links, <br/> spacers, install script promoted to primary path
  • Comparison table with ❌/✅ headers, pipeline flow emojis, numbered quick-start steps

Git Safety & CI Hardening

  • Pre-commit hook blocks commits when CI is red (scoped to ci.yml workflow)
  • Pre-push hook runs full bun run check before allowing push
  • Commitlint fix — merge commits from GitHub no longer fail validation
  • Bun pinned to 1.3.10 across all CI workflows
  • Submodule cleanup — removed stale repos/genie-cli reference

Dependency Bump

  • Updated package.json dependencies and bun.lock refresh
  • cliff.toml version format updated

Test plan

  • bun run check passes (typecheck + lint + dead-code + 527 tests)
  • curl -fsSL .../install.sh | bash completes zero-touch on clean machine
  • genie launches session scoped to current folder
  • /trace skill works (renamed from /debug)
  • /report skill generates structured output
  • README renders correctly on GitHub (HTML table, emoji headers, collapsible npm install)
  • Pre-commit hook blocks when CI is red, allows when green
  • Pre-push hook runs full check suite

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added session-per-folder architecture for improved workspace management.
    • Added comprehensive /report skill for streamlined bug investigation and GitHub issue creation.
    • Added prompt mode configuration to control Claude integration behavior.
  • Changes

    • Renamed /debug skill to /trace for clearer terminology.
    • Renamed plugin from "automagik-genie" to "genie."
    • Removed global --team shortcut; use team-specific flags where needed.
    • Installation process now fully automated without interactive prompts.
  • Removals

    • Removed genie install command; installation handled automatically during setup.

automagik-genie and others added 14 commits March 10, 2026 02:04
Remove `genie install` CLI command, its implementation in
`src/genie-commands/install.ts`, and the defunct shell script
`plugins/genie/scripts/src/install-genie-cli.sh`. The `shortcuts install`
subcommand is unaffected.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Move TEAM_LEAD_PROMPT.md delivery from runtime filesystem path resolution
(which breaks in production bundles) to install-time injection via
install.sh. The prompt is now written to ~/.claude/rules/genie-orchestration.md
which Claude Code auto-loads every session.

- Add inject_orchestration_prompt() to install.sh with full prompt content
- Call inject_orchestration_prompt() in run_install() after install_genie_cli
- Remove getTeamLeadPrompt() from team-lead-command.ts (no more import.meta.url)
- Simplify persistSystemPrompt() to only write AGENTS.md content (systemPrompt)
- Remove unused fileURLToPath, dirname, existsSync, readFileSync imports
- Add source-of-truth comment header to TEAM_LEAD_PROMPT.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Remove confirm() calls from install flow; keep definitions for uninstall
- check_and_repair_symlink: auto-repair broken symlinks without asking
- offer_claude_plugin/openclaw/codex_skills: install directly, no prompt
- Add inject_orchestration_prompt(): writes TEAM_LEAD_PROMPT to
  ~/.claude/rules/genie-orchestration.md
- Add install_tmux_if_needed(): installs tmux via package manager if absent
- Add create_default_config(): creates ~/.genie/config.json with defaults
  (promptMode: append, version: 2)
- Add configure_tmux_defaults(): appends base-index 0 to ~/.tmux.conf
- Update run_install(): calls new functions, removes INTERACTIVE branch
- Update print_success(): shows genie launch command and /onboarding hint
- Update output_agent_prompt(): reflects new next-steps

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ystem-prompt

Adds configurable promptMode ('append'|'system') to GenieConfigSchema.
Default 'append' preserves CC default prompt; 'system' replaces it.
Wires into buildTeamLeadCommand, setup wizard, and updates all tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… setup

- Inlines TEAM_LEAD_PROMPT as constant in smart-install.js (no fs dependency)
- Writes ~/.claude/rules/genie-orchestration.md on version change
- Creates ~/.genie/config.json with defaults if missing
- Ensures tmux base-index 0 in ~/.tmux.conf
- Fixes misleading tui.ts warning about missing system prompt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… removal

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All 6 execution groups complete, all success criteria met.
534/534 tests pass, bun run check exits 0, build succeeds.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove duplicate inject_orchestration_prompt definition in install.sh
  (dead code at lines 504-589, second def at 740 was the active one)
- Remove duplicate inject_orchestration_prompt call in run_install()
- Fix marker race in smart-install.js: capture old version before
  installDeps() overwrites marker, pass to version-dependent functions
  so ensureTmuxDefaults() and injectOrchestrationPrompt() correctly
  detect upgrades and fresh installs
- Align createDefaultConfig() schema in smart-install.js with install.sh
  (was missing session, terminal, logging, shell, shortcuts fields)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Defense-in-depth: pre-commit checks CI status via gh CLI and blocks
commits on red branches (SKIP_CI_CHECK=1 escape hatch for fixes),
pre-push now runs full `bun run check` quality gate, and Claude Code
PreToolUse hook blocks --no-verify and bare --force push attempts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Without --workflow filter, gh run list returns the latest run from any
workflow. A passing release.yml could mask a failing ci.yml, or a
failing commitlint.yml could wrongly block commits.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GitHub squash-merge commits include the full PR body as the commit
body, violating body-max-line-length. Individual commits are already
linted on dev — re-linting the merge commit on main is redundant.

- Ignore merge commits in commitlint config
- Remove main from commitlint push trigger

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
)

* feat: session-per-folder, tui→session rename, plugin rename, /report skill

- Session-per-folder: running `genie` from any directory creates a tmux
  window named after the folder inside a single "genie" session, with
  4-char hash disambiguation for same-basename collisions
- Rename tui→session: tui.ts→session.ts, tuiCommand→sessionCommand,
  TuiOptions→SessionOptions across all source, tests, and docs
- Remove --team global shortcut from team-shortcut.ts (kept on subcommands)
- Plugin rename: automagik-genie→genie in plugin.json and cliff.toml
- Skill rename: /debug→/trace to avoid Claude Code built-in conflict
- New /report skill: cascades /trace→browser evidence→observability→gh issue
- Hotfix: /onboarding SKILL.md line 499 backtick split to prevent
  Claude SDK executable interpolation crash

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ci): pin Bun to 1.3.9 to avoid test runner race condition

Bun 1.3.10 has a race condition in its parallel test runner's module
evaluator that intermittently fails with "Export named X not found"
when loading test files on CI hardware. Pinning to 1.3.9 (verified
working) ensures deterministic test execution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review feedback — resume lookup, shell quoting, dup line

- Sanitize team name before findLastSessionId lookup so resume
  detection works for folder names with spaces/uppercase/underscores
- Use shellQuote in tmux getWindowEnv/setWindowEnv to handle paths
  containing single quotes
- Remove duplicate line in brainstorm.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ci): add test retry for Bun test runner race condition

Bun's parallel test runner intermittently fails with "Export named X
not found" during module loading on CI hardware (different export
names each time, confirming non-deterministic race). Cannot reproduce
locally across 20+ consecutive runs. Add retry (bun test || bun test)
as pragmatic workaround; revert Bun pin to latest.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: pin Bun to 1.3.10 across project and all workflows

- Add engines.bun >= 1.3.10 to package.json
- Pin bun-version: 1.3.10 in ci.yml, release.yml, version.yml
  (replaces unpinned "latest")

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Genie <genie@namastex.ai>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
)

* feat: session-per-folder, tui→session rename, plugin rename, /report skill

- Session-per-folder: running `genie` from any directory creates a tmux
  window named after the folder inside a single "genie" session, with
  4-char hash disambiguation for same-basename collisions
- Rename tui→session: tui.ts→session.ts, tuiCommand→sessionCommand,
  TuiOptions→SessionOptions across all source, tests, and docs
- Remove --team global shortcut from team-shortcut.ts (kept on subcommands)
- Plugin rename: automagik-genie→genie in plugin.json and cliff.toml
- Skill rename: /debug→/trace to avoid Claude Code built-in conflict
- New /report skill: cascades /trace→browser evidence→observability→gh issue
- Hotfix: /onboarding SKILL.md line 499 backtick split to prevent
  Claude SDK executable interpolation crash

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ci): pin Bun to 1.3.9 to avoid test runner race condition

Bun 1.3.10 has a race condition in its parallel test runner's module
evaluator that intermittently fails with "Export named X not found"
when loading test files on CI hardware. Pinning to 1.3.9 (verified
working) ensures deterministic test execution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: address PR review feedback — resume lookup, shell quoting, dup line

- Sanitize team name before findLastSessionId lookup so resume
  detection works for folder names with spaces/uppercase/underscores
- Use shellQuote in tmux getWindowEnv/setWindowEnv to handle paths
  containing single quotes
- Remove duplicate line in brainstorm.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ci): add test retry for Bun test runner race condition

Bun's parallel test runner intermittently fails with "Export named X
not found" during module loading on CI hardware (different export
names each time, confirming non-deterministic race). Cannot reproduce
locally across 20+ consecutive runs. Add retry (bun test || bun test)
as pragmatic workaround; revert Bun pin to latest.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: pin Bun to 1.3.10 across project and all workflows

- Add engines.bun >= 1.3.10 to package.json
- Pin bun-version: 1.3.10 in ci.yml, release.yml, version.yml
  (replaces unpinned "latest")

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: bump deps and rewrite README with cognitive-load positioning

Dependency bumps (safe patches/minors):
- @types/bun ^1.1.0 → ^1.3.10
- @types/node ^20.10.5 → ^22.0.0
- esbuild ^0.27.2 → ^0.27.3
- knip ^5.85.0 → ^5.86.0
- typescript ^5.3.3 → ^5.8.0
- zod ^3.22.4 → ^3.25.0

README rewrite:
- New positioning: "Wishes in, PRs out" (cognitive load reduction)
- Third-person voice replacing first-person Genie voice
- 3-step quickstart, 3x3 feature grid, Without/With pain table
- CLI reference and config moved to collapsed <details> sections
- Body reduced from 317 to 127 lines (excl. collapsed sections)
- Prerequisites listed explicitly, no --dangerously-skip-permissions

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: enhance README visual presentation with HTML feature grid, emoji headers, and install flip

- Bold nav links, ✅ checkmarks on "right for you" bullets
- Install script promoted to primary, npm collapsed in <details>
- Markdown table → HTML feature grid with emoji headers
- Comparison table emoji headers (❌/✅), pipeline flow emojis
- All --- rules replaced with <br/> spacers (softer breathing room)
- Numbered quick-start steps (01/02/03)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Genie <genie@namastex.ai>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Mar 10, 2026 •

Copy link
Copy Markdown

Warning

Rate limit exceeded

@namastex888 has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 22 minutes and 59 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 62795277-1919-4c6f-a1e2-caf7d2814df6

📥 Commits

Reviewing files that changed from the base of the PR and between 1faf850 and f632280.

⛔ Files ignored due to path filters (5)
  • README.md is excluded by !*.md
  • TEAM_LEAD_PROMPT.md is excluded by !*.md
  • bun.lock is excluded by !**/*.lock
  • plugins/genie/scripts/smart-install.js is excluded by !plugins/genie/scripts/**
  • plugins/genie/scripts/term.cjs is excluded by !plugins/genie/scripts/**
📒 Files selected for processing (40)
  • .genie/brainstorm.md
  • .genie/brainstorms/deps-bump-readme-rewrite/DESIGN.md
  • .genie/brainstorms/deps-bump-readme-rewrite/DRAFT.md
  • .genie/brainstorms/genie-default-command/DESIGN.md
  • .genie/brainstorms/genie-default-command/DRAFT.md
  • .genie/brainstorms/prompt-loading-arch/DESIGN.md
  • .genie/brainstorms/prompt-loading-arch/DRAFT.md
  • .genie/brainstorms/report-skill-plugin-rename/DESIGN.md
  • .genie/brainstorms/report-skill-plugin-rename/DRAFT.md
  • .genie/wishes/deps-bump-readme-rewrite/WISH.md
  • .genie/wishes/genie-default-command/WISH.md
  • .genie/wishes/report-skill-plugin-rename/WISH.md
  • .genie/wishes/unify-install-kill-fragmentation/WISH.md
  • .github/workflows/ci.yml
  • .github/workflows/commitlint.yml
  • .github/workflows/release.yml
  • .github/workflows/version.yml
  • cliff.toml
  • commitlint.config.ts
  • install.sh
  • package.json
  • plugins/genie/.claude-plugin/plugin.json
  • plugins/genie/agents/trace.md
  • repos/genie-cli
  • skills/onboarding/SKILL.md
  • skills/report/SKILL.md
  • skills/trace/SKILL.md
  • src/genie-commands/__tests__/session.test.ts
  • src/genie-commands/session.ts
  • src/genie-commands/setup.ts
  • src/genie-commands/tui.ts
  • src/genie.ts
  • src/lib/claude-native-teams.ts
  • src/lib/team-auto-spawn.test.ts
  • src/lib/team-lead-command.ts
  • src/lib/team-shortcut.test.ts
  • src/lib/team-shortcut.ts
  • src/lib/tmux.ts
  • src/term-commands/agents.ts
  • src/term-commands/msg.test.ts
📝 Walkthrough

Walkthrough

This PR consolidates planning documents for four brainstorm initiatives (.genie files), pins bun to 1.3.10 across workflows and package.json, refactors the TUI command layer to session-based architecture with per-folder window management via tmux, introduces a promptMode configuration to control CLI prompt injection, automates the install flow with orchestration prompt injection and default config creation, removes the global --team shortcut, simplifies system detection, and adds a new /report skill with /trace renaming.

Changes

Cohort / File(s) Summary
Brainstorming & Planning
.genie/brainstorm.md, .genie/brainstorms/*/DESIGN.md, .genie/brainstorms/*/DRAFT.md, .genie/wishes/*/WISH.md
Planning documents outlining future feature work: dependency bumps + README rewrite, session-per-folder architecture with tui→session rename, /report skill + plugin rename, and unified install flow with promptMode config. No functional code changes.
Bun Version Pinning
.github/workflows/ci.yml, .github/workflows/release.yml, .github/workflows/version.yml, package.json
Pins bun to version 1.3.10 across workflows and adds bun engine requirement in package.json. Updates dev dependencies (zod, @types/bun, @types/node, esbuild, knip, typescript).
TUI → Session Refactor
src/genie-commands/session.ts, src/genie-commands/tui.ts, src/genie-commands/__tests__/session.test.ts, src/genie.ts, src/lib/claude-native-teams.ts, src/lib/team-auto-spawn.test.ts
Removes tui.ts and replaces with session.ts, renaming TuiOptions→SessionOptions and tuiCommand()→sessionCommand(). Implements session-per-folder tmux architecture with window naming, GENIE_CWD environment tracking, and team-aware session management. Updates all references and test imports.
Install Flow Automation
install.sh, src/genie-commands/install.ts, src/genie-commands/setup.ts, src/lib/system-detect.ts
Removes interactive install command module; rewrites install.sh with non-interactive tmux/orchestration-prompt/default-config setup. Removes system detection helpers (OS, distro, prerequisites checking). Updates setup.ts to replace prerequisites check with promptMode configuration UI.
Prompt Mode Configuration
src/types/genie-config.ts, src/lib/team-lead-command.ts, src/term-commands/msg.test.ts
Adds promptMode enum field ('append' | 'system') to config schema. Updates buildTeamLeadCommand to choose --append-system-prompt or --system-prompt based on promptMode; adjusts test assertions accordingly.
Team Shortcut Simplification
src/lib/team-shortcut.ts, src/lib/team-shortcut.test.ts, src/lib/genie-config.ts
Removes DEFAULT_TEAM constant and global --team flag support. Simplifies routing to prioritize known subcommands, then treat unknown args as team names. Exports loadGenieConfigSync. Trims team-shortcut tests significantly.
Tmux & Environment Utilities
src/lib/tmux.ts
Adds getWindowEnv() and setWindowEnv() public functions for managing tmux window-scoped environment variables with safe quoting.
Plugin & Skill Renaming
plugins/genie/.claude-plugin/plugin.json, plugins/genie/agents/trace.md, skills/trace/SKILL.md, skills/report/SKILL.md
Renames plugin from "automagik-genie" to "genie"; renames debug skill to trace (updates headers, descriptions, agent names); adds new report skill for comprehensive bug investigation cascading through /trace with browser/observability data collection and auto-generated GitHub issues.
Documentation & Onboarding Updates
skills/onboarding/SKILL.md, src/term-commands/agents.ts
Replaces references to "genie tui" with "genie" in onboarding flow and error messages; updates tmux shortcut formatting; aligns documented invocation with new session model.
CI & Commit Hygiene
.husky/pre-commit, .husky/pre-push, commitlint.config.ts, cliff.toml
Adds CI failure check to pre-commit hook; simplifies pre-push to single bun check command; updates commitlint to ignore "Merge" commits; updates contributor mapping from "Automagik Genie" to "Genie".

Sequence Diagram

sequenceDiagram
    participant User
    participant CLI as genie CLI
    participant Session as sessionCommand()
    participant Tmux as tmux
    participant Env as Environment
    participant Claude as Claude

    User->>CLI: genie (no args)
    CLI->>Session: sessionCommand(options)
    Session->>Env: Derive window name from cwd
    Session->>Tmux: Check if session "genie" exists
    alt Session exists
        Tmux-->>Session: Session ID
        Session->>Tmux: List windows, resolve/disambiguate name
        Session->>Tmux: Attach to window with cwd
    else Session not found
        Session->>Tmux: Create session "genie"
        Session->>Tmux: Create window (folder basename + hash)
        Session->>Env: Set GENIE_CWD env var in window
    end
    Session->>Env: Read AGENTS.md for system prompt
    Session->>Env: Read config for promptMode
    Session->>Claude: Launch with appropriate prompt flag<br/>(--append-system-prompt or --system-prompt)
    Claude-->>User: Interactive session
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main changes: zero-touch install, session-per-folder architecture, plugin rename, and README rewrite are the primary objectives achieved in this PR.
Docstring Coverage ✅ Passed Docstring coverage is 80.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch dev

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a suite of significant enhancements aimed at streamlining the developer experience and improving the robustness of the Genie CLI. The changes focus on simplifying the initial setup process, providing better context isolation for projects, refining the agent interaction model, and enhancing documentation. These updates collectively make the tool more intuitive, reliable, and powerful for managing AI-assisted development workflows.

Highlights

  • Zero-Touch Installation Overhaul: The installation script (install.sh) has been completely rewritten to be fully autonomous, handling the installation of Bun, tmux, the Claude Code plugin, orchestration configuration, and the Genie CLI in a single curl | bash command without any prompts. The smart-install.js script now also handles orchestration prompt injection, config defaults, and tmux configuration. A new promptMode setting (append or system) controls how system prompts are loaded into Claude Code.
  • Session-Per-Folder Architecture: The core session management has been refactored to provide isolated sessions per working directory. The tui.ts file and related terminology have been renamed to session.ts to better reflect that each folder now gets its own isolated tmux window within a single 'genie' tmux session, preventing context bleed between projects. Window names are derived from the current working directory, with disambiguation for basename collisions.
  • Plugin and Skill Renaming & New /report Skill: The plugin name has been shortened from automagik-genie to genie for conciseness. The /debug agent and skill have been renamed to /trace to avoid conflict with Claude Code's built-in debug functionality and better reflect its investigation-focused behavior. A new /report skill has been added, designed to generate comprehensive, evidence-rich bug reports by cascading through /trace, capturing browser evidence, extracting observability data, and automatically creating GitHub issues.
  • README Rewrite and Visual Enhancement: The README.md has undergone a significant rewrite to improve clarity, positioning, and user experience. It now features a cognitive-load reduction angle, a new tagline ('Wishes in, PRs out'), a structured feature grid, and a comparison table highlighting the benefits of using Genie. Visual elements like HTML tables and emoji headers have been incorporated, and the install script is promoted as the primary installation path.
  • Git Safety and CI Hardening: New Git hooks have been introduced to enhance development workflow safety. A pre-commit hook now blocks commits if CI is red on the current branch (scoped to ci.yml), and a pre-push hook runs a full bun run check before allowing pushes. The commitlint configuration has been updated to ignore GitHub merge commits, preventing validation failures for auto-generated messages. Bun has also been pinned to version 1.3.10 across all CI workflows, and a stale repos/genie-cli submodule has been removed.
  • Dependency Updates: Key dependencies in package.json and bun.lock have been updated to their latest compatible versions, including zod, @types/bun, @types/node, esbuild, knip, and typescript. The cliff.toml file has also been updated to reflect the plugin rename.
Changelog
  • .claude/hooks/git-safety.sh
    • Added a new shell script to enforce git safety rules, blocking --no-verify and bare --force pushes.
  • .claude/settings.json
    • Added a PreToolUse hook to execute the git-safety.sh script for Bash commands.
  • .genie/brainstorm.md
    • Added new entries for deps-bump-readme-rewrite, report-skill-plugin-rename, and genie-default-command wishes.
  • .genie/brainstorms/deps-bump-readme-rewrite/DESIGN.md
    • Added a design document outlining the problem, scope, decisions, risks, and acceptance criteria for dependency updates and README rewrite.
  • .genie/brainstorms/deps-bump-readme-rewrite/DRAFT.md
    • Added a draft document for brainstorming dependency audit and README rewrite strategies.
  • .genie/brainstorms/genie-default-command/DESIGN.md
    • Added a design document detailing the session-per-folder architecture, tui rename to session, --team global shortcut removal, and onboarding hotfix.
  • .genie/brainstorms/genie-default-command/DRAFT.md
    • Added a draft document for brainstorming the genie default command, tui rename, and onboarding hotfix.
  • .genie/brainstorms/prompt-loading-arch/DESIGN.md
    • Added a design document for unifying installation and prompt fragmentation, detailing key changes to install.sh, smart-install.js, and prompt handling.
  • .genie/brainstorms/prompt-loading-arch/DRAFT.md
    • Added a draft document indicating the crystallization of the prompt loading architecture into a design document.
  • .genie/brainstorms/report-skill-plugin-rename/DESIGN.md
    • Added a design document for the /report skill, plugin renaming, and /debug to /trace rename, including architecture and evidence collection matrix.
  • .genie/brainstorms/report-skill-plugin-rename/DRAFT.md
    • Added a draft document for brainstorming the /report skill, plugin rename, and debug rename.
  • .genie/wishes/deps-bump-readme-rewrite/WISH.md
    • Added a wish document detailing the summary, scope, decisions, and execution groups for dependency bumping and README rewriting.
  • .genie/wishes/genie-default-command/WISH.md
    • Added a wish document outlining the summary, scope, decisions, and execution groups for session-per-folder, tui rename, --team cleanup, and onboarding hotfix.
  • .genie/wishes/report-skill-plugin-rename/WISH.md
    • Added a wish document detailing the summary, scope, decisions, and execution groups for plugin renaming, /debug to /trace rename, and the new /report skill.
  • .genie/wishes/unify-install-kill-fragmentation/WISH.md
    • Added a wish document summarizing the unification of installation, prompt fragmentation, and the introduction of promptMode settings.
  • .husky/pre-commit
    • Added a CI status check to block commits if the CI workflow (ci.yml) is failing on the current branch.
  • .husky/pre-push
    • Updated the pre-push hook to run bun run check instead of separate typecheck and test commands.
  • README.md
    • Updated the header image alt text, replaced the tagline, revised navigation links, added a 'What is Genie?' section, included a 'Genie is right for you if' checklist, updated the install section, introduced a feature grid, added a 'Without Genie vs. With Genie' comparison table, simplified the wish pipeline description, removed several CLI commands from the main reference, updated hook preset descriptions, and removed the 'Plugins' section.
  • TEAM_LEAD_PROMPT.md
    • Added a comment indicating that the content is the source of truth for injection into ~/.claude/rules/genie-orchestration.md by install scripts.
  • bun.lock
    • Updated various dependency versions, including zod, @types/bun, @types/node, esbuild, knip, and typescript.
  • cliff.toml
    • Updated the contributor attribution for 'Automagik Genie' to 'Genie' and its GitHub handle.
  • commitlint.config.ts
    • Added an ignore rule for commit messages starting with 'Merge' to prevent GitHub merge/squash-merge commits from failing validation.
  • install.sh
    • Modified the symlink repair logic to be automatic, removed interactive confirmation prompts for plugin installations, added functions to inject orchestration prompts, create default configuration, install tmux if needed, and configure tmux defaults. The success message and agent prompt output were also updated.
  • package.json
    • Updated dependency versions for zod, @types/bun, @types/node, esbuild, knip, and typescript. Added an engines.bun constraint requiring Bun version >=1.3.10.
  • plugins/genie/.claude-plugin/plugin.json
    • Renamed the plugin from automagik-genie to genie.
  • plugins/genie/agents/debug.md
    • Renamed to plugins/genie/agents/trace.md and updated its internal name and description to 'trace'.
  • plugins/genie/scripts/smart-install.js
    • Added constants for the orchestration prompt, functions to get marker version, inject orchestration prompt, create default config, and ensure tmux defaults. These functions are now called during the smart install process.
  • plugins/genie/scripts/term.cjs
    • Updated the plugin name reference from automagik-genie to genie.
  • repos/genie-cli
    • Removed the repos/genie-cli submodule.
  • skills/debug/SKILL.md
    • Renamed to skills/trace/SKILL.md and updated its internal name and description to 'trace'.
  • skills/onboarding/SKILL.md
    • Updated references from genie tui to genie in the description and flow sections. Fixed a markdown formatting issue on line 499 to prevent executable interpolation triggers.
  • skills/report/SKILL.md
    • Added a new skill definition for /report, detailing its purpose, flow (collect symptoms, run /trace, browser investigation, observability data, compile report, create GitHub issue), degradation rules, dispatch methods, and general rules.
  • src/genie-commands/tests/tui.test.ts
    • Renamed to src/genie-commands/__tests__/session.test.ts, updated comments, and adjusted test expectations for buildClaudeCommand to reflect the default use of --append-system-prompt.
  • src/genie-commands/session.ts
    • Added a new file implementing the session command logic, including session-per-folder architecture, window name resolution, native team management, and Claude Code command building.
  • src/genie-commands/setup.ts
    • Removed the checkPrerequisites function, which previously performed read-only checks. Added a new configurePromptMode function to allow users to configure the promptMode setting interactively.
  • src/genie-commands/tui.ts
    • Removed the tui.ts file, as its functionality has been replaced by session.ts.
  • src/genie.ts
    • Removed the installCommand import and its corresponding CLI command. Updated the _open command to use sessionCommand instead of tuiCommand and changed its description comment.
  • src/lib/claude-native-teams.ts
    • Updated a comment from genie tui to genie session in the discoverTeamName function.
  • src/lib/genie-config.ts
    • Exported the loadGenieConfigSync function.
  • src/lib/system-detect.ts
    • Removed OSType, LinuxDistro, PackageManager, SystemInfo, PrerequisiteStatus types and related functions (getOSType, matchDistro, parseOsRelease, commandExists, detectPackageManager, detectSystem, checkAllPrerequisites, getDistroDisplayName).
  • src/lib/team-auto-spawn.test.ts
    • Updated comments to reflect that buildTeamLeadCommand is now tested via session.ts instead of tui.ts.
  • src/lib/team-lead-command.ts
    • Removed existsSync, readFileSync, dirname, and fileURLToPath imports. Removed the getTeamLeadPrompt function. Modified persistSystemPrompt to only handle AGENTS.md content, as orchestration prompts are now handled by install scripts. Added logic to use promptMode from config to determine whether to use --system-prompt or --append-system-prompt.
  • src/lib/team-shortcut.test.ts
    • Removed tests related to the --team flag and the DEFAULT_TEAM constant, reflecting their removal from team-shortcut.ts. Updated expectations for no args to open session without a team argument.
  • src/lib/team-shortcut.ts
    • Removed the DEFAULT_TEAM constant. Removed the logic for handling the global --team flag, simplifying the shortcut resolution to prioritize known subcommands or treat the first unknown argument as a team name.
  • src/lib/tmux.ts
    • Added getWindowEnv and setWindowEnv functions for managing tmux window environment variables.
  • src/term-commands/agents.ts
    • Updated an error message from genie tui session to genie session.
  • src/term-commands/msg.test.ts
    • Updated test descriptions and expectations to reflect the default use of --append-system-prompt for buildTeamLeadCommand and added a test case for promptMode: 'system'. Updated comments to refer to session.ts instead of tui.ts.
Ignored Files
  • Ignored by pattern: .github/workflows/** (4)
    • .github/workflows/ci.yml
    • .github/workflows/commitlint.yml
    • .github/workflows/release.yml
    • .github/workflows/version.yml
Activity
  • The author, namastex888, initiated this pull request to consolidate a wide array of improvements across the Genie CLI.
  • The changes span 14 commits, addressing installation, session management, naming conventions, developer experience, and CI/CD practices.
  • The PR description includes a detailed summary of the major changes, a comprehensive test plan, and mentions generation with Claude Code.
  • The extensive nature of the changes suggests a significant refactoring and feature addition effort by the author.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution. ↩

tui.ts was renamed to session.ts on dev — resolve all conflicts
in favor of the new name. Delete tui.ts brought in from main.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a zero-touch installer, a session-per-folder architecture, renames components for clarity, and rewrites the README for an improved developer experience. However, a high-severity command injection vulnerability has been identified in the new /report skill and shared orchestration prompt, where LLM prompts construct shell commands using untrusted user input without proper quoting or sanitization. Additionally, a medium-severity maintainability issue exists in the installation script due to hardcoded content.

I am having trouble creating individual review comments. Click here to see my feedback.

install.sh (691-699)

security-high high

A high-severity command injection vulnerability exists in the orchestration prompt template (lines 691 and 699). The examples use double quotes for shell commands (genie agent exec <agent> "<cmd>" and genie send "<text>" --to <agent>), which can lead to command injection if the LLM inserts untrusted user input with metacharacters. It is recommended to update these examples to use single quotes (e.g., '<cmd>' and '<text>') and instruct the LLM to safely quote all arguments using single quotes and escaping internal single quotes.

skills/report/SKILL.md (55-156)

security-high high

The /report skill prompt instructs the LLM to construct and execute shell commands (e.g., agent-browser screenshot <url> on line 55 and gh issue create --title "<title>" --body "<report body>" on line 156) using user-provided input such as URLs and bug descriptions. However, the prompt does not include instructions for the LLM to sanitize or safely quote this input. If an attacker provides input containing shell metacharacters (e.g., ; rm -rf /, $(whoami)), and the LLM includes this input unquoted or improperly quoted in a shell command, it could lead to arbitrary command execution in the user's terminal.

To remediate this, update the prompt to include a mandatory rule for the LLM to safely quote all user-provided data when constructing shell commands. For example, instruct the LLM to use single quotes for arguments and to escape any internal single quotes.

plugins/genie/scripts/smart-install.js (272-280)

security-high high

The orchestration prompt template (lines 272 and 280) provides examples of shell commands (genie agent exec <agent> "<cmd>" and genie send "<text>" --to <agent>) that use double quotes for arguments. If the LLM follows these examples and puts user-provided text containing double quotes or other shell metacharacters into these commands, it could lead to command injection or unintended behavior, as double quotes in bash still allow for expansion of backticks and $().

Consider updating the orchestration prompt examples to use single quotes (e.g., '<cmd>' and '<text>') and adding an explicit instruction for the LLM to safely quote all arguments using single quotes and escaping internal single quotes.

…ix in commitlint

Squash-merges use the PR title (e.g. "Title (#123)") which may lack a
conventional commit prefix. Individual commits are already linted on dev.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 0278503311

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread src/lib/team-shortcut.ts
Comment on lines 47 to +50
if (knownCommands.has(firstArg)) {
let collisionWarning: string | null = null;
if (teamExists?.(firstArg)) {
collisionWarning = `Warning: "${firstArg}" is a subcommand. To open team "${firstArg}", use: genie --team ${firstArg}`;
collisionWarning = `Warning: "${firstArg}" is a subcommand and also a team name. The subcommand takes priority.`;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Restore public escape hatch for command-name teams

This branch removed the --team rewrite path, so any team/window whose name matches a registered subcommand (for example work, agent, or team) is now unreachable through the public shortcut flow: genie <name> always executes the subcommand. The warning here confirms the collision but does not provide a usable CLI path, and _open is hidden, so users can no longer reliably open those teams after this change.

Useful? React with 👍 / 👎.

Comment on lines +249 to +252
await tmux.killSession(sessionName);
}
await deleteNativeTeam(windowName);
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Delete all window teams when resetting a session

--reset now kills the entire tmux session but only deletes the native team for the currently derived window name. In the new multi-window session model this leaves other window teams behind with stale member state, so a “fresh reset” still carries old native-team metadata into subsequent launches. Reset should clear native teams for every window being destroyed, not just one name.

Useful? React with 👍 / 👎.

automagik-genie and others added 2 commits March 10, 2026 19:28
…prevent shell injection

Codex review flagged double-quoted placeholders ("<cmd>", "<text>") in
orchestration prompt examples as command injection risk. Switch to single
quotes across all 3 copies (TEAM_LEAD_PROMPT.md, install.sh, smart-install.js)
and add quoting guidance to /report skill's gh issue create command.

Also fix stale TEAM_LEAD_PROMPT.md reference in session test comment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Orchestration prompt is inlined in install.sh and smart-install.js,
which write it to ~/.claude/rules/genie-orchestration.md at install
time. No runtime code reads this file. Keeping it as a "source of
truth" that must be manually synced to two scripts is fragile.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants