Skip to content

Commit 6de6bb0

Browse files
committed
Add Claude Code as default platform when none detected
When `deepwork install` is run and no platforms are detected, automatically create the `.claude` directory and add it to the platforms list instead of failing with an error.
1 parent 3afaeba commit 6de6bb0

2 files changed

Lines changed: 42 additions & 20 deletions

File tree

src/deepwork/cli/install.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -283,21 +283,25 @@ def _install_deepwork(platform_name: str | None, project_path: Path) -> None:
283283
available_adapters = detector.detect_all_platforms()
284284

285285
if not available_adapters:
286-
supported = ", ".join(
287-
f"{AgentAdapter.get(name).display_name} ({AgentAdapter.get(name).config_dir}/)"
288-
for name in AgentAdapter.list_names()
289-
)
290-
raise InstallError(
291-
f"No AI platform detected.\n"
292-
f"DeepWork supports: {supported}.\n"
293-
"Please set up one of these platforms first, or use --platform to specify."
294-
)
295-
296-
# Add all detected platforms
297-
for adapter in available_adapters:
298-
console.print(f" [green]✓[/green] {adapter.display_name} detected")
299-
platforms_to_add.append(adapter.name)
300-
detected_adapters = available_adapters
286+
# No platforms detected - default to Claude Code
287+
console.print(" [dim]•[/dim] No AI platform detected, defaulting to Claude Code")
288+
289+
# Create .claude directory
290+
claude_dir = project_path / ".claude"
291+
ensure_dir(claude_dir)
292+
console.print(f" [green]✓[/green] Created {claude_dir.relative_to(project_path)}/")
293+
294+
# Get Claude adapter
295+
claude_adapter_class = AgentAdapter.get("claude")
296+
claude_adapter = claude_adapter_class(project_root=project_path)
297+
platforms_to_add = [claude_adapter.name]
298+
detected_adapters = [claude_adapter]
299+
else:
300+
# Add all detected platforms
301+
for adapter in available_adapters:
302+
console.print(f" [green]✓[/green] {adapter.display_name} detected")
303+
platforms_to_add.append(adapter.name)
304+
detected_adapters = available_adapters
301305

302306
# Step 3: Create .deepwork/ directory structure
303307
console.print("[yellow]→[/yellow] Creating DeepWork directory structure...")

tests/integration/test_install_flow.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,32 @@ def test_install_fails_without_git(self, temp_dir: Path) -> None:
7979
assert result.exit_code != 0
8080
assert "Not a Git repository" in result.output
8181

82-
def test_install_fails_without_platform(self, mock_git_repo: Path) -> None:
83-
"""Test that install fails when no platform is detected."""
82+
def test_install_defaults_to_claude_when_no_platform(self, mock_git_repo: Path) -> None:
83+
"""Test that install defaults to Claude Code when no platform is detected."""
8484
runner = CliRunner()
8585

86-
result = runner.invoke(cli, ["install", "--path", str(mock_git_repo)])
86+
result = runner.invoke(
87+
cli, ["install", "--path", str(mock_git_repo)], catch_exceptions=False
88+
)
8789

88-
assert result.exit_code != 0
89-
assert "No AI platform detected" in result.output
90+
assert result.exit_code == 0
91+
assert "No AI platform detected, defaulting to Claude Code" in result.output
92+
assert "Created .claude/" in result.output
93+
assert "DeepWork installed successfully for Claude Code" in result.output
94+
95+
# Verify .claude directory was created
96+
claude_dir = mock_git_repo / ".claude"
97+
assert claude_dir.exists()
98+
99+
# Verify config.yml has Claude
100+
config_file = mock_git_repo / ".deepwork" / "config.yml"
101+
config = load_yaml(config_file)
102+
assert config is not None
103+
assert "claude" in config["platforms"]
104+
105+
# Verify skills were created for Claude
106+
skills_dir = claude_dir / "skills"
107+
assert (skills_dir / "deepwork_jobs" / "SKILL.md").exists()
90108

91109
def test_install_with_multiple_platforms_auto_detect(
92110
self, mock_multi_platform_project: Path

0 commit comments

Comments
 (0)