claude-task-master 0.1.9__tar.gz → 0.1.11__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.
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/PKG-INFO +31 -8
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/README.md +24 -1
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/pyproject.toml +7 -7
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/__init__.py +1 -1
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/models.py +21 -5
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/routes.py +2 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/bin/claudetm +6 -1
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/workflow.py +8 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/__init__.py +2 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent.py +7 -2
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_message.py +18 -3
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_models.py +32 -5
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_phases.py +7 -1
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/config.py +35 -2
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/orchestrator.py +131 -23
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/planner.py +8 -2
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts_planning.py +27 -1
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/state.py +1 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mcp/server.py +6 -1
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mcp/tools.py +7 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/webhooks/events.py +2 -2
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master.egg-info/PKG-INFO +31 -8
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master.egg-info/requires.txt +6 -6
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/setup.cfg +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/routes_config.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/routes_control.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/routes_repo.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/routes_webhooks.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/api/server.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/auth/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/auth/middleware.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/auth/password.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/ci_helpers.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/config.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/control.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/fix_pr.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/fix_session.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/github.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/info.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/cli_commands/mailbox.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_exceptions.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_query.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/checkpoint.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/circuit_breaker.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/config_loader.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/console.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/context_accumulator.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/control.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/conversation.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/credentials.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/hooks.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/key_listener.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/logger.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/parallel.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/plan_updater.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/pr_context.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/progress_tracker.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts_base.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts_coding_style.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts_plan_update.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts_verification.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/prompts_working.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/rate_limit.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/shutdown.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/state_backup.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/state_exceptions.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/state_file_ops.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/state_pr.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/state_recovery.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/subagents.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/task_group.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/task_runner.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/workflow_stages.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/github/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/github/client.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/github/client_ci.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/github/client_pr.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/github/exceptions.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/github/pr_cycle.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mailbox/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mailbox/merger.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mailbox/models.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mailbox/storage.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mcp/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/mcp/auth.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/server.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/utils/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/utils/debug_claude_md.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/utils/doctor.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/webhooks/__init__.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/webhooks/client.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/webhooks/config.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/wrapper.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master.egg-info/SOURCES.txt +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master.egg-info/dependency_links.txt +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master.egg-info/entry_points.txt +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master.egg-info/top_level.txt +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/tests/test_server.py +0 -0
- {claude_task_master-0.1.9 → claude_task_master-0.1.11}/tests/test_wrapper.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: claude-task-master
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11
|
|
4
4
|
Summary: Autonomous task orchestration system that keeps Claude working until a goal is achieved
|
|
5
5
|
Author: Claude Task Master Team
|
|
6
6
|
License-Expression: MIT
|
|
@@ -19,15 +19,15 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
|
19
19
|
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
20
20
|
Requires-Python: >=3.12
|
|
21
21
|
Description-Content-Type: text/markdown
|
|
22
|
-
Requires-Dist: claude-agent-sdk>=0.1.
|
|
22
|
+
Requires-Dist: claude-agent-sdk>=0.1.30
|
|
23
23
|
Requires-Dist: typer>=0.12.0
|
|
24
24
|
Requires-Dist: pydantic>=2.0.0
|
|
25
|
-
Requires-Dist: rich>=
|
|
25
|
+
Requires-Dist: rich>=14.3.2
|
|
26
26
|
Requires-Dist: httpx>=0.27.0
|
|
27
27
|
Provides-Extra: mcp
|
|
28
|
-
Requires-Dist: mcp>=1.
|
|
28
|
+
Requires-Dist: mcp>=1.26.0; extra == "mcp"
|
|
29
29
|
Provides-Extra: api
|
|
30
|
-
Requires-Dist: fastapi>=0.
|
|
30
|
+
Requires-Dist: fastapi>=0.128.1; extra == "api"
|
|
31
31
|
Requires-Dist: uvicorn[standard]>=0.24.0; extra == "api"
|
|
32
32
|
Requires-Dist: passlib[bcrypt]>=1.7.4; extra == "api"
|
|
33
33
|
Requires-Dist: bcrypt<4.1.0,>=4.0.0; extra == "api"
|
|
@@ -37,8 +37,8 @@ Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
|
37
37
|
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
38
38
|
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
39
39
|
Requires-Dist: pytest-timeout>=2.4.0; extra == "dev"
|
|
40
|
-
Requires-Dist: hypothesis>=6.
|
|
41
|
-
Requires-Dist: ruff>=0.
|
|
40
|
+
Requires-Dist: hypothesis>=6.151.5; extra == "dev"
|
|
41
|
+
Requires-Dist: ruff>=0.15.0; extra == "dev"
|
|
42
42
|
Requires-Dist: mypy>=1.9.0; extra == "dev"
|
|
43
43
|
Provides-Extra: all
|
|
44
44
|
Requires-Dist: claude-task-master[api,dev,mcp]; extra == "all"
|
|
@@ -295,9 +295,14 @@ This creates `.claude-task-master/config.json`:
|
|
|
295
295
|
},
|
|
296
296
|
"models": {
|
|
297
297
|
"sonnet": "claude-sonnet-4-5-20250929",
|
|
298
|
-
"opus": "claude-opus-4-
|
|
298
|
+
"opus": "claude-opus-4-6",
|
|
299
299
|
"haiku": "claude-haiku-4-5-20251001"
|
|
300
300
|
},
|
|
301
|
+
"context_windows": {
|
|
302
|
+
"opus": 200000,
|
|
303
|
+
"sonnet": 200000,
|
|
304
|
+
"haiku": 200000
|
|
305
|
+
},
|
|
301
306
|
"git": {
|
|
302
307
|
"target_branch": "main",
|
|
303
308
|
"auto_push": true
|
|
@@ -305,6 +310,15 @@ This creates `.claude-task-master/config.json`:
|
|
|
305
310
|
}
|
|
306
311
|
```
|
|
307
312
|
|
|
313
|
+
> **Note:** Opus 4.6 and Sonnet 4.5 support a 1M token context window in beta (**tier 4+** API access required). If you have tier 4+ access, you can increase the context windows:
|
|
314
|
+
> ```json
|
|
315
|
+
> "context_windows": {
|
|
316
|
+
> "opus": 1000000,
|
|
317
|
+
> "sonnet": 1000000,
|
|
318
|
+
> "haiku": 200000
|
|
319
|
+
> }
|
|
320
|
+
> ```
|
|
321
|
+
|
|
308
322
|
### Environment Variables
|
|
309
323
|
|
|
310
324
|
The config file sets these environment variables before Python starts:
|
|
@@ -390,6 +404,7 @@ claudetm start "Your goal here" [OPTIONS]
|
|
|
390
404
|
| `--model` | Model to use (sonnet, opus, haiku) | sonnet |
|
|
391
405
|
| `--auto-merge/--no-auto-merge` | Auto-merge PRs when ready | True |
|
|
392
406
|
| `--max-sessions` | Limit number of sessions | unlimited |
|
|
407
|
+
| `--prs` | Limit number of PRs to create | unlimited |
|
|
393
408
|
| `--pause-on-pr` | Pause after creating PR | False |
|
|
394
409
|
|
|
395
410
|
### Common Workflows
|
|
@@ -404,6 +419,10 @@ claudetm start "Refactor auth system" --model opus --no-auto-merge
|
|
|
404
419
|
# Limited sessions to prevent runaway
|
|
405
420
|
claudetm start "Fix bug in parser" --max-sessions 5
|
|
406
421
|
|
|
422
|
+
# Limit number of PRs (forces everything into fewer PRs)
|
|
423
|
+
claudetm start "Add user dashboard" --prs 1
|
|
424
|
+
claudetm start "Implement notifications" --prs 3 --max-sessions 10
|
|
425
|
+
|
|
407
426
|
# Monitor progress
|
|
408
427
|
watch -n 5 'claudetm status'
|
|
409
428
|
|
|
@@ -435,6 +454,10 @@ claudetm start "Add dark mode toggle to settings" --model opus
|
|
|
435
454
|
# Refactoring
|
|
436
455
|
claudetm start "Refactor API client to use async/await" --max-sessions 5
|
|
437
456
|
|
|
457
|
+
# Limit PRs for focused changes
|
|
458
|
+
claudetm start "Add user authentication" --prs 1
|
|
459
|
+
claudetm start "Build admin dashboard" --prs 2 --max-sessions 8
|
|
460
|
+
|
|
438
461
|
# Documentation
|
|
439
462
|
claudetm start "Add API documentation and examples"
|
|
440
463
|
```
|
|
@@ -250,9 +250,14 @@ This creates `.claude-task-master/config.json`:
|
|
|
250
250
|
},
|
|
251
251
|
"models": {
|
|
252
252
|
"sonnet": "claude-sonnet-4-5-20250929",
|
|
253
|
-
"opus": "claude-opus-4-
|
|
253
|
+
"opus": "claude-opus-4-6",
|
|
254
254
|
"haiku": "claude-haiku-4-5-20251001"
|
|
255
255
|
},
|
|
256
|
+
"context_windows": {
|
|
257
|
+
"opus": 200000,
|
|
258
|
+
"sonnet": 200000,
|
|
259
|
+
"haiku": 200000
|
|
260
|
+
},
|
|
256
261
|
"git": {
|
|
257
262
|
"target_branch": "main",
|
|
258
263
|
"auto_push": true
|
|
@@ -260,6 +265,15 @@ This creates `.claude-task-master/config.json`:
|
|
|
260
265
|
}
|
|
261
266
|
```
|
|
262
267
|
|
|
268
|
+
> **Note:** Opus 4.6 and Sonnet 4.5 support a 1M token context window in beta (**tier 4+** API access required). If you have tier 4+ access, you can increase the context windows:
|
|
269
|
+
> ```json
|
|
270
|
+
> "context_windows": {
|
|
271
|
+
> "opus": 1000000,
|
|
272
|
+
> "sonnet": 1000000,
|
|
273
|
+
> "haiku": 200000
|
|
274
|
+
> }
|
|
275
|
+
> ```
|
|
276
|
+
|
|
263
277
|
### Environment Variables
|
|
264
278
|
|
|
265
279
|
The config file sets these environment variables before Python starts:
|
|
@@ -345,6 +359,7 @@ claudetm start "Your goal here" [OPTIONS]
|
|
|
345
359
|
| `--model` | Model to use (sonnet, opus, haiku) | sonnet |
|
|
346
360
|
| `--auto-merge/--no-auto-merge` | Auto-merge PRs when ready | True |
|
|
347
361
|
| `--max-sessions` | Limit number of sessions | unlimited |
|
|
362
|
+
| `--prs` | Limit number of PRs to create | unlimited |
|
|
348
363
|
| `--pause-on-pr` | Pause after creating PR | False |
|
|
349
364
|
|
|
350
365
|
### Common Workflows
|
|
@@ -359,6 +374,10 @@ claudetm start "Refactor auth system" --model opus --no-auto-merge
|
|
|
359
374
|
# Limited sessions to prevent runaway
|
|
360
375
|
claudetm start "Fix bug in parser" --max-sessions 5
|
|
361
376
|
|
|
377
|
+
# Limit number of PRs (forces everything into fewer PRs)
|
|
378
|
+
claudetm start "Add user dashboard" --prs 1
|
|
379
|
+
claudetm start "Implement notifications" --prs 3 --max-sessions 10
|
|
380
|
+
|
|
362
381
|
# Monitor progress
|
|
363
382
|
watch -n 5 'claudetm status'
|
|
364
383
|
|
|
@@ -390,6 +409,10 @@ claudetm start "Add dark mode toggle to settings" --model opus
|
|
|
390
409
|
# Refactoring
|
|
391
410
|
claudetm start "Refactor API client to use async/await" --max-sessions 5
|
|
392
411
|
|
|
412
|
+
# Limit PRs for focused changes
|
|
413
|
+
claudetm start "Add user authentication" --prs 1
|
|
414
|
+
claudetm start "Build admin dashboard" --prs 2 --max-sessions 8
|
|
415
|
+
|
|
393
416
|
# Documentation
|
|
394
417
|
claudetm start "Add API documentation and examples"
|
|
395
418
|
```
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "claude-task-master"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.11"
|
|
8
8
|
description = "Autonomous task orchestration system that keeps Claude working until a goal is achieved"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.12"
|
|
@@ -24,10 +24,10 @@ classifiers = [
|
|
|
24
24
|
]
|
|
25
25
|
|
|
26
26
|
dependencies = [
|
|
27
|
-
"claude-agent-sdk>=0.1.
|
|
27
|
+
"claude-agent-sdk>=0.1.30",
|
|
28
28
|
"typer>=0.12.0",
|
|
29
29
|
"pydantic>=2.0.0",
|
|
30
|
-
"rich>=
|
|
30
|
+
"rich>=14.3.2",
|
|
31
31
|
"httpx>=0.27.0",
|
|
32
32
|
]
|
|
33
33
|
|
|
@@ -39,9 +39,9 @@ Issues = "https://github.com/developerz-ai/claude-task-master/issues"
|
|
|
39
39
|
Changelog = "https://github.com/developerz-ai/claude-task-master/blob/main/CHANGELOG.md"
|
|
40
40
|
|
|
41
41
|
[project.optional-dependencies]
|
|
42
|
-
mcp = ["mcp>=1.
|
|
42
|
+
mcp = ["mcp>=1.26.0"]
|
|
43
43
|
api = [
|
|
44
|
-
"fastapi>=0.
|
|
44
|
+
"fastapi>=0.128.1",
|
|
45
45
|
"uvicorn[standard]>=0.24.0",
|
|
46
46
|
# Note: passlib (last release: 1.7.4, Oct 2020) is unmaintained but has no known CVEs.
|
|
47
47
|
# It's widely used and bcrypt is timing-safe. Consider argon2-cffi as future alternative.
|
|
@@ -54,8 +54,8 @@ dev = [
|
|
|
54
54
|
"pytest-cov>=4.1.0",
|
|
55
55
|
"pytest-asyncio>=0.23.0",
|
|
56
56
|
"pytest-timeout>=2.4.0",
|
|
57
|
-
"hypothesis>=6.
|
|
58
|
-
"ruff>=0.
|
|
57
|
+
"hypothesis>=6.151.5",
|
|
58
|
+
"ruff>=0.15.0",
|
|
59
59
|
"mypy>=1.9.0",
|
|
60
60
|
]
|
|
61
61
|
all = [
|
|
@@ -48,7 +48,7 @@ Usage:
|
|
|
48
48
|
from __future__ import annotations
|
|
49
49
|
|
|
50
50
|
from datetime import datetime
|
|
51
|
-
from enum import Enum
|
|
51
|
+
from enum import Enum, StrEnum
|
|
52
52
|
from typing import Any
|
|
53
53
|
|
|
54
54
|
from pydantic import BaseModel, Field
|
|
@@ -58,7 +58,7 @@ from pydantic import BaseModel, Field
|
|
|
58
58
|
# =============================================================================
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
class TaskStatus(
|
|
61
|
+
class TaskStatus(StrEnum):
|
|
62
62
|
"""Valid task status values."""
|
|
63
63
|
|
|
64
64
|
PLANNING = "planning"
|
|
@@ -70,7 +70,7 @@ class TaskStatus(str, Enum):
|
|
|
70
70
|
FAILED = "failed"
|
|
71
71
|
|
|
72
72
|
|
|
73
|
-
class WorkflowStage(
|
|
73
|
+
class WorkflowStage(StrEnum):
|
|
74
74
|
"""Valid workflow stage values for PR lifecycle."""
|
|
75
75
|
|
|
76
76
|
WORKING = "working"
|
|
@@ -83,7 +83,7 @@ class WorkflowStage(str, Enum):
|
|
|
83
83
|
MERGED = "merged"
|
|
84
84
|
|
|
85
85
|
|
|
86
|
-
class LogLevel(
|
|
86
|
+
class LogLevel(StrEnum):
|
|
87
87
|
"""Valid log level values."""
|
|
88
88
|
|
|
89
89
|
QUIET = "quiet"
|
|
@@ -91,7 +91,7 @@ class LogLevel(str, Enum):
|
|
|
91
91
|
VERBOSE = "verbose"
|
|
92
92
|
|
|
93
93
|
|
|
94
|
-
class LogFormat(
|
|
94
|
+
class LogFormat(StrEnum):
|
|
95
95
|
"""Valid log format values."""
|
|
96
96
|
|
|
97
97
|
TEXT = "text"
|
|
@@ -159,6 +159,7 @@ class ConfigUpdateRequest(BaseModel):
|
|
|
159
159
|
Attributes:
|
|
160
160
|
auto_merge: Whether to auto-merge PRs when approved.
|
|
161
161
|
max_sessions: Maximum number of work sessions before pausing.
|
|
162
|
+
max_prs: Maximum number of pull requests to create.
|
|
162
163
|
pause_on_pr: Whether to pause after creating PR for manual review.
|
|
163
164
|
enable_checkpointing: Whether to enable state checkpointing.
|
|
164
165
|
log_level: Log level (quiet, normal, verbose).
|
|
@@ -176,6 +177,12 @@ class ConfigUpdateRequest(BaseModel):
|
|
|
176
177
|
le=1000,
|
|
177
178
|
description="Maximum number of work sessions before pausing",
|
|
178
179
|
)
|
|
180
|
+
max_prs: int | None = Field(
|
|
181
|
+
default=None,
|
|
182
|
+
ge=1,
|
|
183
|
+
le=100,
|
|
184
|
+
description="Maximum number of pull requests to create",
|
|
185
|
+
)
|
|
179
186
|
pause_on_pr: bool | None = Field(
|
|
180
187
|
default=None,
|
|
181
188
|
description="Whether to pause after creating PR for manual review",
|
|
@@ -228,6 +235,7 @@ class TaskInitRequest(BaseModel):
|
|
|
228
235
|
model: Model to use (opus, sonnet, haiku).
|
|
229
236
|
auto_merge: Whether to auto-merge PRs when approved.
|
|
230
237
|
max_sessions: Max work sessions before pausing.
|
|
238
|
+
max_prs: Max pull requests to create.
|
|
231
239
|
pause_on_pr: Pause after creating PR for manual review.
|
|
232
240
|
"""
|
|
233
241
|
|
|
@@ -253,6 +261,12 @@ class TaskInitRequest(BaseModel):
|
|
|
253
261
|
le=1000,
|
|
254
262
|
description="Maximum number of work sessions before pausing",
|
|
255
263
|
)
|
|
264
|
+
max_prs: int | None = Field(
|
|
265
|
+
default=None,
|
|
266
|
+
ge=1,
|
|
267
|
+
le=100,
|
|
268
|
+
description="Maximum number of pull requests to create",
|
|
269
|
+
)
|
|
256
270
|
pause_on_pr: bool = Field(
|
|
257
271
|
default=False,
|
|
258
272
|
description="Pause after creating PR for manual review",
|
|
@@ -384,6 +398,7 @@ class TaskOptionsResponse(BaseModel):
|
|
|
384
398
|
Attributes:
|
|
385
399
|
auto_merge: Whether to auto-merge PRs when approved.
|
|
386
400
|
max_sessions: Maximum number of work sessions before pausing.
|
|
401
|
+
max_prs: Maximum number of pull requests to create.
|
|
387
402
|
pause_on_pr: Whether to pause after creating PR for manual review.
|
|
388
403
|
enable_checkpointing: Whether state checkpointing is enabled.
|
|
389
404
|
log_level: Current log level.
|
|
@@ -393,6 +408,7 @@ class TaskOptionsResponse(BaseModel):
|
|
|
393
408
|
|
|
394
409
|
auto_merge: bool
|
|
395
410
|
max_sessions: int | None
|
|
411
|
+
max_prs: int | None
|
|
396
412
|
pause_on_pr: bool
|
|
397
413
|
enable_checkpointing: bool
|
|
398
414
|
log_level: str
|
|
@@ -287,6 +287,7 @@ def create_info_router() -> APIRouter:
|
|
|
287
287
|
options=TaskOptionsResponse(
|
|
288
288
|
auto_merge=state.options.auto_merge,
|
|
289
289
|
max_sessions=state.options.max_sessions,
|
|
290
|
+
max_prs=state.options.max_prs,
|
|
290
291
|
pause_on_pr=state.options.pause_on_pr,
|
|
291
292
|
enable_checkpointing=state.options.enable_checkpointing,
|
|
292
293
|
log_level=state.options.log_level,
|
|
@@ -1068,6 +1069,7 @@ def create_task_router() -> APIRouter:
|
|
|
1068
1069
|
options = TaskOptions(
|
|
1069
1070
|
auto_merge=task_init.auto_merge,
|
|
1070
1071
|
max_sessions=task_init.max_sessions,
|
|
1072
|
+
max_prs=task_init.max_prs,
|
|
1071
1073
|
pause_on_pr=task_init.pause_on_pr,
|
|
1072
1074
|
enable_checkpointing=False, # Default to False
|
|
1073
1075
|
log_level="normal", # Default to normal
|
|
@@ -289,9 +289,14 @@ default_config = {
|
|
|
289
289
|
},
|
|
290
290
|
"models": {
|
|
291
291
|
"sonnet": "claude-sonnet-4-5-20250929",
|
|
292
|
-
"opus": "claude-opus-4-
|
|
292
|
+
"opus": "claude-opus-4-6",
|
|
293
293
|
"haiku": "claude-haiku-4-5-20251001"
|
|
294
294
|
},
|
|
295
|
+
"context_windows": {
|
|
296
|
+
"opus": 200000,
|
|
297
|
+
"sonnet": 200000,
|
|
298
|
+
"haiku": 200000
|
|
299
|
+
},
|
|
295
300
|
"git": {
|
|
296
301
|
"target_branch": "main",
|
|
297
302
|
"auto_push": True
|
|
@@ -113,6 +113,11 @@ def start(
|
|
|
113
113
|
"-n",
|
|
114
114
|
help="Max work sessions before pausing (default: unlimited)",
|
|
115
115
|
),
|
|
116
|
+
max_prs: int | None = typer.Option(
|
|
117
|
+
None,
|
|
118
|
+
"--prs",
|
|
119
|
+
help="Max pull requests to create (default: unlimited)",
|
|
120
|
+
),
|
|
116
121
|
pause_on_pr: bool = typer.Option(
|
|
117
122
|
False,
|
|
118
123
|
"--pause-on-pr",
|
|
@@ -158,6 +163,8 @@ def start(
|
|
|
158
163
|
claudetm start "Add dark mode toggle"
|
|
159
164
|
claudetm start "Fix bug #123" -m opus --no-auto-merge
|
|
160
165
|
claudetm start "Refactor auth" -n 5 --pause-on-pr
|
|
166
|
+
claudetm start "Add user auth" --prs 1
|
|
167
|
+
claudetm start "Implement dashboard" --prs 3 --max-sessions 10
|
|
161
168
|
claudetm start "Debug issue" -l verbose --log-format json
|
|
162
169
|
claudetm start "Deploy feature" --webhook-url https://example.com/hooks
|
|
163
170
|
|
|
@@ -212,6 +219,7 @@ def start(
|
|
|
212
219
|
options = TaskOptions(
|
|
213
220
|
auto_merge=auto_merge,
|
|
214
221
|
max_sessions=max_sessions,
|
|
222
|
+
max_prs=max_prs,
|
|
215
223
|
pause_on_pr=pause_on_pr,
|
|
216
224
|
enable_checkpointing=enable_checkpointing,
|
|
217
225
|
log_level=log_level.lower(),
|
{claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/__init__.py
RENAMED
|
@@ -24,6 +24,7 @@ from claude_task_master.core.agent_models import (
|
|
|
24
24
|
ModelType,
|
|
25
25
|
TaskComplexity,
|
|
26
26
|
ToolConfig,
|
|
27
|
+
get_context_window,
|
|
27
28
|
get_tools_for_phase,
|
|
28
29
|
parse_task_complexity,
|
|
29
30
|
)
|
|
@@ -246,6 +247,7 @@ __all__ = [
|
|
|
246
247
|
"MODEL_CONTEXT_WINDOWS",
|
|
247
248
|
"MODEL_CONTEXT_WINDOWS_STANDARD",
|
|
248
249
|
"DEFAULT_COMPACT_THRESHOLD_PERCENT",
|
|
250
|
+
"get_context_window",
|
|
249
251
|
# Rate limit classes
|
|
250
252
|
"RateLimitConfig",
|
|
251
253
|
# Checkpoint exceptions
|
|
@@ -171,7 +171,11 @@ class AgentWrapper:
|
|
|
171
171
|
)
|
|
172
172
|
|
|
173
173
|
def run_planning_phase(
|
|
174
|
-
self,
|
|
174
|
+
self,
|
|
175
|
+
goal: str,
|
|
176
|
+
context: str = "",
|
|
177
|
+
coding_style: str | None = None,
|
|
178
|
+
max_prs: int | None = None,
|
|
175
179
|
) -> dict[str, Any]:
|
|
176
180
|
"""Run planning phase with read-only tools.
|
|
177
181
|
|
|
@@ -182,10 +186,11 @@ class AgentWrapper:
|
|
|
182
186
|
goal: The goal to plan for.
|
|
183
187
|
context: Additional context for planning.
|
|
184
188
|
coding_style: Optional coding style guide to inject into prompt.
|
|
189
|
+
max_prs: Optional maximum number of PRs to create.
|
|
185
190
|
|
|
186
191
|
Delegates to AgentPhaseExecutor for implementation.
|
|
187
192
|
"""
|
|
188
|
-
return self._phase_executor.run_planning_phase(goal, context, coding_style)
|
|
193
|
+
return self._phase_executor.run_planning_phase(goal, context, coding_style, max_prs)
|
|
189
194
|
|
|
190
195
|
def generate_coding_style(self) -> dict[str, Any]:
|
|
191
196
|
"""Generate a coding style guide by analyzing the codebase.
|
{claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_message.py
RENAMED
|
@@ -79,10 +79,25 @@ class MessageProcessor:
|
|
|
79
79
|
self.logger.log_tool_result(block.tool_use_id, "completed")
|
|
80
80
|
|
|
81
81
|
# Collect final result from ResultMessage
|
|
82
|
+
# Important: Only use message.result if we have no accumulated text,
|
|
83
|
+
# or if message.result contains content not in our accumulated text.
|
|
84
|
+
# This preserves verification markers (VERIFICATION_RESULT: PASS/FAIL)
|
|
85
|
+
# that may be output in earlier TextBlocks.
|
|
82
86
|
if message_type == "ResultMessage":
|
|
83
|
-
if hasattr(message, "result"):
|
|
84
|
-
|
|
85
|
-
|
|
87
|
+
if hasattr(message, "result") and message.result:
|
|
88
|
+
# If we have no accumulated text, use the result
|
|
89
|
+
if not result_text.strip():
|
|
90
|
+
result_text = message.result
|
|
91
|
+
console.newline() # Add newline after completion
|
|
92
|
+
# If message.result contains verification markers we're missing,
|
|
93
|
+
# prefer message.result (it might be more complete)
|
|
94
|
+
elif (
|
|
95
|
+
"verification_result:" in message.result.lower()
|
|
96
|
+
and "verification_result:" not in result_text.lower()
|
|
97
|
+
):
|
|
98
|
+
result_text = message.result
|
|
99
|
+
console.newline() # Add newline after completion
|
|
100
|
+
# Otherwise keep our accumulated text (it has the markers)
|
|
86
101
|
|
|
87
102
|
return result_text
|
|
88
103
|
|
{claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_models.py
RENAMED
|
@@ -91,12 +91,15 @@ class ToolConfig(Enum):
|
|
|
91
91
|
# Constants
|
|
92
92
|
# =============================================================================
|
|
93
93
|
|
|
94
|
-
# Model context window sizes (tokens) for auto-compact threshold calculation
|
|
95
|
-
#
|
|
96
|
-
#
|
|
94
|
+
# Model context window sizes (tokens) for auto-compact threshold calculation.
|
|
95
|
+
# These are defaults; users can override via config.json "context_windows" section.
|
|
96
|
+
# Opus 4.6 and Sonnet 4.5 support 1M context (beta, tier 4+ users).
|
|
97
|
+
# Note: The Agent SDK handles the `context-1m-2025-08-07` beta header internally.
|
|
98
|
+
# These values are only used to calculate when to trigger context compaction.
|
|
99
|
+
# See: https://platform.claude.com/docs/en/build-with-claude/context-windows
|
|
97
100
|
MODEL_CONTEXT_WINDOWS = {
|
|
98
|
-
ModelType.OPUS:
|
|
99
|
-
ModelType.SONNET: 1_000_000, # Claude Sonnet 4
|
|
101
|
+
ModelType.OPUS: 1_000_000, # Claude Opus 4.6: 1M context (beta, tier 4+)
|
|
102
|
+
ModelType.SONNET: 1_000_000, # Claude Sonnet 4.5: 1M context (beta, tier 4+)
|
|
100
103
|
ModelType.HAIKU: 200_000, # Claude Haiku 4.5: 200K context
|
|
101
104
|
}
|
|
102
105
|
|
|
@@ -107,6 +110,30 @@ MODEL_CONTEXT_WINDOWS_STANDARD = {
|
|
|
107
110
|
ModelType.HAIKU: 200_000,
|
|
108
111
|
}
|
|
109
112
|
|
|
113
|
+
|
|
114
|
+
def get_context_window(
|
|
115
|
+
model: ModelType,
|
|
116
|
+
config: ClaudeTaskMasterConfig | None = None,
|
|
117
|
+
) -> int:
|
|
118
|
+
"""Get context window size for a model, reading from config if available.
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
model: The model type.
|
|
122
|
+
config: Optional config object. If None, uses hardcoded defaults.
|
|
123
|
+
|
|
124
|
+
Returns:
|
|
125
|
+
Context window size in tokens.
|
|
126
|
+
"""
|
|
127
|
+
if config is not None:
|
|
128
|
+
context_map = {
|
|
129
|
+
ModelType.OPUS: config.context_windows.opus,
|
|
130
|
+
ModelType.SONNET: config.context_windows.sonnet,
|
|
131
|
+
ModelType.HAIKU: config.context_windows.haiku,
|
|
132
|
+
}
|
|
133
|
+
return context_map.get(model, MODEL_CONTEXT_WINDOWS[model])
|
|
134
|
+
return MODEL_CONTEXT_WINDOWS[model]
|
|
135
|
+
|
|
136
|
+
|
|
110
137
|
# Default compact threshold as percentage of context window
|
|
111
138
|
DEFAULT_COMPACT_THRESHOLD_PERCENT = 0.85 # Compact at 85% usage
|
|
112
139
|
|
{claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/agent_phases.py
RENAMED
|
@@ -111,7 +111,11 @@ class AgentPhaseExecutor:
|
|
|
111
111
|
self.process_message_func = process_message_func
|
|
112
112
|
|
|
113
113
|
def run_planning_phase(
|
|
114
|
-
self,
|
|
114
|
+
self,
|
|
115
|
+
goal: str,
|
|
116
|
+
context: str = "",
|
|
117
|
+
coding_style: str | None = None,
|
|
118
|
+
max_prs: int | None = None,
|
|
115
119
|
) -> dict[str, Any]:
|
|
116
120
|
"""Run planning phase with read-only tools.
|
|
117
121
|
|
|
@@ -122,6 +126,7 @@ class AgentPhaseExecutor:
|
|
|
122
126
|
goal: The goal to plan for.
|
|
123
127
|
context: Additional context for planning.
|
|
124
128
|
coding_style: Optional coding style guide to inject into prompt.
|
|
129
|
+
max_prs: Optional maximum number of PRs to create.
|
|
125
130
|
|
|
126
131
|
Returns:
|
|
127
132
|
Dict with 'plan', 'criteria', and 'raw_output' keys.
|
|
@@ -131,6 +136,7 @@ class AgentPhaseExecutor:
|
|
|
131
136
|
goal=goal,
|
|
132
137
|
context=context if context else None,
|
|
133
138
|
coding_style=coding_style,
|
|
139
|
+
max_prs=max_prs,
|
|
134
140
|
)
|
|
135
141
|
|
|
136
142
|
# Always use Opus for planning (smartest model)
|
{claude_task_master-0.1.9 → claude_task_master-0.1.11}/src/claude_task_master/core/config.py
RENAMED
|
@@ -71,7 +71,7 @@ class ModelConfig(BaseModel):
|
|
|
71
71
|
description="Model name for 'sonnet' (balanced). Overridden by CLAUDETM_MODEL_SONNET.",
|
|
72
72
|
)
|
|
73
73
|
opus: str = Field(
|
|
74
|
-
default="claude-opus-4-
|
|
74
|
+
default="claude-opus-4-6",
|
|
75
75
|
description="Model name for 'opus' (smartest). Overridden by CLAUDETM_MODEL_OPUS.",
|
|
76
76
|
)
|
|
77
77
|
haiku: str = Field(
|
|
@@ -97,6 +97,30 @@ class GitConfig(BaseModel):
|
|
|
97
97
|
)
|
|
98
98
|
|
|
99
99
|
|
|
100
|
+
class ContextWindowsConfig(BaseModel):
|
|
101
|
+
"""Context window sizes per model (in tokens).
|
|
102
|
+
|
|
103
|
+
Controls the max context window size used for auto-compact threshold calculation.
|
|
104
|
+
Opus 4.6 and Sonnet 4.5 support 1M context in beta (tier 4+ users).
|
|
105
|
+
Users on lower tiers should set these to 200000.
|
|
106
|
+
|
|
107
|
+
To enable 1M context via the API, use the beta header: context-1m-2025-08-07
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
opus: int = Field(
|
|
111
|
+
default=200_000,
|
|
112
|
+
description="Opus context window size in tokens. 200000 (standard) or 1000000 (beta, tier 4+).",
|
|
113
|
+
)
|
|
114
|
+
sonnet: int = Field(
|
|
115
|
+
default=200_000,
|
|
116
|
+
description="Sonnet context window size in tokens. 200000 (standard) or 1000000 (beta, tier 4+).",
|
|
117
|
+
)
|
|
118
|
+
haiku: int = Field(
|
|
119
|
+
default=200_000,
|
|
120
|
+
description="Haiku context window size in tokens.",
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
|
|
100
124
|
class ToolsConfig(BaseModel):
|
|
101
125
|
"""Tool configurations per execution phase.
|
|
102
126
|
|
|
@@ -144,13 +168,18 @@ class ClaudeTaskMasterConfig(BaseModel):
|
|
|
144
168
|
},
|
|
145
169
|
"models": {
|
|
146
170
|
"sonnet": "claude-sonnet-4-5-20250929",
|
|
147
|
-
"opus": "claude-opus-4-
|
|
171
|
+
"opus": "claude-opus-4-6",
|
|
148
172
|
"haiku": "claude-haiku-4-5-20251001"
|
|
149
173
|
},
|
|
150
174
|
"git": {
|
|
151
175
|
"target_branch": "main",
|
|
152
176
|
"auto_push": true
|
|
153
177
|
},
|
|
178
|
+
"context_windows": {
|
|
179
|
+
"opus": 200000,
|
|
180
|
+
"sonnet": 200000,
|
|
181
|
+
"haiku": 200000
|
|
182
|
+
},
|
|
154
183
|
"tools": {
|
|
155
184
|
"planning": ["Read", "Glob", "Grep", "Bash", "WebFetch", "WebSearch"],
|
|
156
185
|
"verification": ["Read", "Glob", "Grep", "Bash"],
|
|
@@ -172,6 +201,10 @@ class ClaudeTaskMasterConfig(BaseModel):
|
|
|
172
201
|
default_factory=ModelConfig,
|
|
173
202
|
description="Model name mappings.",
|
|
174
203
|
)
|
|
204
|
+
context_windows: ContextWindowsConfig = Field(
|
|
205
|
+
default_factory=ContextWindowsConfig,
|
|
206
|
+
description="Context window sizes per model (tokens). Set to 200000 if not on tier 4+.",
|
|
207
|
+
)
|
|
175
208
|
git: GitConfig = Field(
|
|
176
209
|
default_factory=GitConfig,
|
|
177
210
|
description="Git configuration (target branch, auto-push).",
|