High-stakes engineering project execution for AI coding agents
Project description
Keshro
Plan and run high-stakes engineering projects with AI agents.
keshro login # authenticate and install Claude Code + Codex integrations
keshro create # scan project, create the right migration/project
keshro continue # agents execute in parallel if possible
keshro login authenticates the CLI and installs agent integrations on the current machine. For Codex, Keshro adds a managed block to ~/.codex/AGENTS.md and preserves any non-Keshro content already in that file.
Keshro is built for migrations first. It scans the repo, asks the follow-up questions that actually matter for the migration, creates the right migration or project, then coordinates agents to execute it safely.
Works with your existing coding agent. Use Claude Code or Codex for planning, migration intake, and parallel execution.
Examples:
- AWS Batch -> Airflow
- Terraform -> Pulumi
- Jenkins -> GitHub Actions
- Express -> Fastify
- Apache Iceberg -> ClickHouse
What Keshro does:
- Builds a migration-aware execution context with risks, open questions, task ordering, and acceptance criteria
- Runs agents in parallel in isolated git worktrees
- Detects live file overlap in Codex worktrees, pauses the lagging agent, and resumes after rebasing onto the winning task's changes
- Carries learnings from one task into related future tasks
- Tracks progress, decisions, rollback points, and live per-agent telemetry through execution
Create a migration or project
keshro create
Keshro scans the project, detects whether this is a migration, asks the follow-up questions that matter, and creates the right migration or project with a linked execution context.
If Keshro stops to ask follow-up questions in /keshro or another agent session, surface those questions back to the user and resume with the generated --answers-file command instead of building a giant shell command by hand.
Execute
Keshro drives the full execution loop — picks up the next task, gives the agent context, validates the result, marks it done, and moves to the next one. You don't manage it.
keshro continue
By default, keshro continue runs the next ready wave in parallel when the environment supports it. Each launched agent gets its own session ID and heartbeats live status back to Keshro, including touched files, progress messages, recent errors, and mid-task conflict detection. Use --no-parallel only when you explicitly want one task at a time.
Executors
Each task in a plan runs on an executor — the runtime that actually executes it. Two executors ship today:
-
local_claude_code(default) — a local Claude Code subprocess running inside an isolated git worktree on your machine. -
managed_agent— Anthropic's hosted Claude Managed Agents (themanaged-agents-2026-04-01beta). Runs the task in a hosted cloud container instead of a local subprocess.Setup: create an Agent and Environment in the Anthropic console, then paste the IDs into Account → Managed Agents (personal) or Workspace settings (shared). Personal config overrides workspace. Sessions run against your own Anthropic account.
Responsibility split: Keshro routes the task and mounts your repo with your GitHub token. Your Anthropic Environment owns everything else — tools, dependencies, secrets, network access. Tasks that depend on local-only files, private VPN reachability, or custom local toolchains are not portable to the managed executor; keep those on
local_claude_code.
The executor is resolved per task in this order: --executor flag → task.executor (set per-task in the plan view) → personal default → workspace default → local_claude_code as the safe fallback.
keshro continue --executor local_claude_code # Force every task in this run onto local Claude Code
keshro continue --executor managed_agent # Force every task onto Anthropic Managed Agents
keshro continue --executor local # Friendly alias
keshro continue --executor managed # Friendly alias
If a task was marked done too early, reopen it with keshro task reopen <task-id> -p <plan-id>. That clears any stale blocker and moves it back to todo by default, or you can pass --status in_progress to resume work immediately.
Monitor
keshro status
Saved team + cost context
Keshro reuses team size, seniority mix, and blended cost defaults across migrations and plans so you don't re-enter them each time. Context is scoped to the active org or your personal account.
keshro org context # Show saved team + cost context for the active org
keshro org context --clear-team # Forget saved org team context
keshro org context --clear-cost # Forget saved org cost context
keshro org context --clear-all # Forget both
keshro user context # Same, but for your personal account
keshro user context --clear-all # Clear personal team + cost context
Works with
Planning, execution, and parallel mode work with Claude Code and Codex. Both agents run in isolated git worktrees during parallel mode. If one agent is rate-limited, Keshro suggests switching and supports a saved default via keshro config set --agent ....
Cursor is supported for in-editor context via .cursorrules (keshro setup-cursor), but does not have a headless CLI, so it cannot be used as an execution agent.
Keshro can also create general projects from repos, issues, and freeform descriptions, but the primary workflow is migrations.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file keshro-0.1.39.tar.gz.
File metadata
- Download URL: keshro-0.1.39.tar.gz
- Upload date:
- Size: 161.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5343a8c45ee326b225a78368e318071a75b31022530d79ef17f1ad436b3fcc1f
|
|
| MD5 |
ad6ec8cf0eaa5d2e50512475acabea65
|
|
| BLAKE2b-256 |
1aa3351d3979822b9d6bdeacd764634e842594f02f3189ef6e16f5dc25a51383
|
Provenance
The following attestation bundles were made for keshro-0.1.39.tar.gz:
Publisher:
publish.yml on jlewitt1/keshro-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
keshro-0.1.39.tar.gz -
Subject digest:
5343a8c45ee326b225a78368e318071a75b31022530d79ef17f1ad436b3fcc1f - Sigstore transparency entry: 1310200295
- Sigstore integration time:
-
Permalink:
jlewitt1/keshro-cli@26d2d6beba2c1ac9c640680ac6ea0d8bed2b0735 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jlewitt1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26d2d6beba2c1ac9c640680ac6ea0d8bed2b0735 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file keshro-0.1.39-py3-none-any.whl.
File metadata
- Download URL: keshro-0.1.39-py3-none-any.whl
- Upload date:
- Size: 131.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bd44e7651860f44694430ad9fedd57989d6b0d09ab566017d8bf988fb033dce6
|
|
| MD5 |
ecc61c11b121da44c7ddfee11a5b9126
|
|
| BLAKE2b-256 |
96210b87a80cc9a474e3d6d5d2742a4d333aa5ed386a3eff0d376c25f00b8a0c
|
Provenance
The following attestation bundles were made for keshro-0.1.39-py3-none-any.whl:
Publisher:
publish.yml on jlewitt1/keshro-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
keshro-0.1.39-py3-none-any.whl -
Subject digest:
bd44e7651860f44694430ad9fedd57989d6b0d09ab566017d8bf988fb033dce6 - Sigstore transparency entry: 1310200373
- Sigstore integration time:
-
Permalink:
jlewitt1/keshro-cli@26d2d6beba2c1ac9c640680ac6ea0d8bed2b0735 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/jlewitt1
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@26d2d6beba2c1ac9c640680ac6ea0d8bed2b0735 -
Trigger Event:
workflow_dispatch
-
Statement type: