steerdev 1.1.48__tar.gz → 1.1.62__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- steerdev-1.1.62/AGENTS.md +122 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/PKG-INFO +27 -4
- {steerdev-1.1.48 → steerdev-1.1.62}/README.md +25 -3
- steerdev-1.1.62/docs/superpowers/plans/2026-07-15-unified-merge-flow-agent.md +918 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/pyproject.toml +2 -1
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/agent_loop.py +40 -4
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/canals.py +19 -22
- steerdev-1.1.62/src/steerdev_agent/api/projects.py +58 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/tasks.py +2 -1
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/cli.py +376 -203
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/config/models.py +98 -2
- steerdev-1.1.62/src/steerdev_agent/executor/__init__.py +139 -0
- steerdev-1.1.62/src/steerdev_agent/executor/acp.py +400 -0
- steerdev-1.1.62/src/steerdev_agent/executor/acp_client.py +442 -0
- steerdev-1.1.62/src/steerdev_agent/executor/acp_registry.py +154 -0
- steerdev-1.1.62/src/steerdev_agent/executor/acp_spec.py +128 -0
- steerdev-1.1.62/src/steerdev_agent/executor/acp_stream.py +228 -0
- steerdev-1.1.62/src/steerdev_agent/executor/codex.py +137 -0
- steerdev-1.1.62/src/steerdev_agent/executor/pi.py +356 -0
- steerdev-1.1.62/src/steerdev_agent/executor/pi_stream.py +280 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/git/pr.py +122 -0
- steerdev-1.1.62/src/steerdev_agent/merge_settings.py +47 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/runner.py +40 -11
- steerdev-1.1.62/src/steerdev_agent/setup/templates/skills/steerdev-merge-into-canal-skill/SKILL.md +13 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/steerdev.yaml +1 -1
- steerdev-1.1.62/src/steerdev_agent/workspace/tool_detection.py +90 -0
- steerdev-1.1.62/tests/fixtures/fake_acp_echo.py +123 -0
- steerdev-1.1.62/tests/test_acp_executor.py +293 -0
- steerdev-1.1.62/tests/test_acp_registry.py +104 -0
- steerdev-1.1.62/tests/test_acp_stream.py +259 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_agent_loop_extended.py +45 -4
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_agent_loop_wave_pr.py +30 -1
- steerdev-1.1.62/tests/test_canal_enroll.py +186 -0
- steerdev-1.1.62/tests/test_cli_provider.py +209 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_config.py +13 -2
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_config_extended.py +2 -2
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_conflict_mitigation.py +14 -3
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_executor.py +35 -0
- steerdev-1.1.62/tests/test_merge_settings.py +41 -0
- steerdev-1.1.62/tests/test_pi_executor.py +332 -0
- steerdev-1.1.62/tests/test_projects_api.py +60 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_runner_merge_modes.py +19 -10
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_runner_wave_pr.py +3 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_workspace.py +31 -1
- steerdev-1.1.48/AGENTS.md +0 -57
- steerdev-1.1.48/src/steerdev_agent/executor/__init__.py +0 -73
- steerdev-1.1.48/src/steerdev_agent/setup/templates/skills/steerdev-merge-into-canal-skill/SKILL.md +0 -88
- steerdev-1.1.48/src/steerdev_agent/workspace/tool_detection.py +0 -20
- {steerdev-1.1.48 → steerdev-1.1.62}/.github/workflows/pre-commit.yml +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/.github/workflows/publish.yml +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/.gitignore +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/.pre-commit-config.yaml +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/CLAUDE.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/docs/superpowers/plans/2026-06-05-wave-id-implies-unlimited-max-tasks.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/docs/superpowers/specs/2026-06-05-wave-id-implies-unlimited-max-tasks-design.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/scripts/pre-commit-version-bump.sh +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/snapshots/steerdev-agent-v1/Dockerfile +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/snapshots/steerdev-agent-v1/start-agent.sh +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/activity.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/agents.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/client.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/commands.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/configs.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/context.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/events.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/hooks.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/implementation_plan.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/merger.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/messages.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/prd.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/reports.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/runs.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/sessions.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/specs.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/workflow_runs.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/api/workflows.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/config/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/config/platform.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/config/settings.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/evidence.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/evidence_assets.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/executor/base.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/executor/claude.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/executor/stream.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/git/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/git/commit.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/git_ops.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/handlers/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/handlers/prd.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/integration.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/prompt/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/prompt/builder.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/prompt/templates.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/prompt/workflow_template.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/py.typed +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/retry.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/claude_setup.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/repo_setup.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/ci/canal-integration.yml +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/claude_md_section.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/settings.json +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-activity-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-canal-workflow-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-context-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-git-workflow-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-progress-logging-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-single-task-merge-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-specs-management-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-task-management-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/skills/steerdev-wave-tasks-merge-skill/SKILL.md +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/setup/templates/worktrunk.config.toml +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/update_check.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/version.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workflow/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workflow/context.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workflow/executor.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workflow/memory.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workspace/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workspace/preparation.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/workspace/project_manager.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/src/steerdev_agent/worktree.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/__init__.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_agent_loop.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_agents_api.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_api_client.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_claude_executor.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_claude_setup.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_client_methods.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_commands_api.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_context_search.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_git_commit.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_git_ops.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_git_pr.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_hooks_post_tool_use.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_platform_config.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_preparation.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_preparation_provenance.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_prompt.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_reports_client.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_resolve_executor_config.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_resolve_max_tasks.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_retry.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_runner_boundary_commit.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_runner_worktrees.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_stream_parser.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_tasks.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_tasks_update_branch.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_version.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_wave_scoped_fetch.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_workflow_context.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_workflow_memory.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_workflow_prompt_template.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_workflow_runs_api.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_workspace_extended.py +0 -0
- {steerdev-1.1.48 → steerdev-1.1.62}/tests/test_worktree.py +0 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# AGENTS.md
|
|
2
|
+
|
|
3
|
+
Guidance for AI coding agents working in this repository.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
**steerdev-agent** is a Python CLI that orchestrates AI coding agents via subprocess execution, streaming events to the steerdev.com API. It fetches tasks, builds prompts, launches agents (Claude Code and pi are wired; `openai-codex` is a stub), and reports activity.
|
|
8
|
+
|
|
9
|
+
## Project Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
src/steerdev_agent/
|
|
13
|
+
├── cli.py # Typer CLI commands
|
|
14
|
+
├── runner.py # Main orchestrator
|
|
15
|
+
├── agent_loop.py # Persistent agent mode
|
|
16
|
+
├── version.py # Version management
|
|
17
|
+
├── integration.py # Integration utilities
|
|
18
|
+
├── api/ # API clients (tasks, sessions, events, workflows, etc.)
|
|
19
|
+
├── config/ # Pydantic config models and settings
|
|
20
|
+
├── executor/ # Agent subprocess execution (base, claude, stream)
|
|
21
|
+
├── workflow/ # Multi-phase workflow execution and memory
|
|
22
|
+
├── prompt/ # Prompt building and templates
|
|
23
|
+
├── setup/ # Project setup and templates
|
|
24
|
+
├── handlers/ # Task/PRD handlers
|
|
25
|
+
└── git/ # Git utilities
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## Development
|
|
29
|
+
|
|
30
|
+
- **Python 3.12+** with **uv** package manager
|
|
31
|
+
- `uv sync` — install deps
|
|
32
|
+
- `uv run pytest` — run tests
|
|
33
|
+
- `uv run ruff check . && uv run ruff format .` — lint and format
|
|
34
|
+
- `uv run basedpyright` — type check
|
|
35
|
+
|
|
36
|
+
## Conventions
|
|
37
|
+
|
|
38
|
+
- Type hints on all function signatures
|
|
39
|
+
- Pydantic v2 for data models and config
|
|
40
|
+
- Async/await for I/O (HTTP, subprocess)
|
|
41
|
+
- `loguru` for logging
|
|
42
|
+
- Specific exception classes (no bare `except`)
|
|
43
|
+
- Absolute imports (`from steerdev_agent.config.models import ...`)
|
|
44
|
+
- Import order: stdlib, third-party, local
|
|
45
|
+
|
|
46
|
+
## Key Integration Points
|
|
47
|
+
|
|
48
|
+
- **steerdev.com API**: Bearer auth via `STEERDEV_API_KEY`. Events POSTed to `/api/v1/sessions/{id}/events`.
|
|
49
|
+
- **Executor**: Launches agents as subprocesses with `--output-format stream-json`. Parses newline-delimited JSON events.
|
|
50
|
+
- **Config**: YAML config file + environment variable overrides.
|
|
51
|
+
|
|
52
|
+
## Environment Variables
|
|
53
|
+
|
|
54
|
+
| Variable | Purpose |
|
|
55
|
+
| --- | --- |
|
|
56
|
+
| `STEERDEV_API_KEY` | API authentication |
|
|
57
|
+
| `STEERDEV_PROJECT_ID` | Default project |
|
|
58
|
+
| `STEERDEV_PROVIDER` | Harness provider: `claude` (default), `pi`, `openai-codex`, `acp:<agent>` |
|
|
59
|
+
| `STEERDEV_ACP_HARNESS` | ACP agent name when the provider is bare `acp` (equivalent to `--acp-agent`) |
|
|
60
|
+
| `CLAUDE_CODE_OAUTH_TOKEN` / `ANTHROPIC_API_KEY` | Claude credentials (sandbox-injected; locally use `claude login` instead) |
|
|
61
|
+
| `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `OPENROUTER_API_KEY` / `GEMINI_API_KEY` | pi credentials — whichever matches the selected model's provider (sandbox-injected; locally use `pi` + `/login`) |
|
|
62
|
+
| `OPENAI_API_KEY` | Codex credentials for `openai-codex` (sandbox-injected) |
|
|
63
|
+
| Per-harness (e.g. `GEMINI_API_KEY` for `acp:gemini`) | ACP credentials — declared per agent in the registry (`credential_env`) |
|
|
64
|
+
|
|
65
|
+
## Providers
|
|
66
|
+
|
|
67
|
+
The agent supports multiple harness providers via `--provider` (or `STEERDEV_PROVIDER`):
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
steerdev run --provider claude --project-id abc123 # default (Claude Code)
|
|
71
|
+
steerdev run --provider pi --project-id abc123 # pi.dev coding agent
|
|
72
|
+
steerdev run --provider acp:gemini --project-id abc123 # any ACP harness (Gemini CLI here)
|
|
73
|
+
steerdev run --provider openai-codex --project-id abc123 # stub (not yet wired)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
`claude` (Claude Code) and `pi` (the [pi.dev](https://pi.dev) coding agent) are
|
|
77
|
+
wired end-to-end. `pi` is launched headless as `pi --mode json "<prompt>"`, with
|
|
78
|
+
resume via `--session`, model via `--model`, and tool allow/deny lists via
|
|
79
|
+
`--tools`/`--exclude-tools`; see `executor/pi.py` and `executor/pi_stream.py`.
|
|
80
|
+
`openai-codex` is a clearly-stubbed seam (`executor/codex.py`) that fails fast
|
|
81
|
+
with a "not yet supported" message.
|
|
82
|
+
|
|
83
|
+
### ACP harnesses (`acp:<agent>`)
|
|
84
|
+
|
|
85
|
+
`acp:<agent>` drives **any** harness speaking the
|
|
86
|
+
[Agent Client Protocol](https://agentclientprotocol.com) (JSON-RPC 2.0 over
|
|
87
|
+
stdio) through a single executor — steerdev acts as the ACP *Client*
|
|
88
|
+
(filesystem, terminals, permissions) and the harness is the ACP *Agent*.
|
|
89
|
+
Built-in registry entries (`executor/acp_registry.py`): `acp:gemini`
|
|
90
|
+
(Gemini CLI via `gemini --experimental-acp`), `acp:claude-code` (via
|
|
91
|
+
`npx @zed-industries/claude-code-acp`), `acp:goose` (`goose acp`).
|
|
92
|
+
|
|
93
|
+
Adding a new harness requires **no code** — declare it under `acp.agents` in
|
|
94
|
+
`steerdev.yaml`:
|
|
95
|
+
|
|
96
|
+
```yaml
|
|
97
|
+
acp:
|
|
98
|
+
# default agent for `--provider acp`
|
|
99
|
+
agent: gemini
|
|
100
|
+
# auto_approve_all (default) | auto_approve_workdir | read_only | escalate
|
|
101
|
+
permission_policy: auto_approve_all
|
|
102
|
+
agents:
|
|
103
|
+
myagent:
|
|
104
|
+
name: myagent
|
|
105
|
+
command: my-acp-agent
|
|
106
|
+
args: ["--serve"]
|
|
107
|
+
credential_env: ["MY_AGENT_API_KEY"]
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Key modules: `executor/acp.py` (`ACPExecutor` — spawn, initialize,
|
|
111
|
+
session/new|load, prompt), `executor/acp_client.py` (`SteerdevAcpClient` +
|
|
112
|
+
`AcpPermissionPolicy` — fs/terminal/permission callbacks), `executor/acp_stream.py`
|
|
113
|
+
(ACP `session/update` → canonical `EventType` translation), `executor/acp_spec.py`
|
|
114
|
+
+ `executor/acp_registry.py` (declarative launch specs). ACP turns end with a
|
|
115
|
+
`stopReason`, not an exit code — `wait()` synthesizes one (nonzero only on
|
|
116
|
+
refusal/error).
|
|
117
|
+
|
|
118
|
+
Credentials arrive via ENV (the sandbox bootstrap injects them); the agent never
|
|
119
|
+
fetches credentials itself. For providers with a persisted local login (`claude`,
|
|
120
|
+
`pi`, and ACP agents with `requires_local_login`) a missing credential env var
|
|
121
|
+
only warns; for the rest the matching env var must be present or the command
|
|
122
|
+
hard-fails.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: steerdev
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.62
|
|
4
4
|
Summary: Backend task runner for steerdev.com - orchestrates CLI coding agents with activity reporting
|
|
5
5
|
Project-URL: Homepage, https://github.com/pentoai/steerdev-agent
|
|
6
6
|
Project-URL: Repository, https://github.com/pentoai/steerdev-agent
|
|
@@ -16,6 +16,7 @@ Classifier: Programming Language :: Python :: 3.12
|
|
|
16
16
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
17
17
|
Classifier: Topic :: Terminals
|
|
18
18
|
Requires-Python: >=3.12
|
|
19
|
+
Requires-Dist: agent-client-protocol<0.11,>=0.10
|
|
19
20
|
Requires-Dist: httpx>=0.27.0
|
|
20
21
|
Requires-Dist: loguru>=0.7.3
|
|
21
22
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
@@ -43,7 +44,7 @@ Task runner for [steerdev.com](https://steerdev.com) — orchestrates AI coding
|
|
|
43
44
|
|
|
44
45
|
## What It Does
|
|
45
46
|
|
|
46
|
-
SteerDev Agent connects your AI coding agent (Claude Code
|
|
47
|
+
SteerDev Agent connects your AI coding agent (Claude Code or pi; `openai-codex` is a stub) to the steerdev.com platform:
|
|
47
48
|
|
|
48
49
|
1. **Fetches tasks** from your SteerDev project
|
|
49
50
|
2. **Builds prompts** with project context, task details, and workflow instructions
|
|
@@ -299,7 +300,7 @@ api:
|
|
|
299
300
|
project_id_env: STEERDEV_PROJECT_ID
|
|
300
301
|
|
|
301
302
|
executor:
|
|
302
|
-
type: claude # claude,
|
|
303
|
+
type: claude # claude (wired), pi (wired), openai-codex (stub)
|
|
303
304
|
permission_mode: default
|
|
304
305
|
allowed_tools: []
|
|
305
306
|
disallowed_tools: []
|
|
@@ -316,8 +317,30 @@ worktrees:
|
|
|
316
317
|
| `STEERDEV_API_KEY` | API key for steerdev.com |
|
|
317
318
|
| `STEERDEV_PROJECT_ID` | Default project ID |
|
|
318
319
|
| `STEERDEV_AGENT_NAME` | Agent name for session tracking |
|
|
320
|
+
| `STEERDEV_PROVIDER` | Harness provider: `claude` (default), `pi`, `openai-codex` |
|
|
321
|
+
| `CLAUDE_CODE_OAUTH_TOKEN` / `ANTHROPIC_API_KEY` | Claude credentials (sandbox-injected; locally use `claude login`) |
|
|
322
|
+
| `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `OPENROUTER_API_KEY` / `GEMINI_API_KEY` | pi credentials — whichever matches the selected model's provider (sandbox-injected; locally use `pi` + `/login`) |
|
|
323
|
+
| `OPENAI_API_KEY` | Codex credentials for `openai-codex` (sandbox-injected) |
|
|
319
324
|
|
|
320
|
-
> **Note:** CLI agents
|
|
325
|
+
> **Note:** Locally, CLI agents like Claude Code and pi can be logged in
|
|
326
|
+
> independently (`claude login`, or `pi` + `/login`) before running steerdev — no
|
|
327
|
+
> LLM API keys are strictly needed. In a sandbox, the bootstrap injects the
|
|
328
|
+
> per-provider credentials above; steerdev never fetches credentials itself.
|
|
329
|
+
|
|
330
|
+
### Providers
|
|
331
|
+
|
|
332
|
+
Select the harness with `--provider` (or `STEERDEV_PROVIDER`). Defaults to `claude`:
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
steerdev run --provider claude --project-id YOUR_PROJECT_ID # Claude Code
|
|
336
|
+
steerdev run --provider pi --project-id YOUR_PROJECT_ID # pi.dev coding agent
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
`claude` (Claude Code) and `pi` (the [pi.dev](https://pi.dev) coding agent) are
|
|
340
|
+
wired end-to-end. `pi` runs headless as `pi --mode json "<prompt>"` and streams
|
|
341
|
+
its JSON events back to steerdev. `openai-codex` is a clearly-stubbed seam that
|
|
342
|
+
fails fast with a "not yet supported" message, reserved for a future harness
|
|
343
|
+
protocol.
|
|
321
344
|
|
|
322
345
|
## Architecture
|
|
323
346
|
|
|
@@ -6,7 +6,7 @@ Task runner for [steerdev.com](https://steerdev.com) — orchestrates AI coding
|
|
|
6
6
|
|
|
7
7
|
## What It Does
|
|
8
8
|
|
|
9
|
-
SteerDev Agent connects your AI coding agent (Claude Code
|
|
9
|
+
SteerDev Agent connects your AI coding agent (Claude Code or pi; `openai-codex` is a stub) to the steerdev.com platform:
|
|
10
10
|
|
|
11
11
|
1. **Fetches tasks** from your SteerDev project
|
|
12
12
|
2. **Builds prompts** with project context, task details, and workflow instructions
|
|
@@ -262,7 +262,7 @@ api:
|
|
|
262
262
|
project_id_env: STEERDEV_PROJECT_ID
|
|
263
263
|
|
|
264
264
|
executor:
|
|
265
|
-
type: claude # claude,
|
|
265
|
+
type: claude # claude (wired), pi (wired), openai-codex (stub)
|
|
266
266
|
permission_mode: default
|
|
267
267
|
allowed_tools: []
|
|
268
268
|
disallowed_tools: []
|
|
@@ -279,8 +279,30 @@ worktrees:
|
|
|
279
279
|
| `STEERDEV_API_KEY` | API key for steerdev.com |
|
|
280
280
|
| `STEERDEV_PROJECT_ID` | Default project ID |
|
|
281
281
|
| `STEERDEV_AGENT_NAME` | Agent name for session tracking |
|
|
282
|
+
| `STEERDEV_PROVIDER` | Harness provider: `claude` (default), `pi`, `openai-codex` |
|
|
283
|
+
| `CLAUDE_CODE_OAUTH_TOKEN` / `ANTHROPIC_API_KEY` | Claude credentials (sandbox-injected; locally use `claude login`) |
|
|
284
|
+
| `ANTHROPIC_API_KEY` / `OPENAI_API_KEY` / `OPENROUTER_API_KEY` / `GEMINI_API_KEY` | pi credentials — whichever matches the selected model's provider (sandbox-injected; locally use `pi` + `/login`) |
|
|
285
|
+
| `OPENAI_API_KEY` | Codex credentials for `openai-codex` (sandbox-injected) |
|
|
282
286
|
|
|
283
|
-
> **Note:** CLI agents
|
|
287
|
+
> **Note:** Locally, CLI agents like Claude Code and pi can be logged in
|
|
288
|
+
> independently (`claude login`, or `pi` + `/login`) before running steerdev — no
|
|
289
|
+
> LLM API keys are strictly needed. In a sandbox, the bootstrap injects the
|
|
290
|
+
> per-provider credentials above; steerdev never fetches credentials itself.
|
|
291
|
+
|
|
292
|
+
### Providers
|
|
293
|
+
|
|
294
|
+
Select the harness with `--provider` (or `STEERDEV_PROVIDER`). Defaults to `claude`:
|
|
295
|
+
|
|
296
|
+
```bash
|
|
297
|
+
steerdev run --provider claude --project-id YOUR_PROJECT_ID # Claude Code
|
|
298
|
+
steerdev run --provider pi --project-id YOUR_PROJECT_ID # pi.dev coding agent
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
`claude` (Claude Code) and `pi` (the [pi.dev](https://pi.dev) coding agent) are
|
|
302
|
+
wired end-to-end. `pi` runs headless as `pi --mode json "<prompt>"` and streams
|
|
303
|
+
its JSON events back to steerdev. `openai-codex` is a clearly-stubbed seam that
|
|
304
|
+
fails fast with a "not yet supported" message, reserved for a future harness
|
|
305
|
+
protocol.
|
|
284
306
|
|
|
285
307
|
## Architecture
|
|
286
308
|
|