63 lines
1.7 KiB
Python
63 lines
1.7 KiB
Python
"""Start Claude Code in the myclaude project directory."""
|
|
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import click
|
|
from rich.console import Console
|
|
|
|
from myclaude.project_root import get_myclaude_project_root
|
|
|
|
console = Console()
|
|
|
|
|
|
def _resolve_chat_cwd() -> Path:
|
|
root = get_myclaude_project_root()
|
|
fallback = Path.home() / ".myclaude"
|
|
if root == fallback:
|
|
console.print(
|
|
"[red]Cannot resolve myclaude project root.[/red] Run from the repo or set "
|
|
"[cyan]MYCLAUDE_PROJECT_ROOT[/cyan].",
|
|
file=sys.stderr,
|
|
)
|
|
raise SystemExit(1)
|
|
return root
|
|
|
|
|
|
@click.command(
|
|
"chat",
|
|
context_settings={
|
|
"ignore_unknown_options": True,
|
|
"allow_extra_args": True,
|
|
},
|
|
)
|
|
@click.option(
|
|
"--dangerously-skip-permissions",
|
|
is_flag=True,
|
|
default=False,
|
|
help="Forward to claude: bypass permission checks (sandbox / isolated use only).",
|
|
)
|
|
@click.pass_context
|
|
def chat_cmd(ctx: click.Context, dangerously_skip_permissions: bool) -> None:
|
|
"""Run `claude` in the myclaude repo so CLAUDE.md and .claude/ apply; extra args pass through."""
|
|
binary = os.environ.get("CLAUDE_BIN") or shutil.which("claude")
|
|
if not binary:
|
|
console.print(
|
|
"[red]claude CLI not found in PATH.[/red] Install Claude Code or set "
|
|
"[cyan]CLAUDE_BIN[/cyan].",
|
|
file=sys.stderr,
|
|
)
|
|
raise SystemExit(127)
|
|
|
|
cwd = _resolve_chat_cwd()
|
|
cmd: list[str] = [binary]
|
|
if dangerously_skip_permissions:
|
|
cmd.append("--dangerously-skip-permissions")
|
|
cmd.extend(ctx.args)
|
|
|
|
proc = subprocess.run(cmd, cwd=str(cwd), check=False)
|
|
raise SystemExit(proc.returncode)
|