tsk-ai 0.7.0

AI-powered development task delegation and sandboxing tool
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.7.0]https://github.com/dtormoen/tsk/compare/v0.6.5...v0.7.0 - 2026-02-03

This version fixes mutltiple ways agents could bypass the proxy and as a result, could
potentially break workflows that relied on that ability. Agents containers now have their
own separate networks without any external access other the proxy and the proxy has a
more restrictive firewall configuration.

To help ensure that there is a way for common workflows to work, this release adds the
ability to forward specific ports to localhost so you can run local services like development
databases or service endpoints and expose those specific endpoints. This release also adds an
way to pass environment varibles to agents via the tsk.toml config file without needing to
create/edit dockerfiles.

Here is an example tsk.toml which configures `my-project` to pass env variables for Postgres
and Redis which are running on localhost:

```toml
[proxy]
host_services = [5432, 6379]  # e.g., PostgreSQL, Redis

[project.my-project]
env = [
    # Environment variables passed to the container
    { name = "DATABASE_URL", value = "postgres://tsk-proxy:5432/mydb" },
    { name = "REDIS_URL", value = "redis://tsk-proxy:6379" },
]
```

### Added

- add per-project environment variable configuration
- harden proxy container with iptables firewall and security options
- add host service TCP port forwarding via socat
- [**breaking**] implement per-container network isolation for agents

### Fixed

- correct proxy container permissions for tmpfs and squid operation

### Other

- add network isolation guide with architecture diagrams
- add network isolation test script for container security

## [0.6.5]https://github.com/dtormoen/tsk/compare/v0.6.4...v0.6.5 - 2026-02-02

### Added

- add git-town parent branch tracking support
- automatic proxy lifecycle management

### Fixed

- copy ~/.claude.json into containers before starting
- add required endpoint for tsk shell

### Other

- improve README structure and document new config options

## [0.6.4]https://github.com/dtormoen/tsk/compare/v0.6.3...v0.6.4 - 2026-02-01

### Added

- add --proxy-only flag to docker build command

### Fixed

- use different method for notifications on MacOS to prevent hang

### Other

- upgrade dependencies

## [0.6.3]https://github.com/dtormoen/tsk/compare/v0.6.2...v0.6.3 - 2025-12-13

### Added

- human-friendly Docker resource configuration
- add project-specific configuration with volume mounts
- add TOML configuration file support
- make --name optional for add and run commands

### Fixed

- provide test defaults for git config in CI environments

### Other

- add configuration file documentation to README
- resolve git author dynamically from repository
- rename TskConfig to TskEnv and TskOptions to TskConfig

## [0.6.2]https://github.com/dtormoen/tsk/compare/v0.6.1...v0.6.2 - 2025-12-03

### Added

- skip branch creation when task produces no changes
- add full git submodule support for task execution
- add sound notifications on task completion

### Fixed

- configure git identity in submodule tests for CI
- properly add uv to base image

## [0.6.1]https://github.com/dtormoen/tsk/compare/v0.6.0...v0.6.1 - 2025-11-25

### Added

- add uv to base image
- add quit-when-done mode to server start

### Fixed

- add line buffering to Docker log streaming to prevent parse errors
- resolve git fetch errors when copying repos from specific commits

### Other

- update deps
- *(docker)* simplify agent installation and environment setup

## [0.6.0]https://github.com/dtormoen/tsk/compare/v0.5.4...v0.6.0 - 2025-10-26

This release has a few large changes. First we've added
[codex](https://openai.com/codex/) support! You can now launch codex agents or even
launch multiple agents in parallel:

```bash
tsk add --type feat --name greeting --description "Add a greeting to all TSK commands" --agent claude,codex
```

This will create two tasks that are identical except for `claude` will work on one and
`codex` will work on the other. This is great for comparing the performance of different
agents.

We've also simplified TSK commands:
- `tsk debug` is now called `tsk shell`
- `tsk quick` is now called `tsk run`
- `tsk run` has been removed
- `--timeout` has been removed from a few commands as it was not actually implemented
- The `claude-code` agent has been renamed to `claude` throughout the codebase

### Added

- [**breaking**] simplify command structure for better UX
- add multi-agent support for task creation
- *(codex)* improve log processor output quality
- *(codex)* add JSON log processor with human-readable output
- add codex agent support

### Other

- reorganize and enhance README
- improve documentation
- rename claude-code agent to claude

## [0.5.4]https://github.com/dtormoen/tsk/compare/v0.5.3...v0.5.4 - 2025-10-26

### Added

- add pip and ty to python dockerfile

### Fixed

- handle terminal size and resize in debug command

### Other

- move agent layer after project layer since claude code updates frequently

## [0.5.3]https://github.com/dtormoen/tsk/compare/v0.5.2...v0.5.3 - 2025-10-21

### Fixed

- don't mount .claude.json to avoid corrupting it
- deduplicate consecutive parsing errors in Claude Code log processor
- detect lua before python

## [0.5.2]https://github.com/dtormoen/tsk/compare/v0.5.1...v0.5.2 - 2025-10-01

### Fixed

- handle empty git repositories gracefully

## [0.5.1]https://github.com/dtormoen/tsk/compare/v0.5.0...v0.5.1 - 2025-09-25

This release mainly adds a few new features:
- The outputs while agents are working are much more detailed. They include:
    - The model being used e.g. opus or sonnet
    - The sub-agent that is active
    - The full instructions and outputs of sub-agents
- Adds the ability to pipe in your instructions: `echo "Make a sweet app" | tsk add --type feat --name an-app
- Adds the ability to define a custom proxy configuration

### Added

- add stdin pipe support for task descriptions
- enhance claude-code log processor with task-aware multi-agent output tracking
- add output logging for claude-code agent debugging
- display model name in claude code log processor output
- add support for custom squid proxy configuration

### Fixed

- implement atomic file writes to prevent race conditions

### Other

- simplify Agent trait by consolidating build_command methods
- simplify DockerManager by integrating ProxyManager and using AppContext
- simplify TSK configuration by removing redundant XdgConfig struct
- simplify Docker image management interface
- remove unused additional_files functionality from Docker composer
- remove obsolete tsk-base dockerfile

## [0.5.0]https://github.com/dtormoen/tsk/compare/v0.4.1...v0.5.0 - 2025-09-08

This release should make Docker builds more reliable overall, but it does introduce a
breaking change where docker layer snippets for projects, agents, and stacks which
previously would be stored in e.g. `.tsk/dockerfiles/project/<project_name>/Dockerfile`
are now stored in `.tsk/dockerfiles/project/<project_name>.dockerfile`. See the `.tsk`
or `dockerfiles` directory in `tsk` for examples of how to structure Dockerfile snippets.

### Added

- add Docker build lock manager to prevent concurrent image builds
- implement agent version tracking for automatic Docker rebuilds
- increase CPU and memory limits to 8 CPUs and 12gb
- [**breaking**] simplify Docker image generation with Handlebars templating

### Fixed

- copy working directory versions of files including unstaged changes
- improve lua stack snippet
- allow dots and underscores in project names for Docker layer matching

### Other

- upgrade go version in docker snippet
- extract proxy management into dedicated ProxyManager module
- simplify Docker asset directory structure
- *(server)* replace TaskExecutor with TaskScheduler and WorkerPool

## [0.4.1]https://github.com/dtormoen/tsk/compare/v0.4.0...v0.4.1 - 2025-09-01

### Fixed

- handle non-JSON output gracefully in Claude Code log processor
- rework Python tech-stack to use UV with proper virtual environment
- add support for symlinks in git repository copy operations

## [0.4.0]https://github.com/dtormoen/tsk/compare/v0.3.2...v0.4.0 - 2025-08-25

This release is largely focused on refactoring which will help create a solid foundation
for future planned changes. Some notable improvements are:
- Fix that ensures proxy can be restarted (requires a `tsk docker build`)
- Fixed `tsk debug` so now you can start an interactive session with Claude in a docker 
  container or debug issues with the project docker containers you've created
- tsk checks if claude code is working before launching a container. If this step fails, 
  it typically means you've used up your subscription limits. `tsk` will now retry the 
  task once each hour rather than fail it outright. This can be used for example to 
  queue up a lot of work overnight and tsk will wait until your limit is refilled
- Unit tests are faster, no longer flaky, and are easier to properly isolate to run
  in parallel

### Added

- [**breaking**] fix debug command and add interactive agent support
- [**breaking**] add is_interactive field to Task for controlling execution mode
- add automatic retry for agent warmup failures in server mode

### Fixed

- flaky tests
- add delay to interactive commands to prevent missing initial output
- handle stale PID file in proxy container for clean restarts
- add health check to proxy container and wait for readiness
- correct Claude Code log parser to handle TodoWrite output format
- update Claude Code log processor for new JSON format
- clean up temporary instruction file when task creation is cancelled
- update justfile to better reflect CI linting behavior
- optimize warmup failure wait behavior test to run in <1 second
- remove flaky test

### Other

- enable ignored tests using AppContext and mock docker clients
- use Bollard for interactive containers instead of docker CLI
- use AppContext::builder() for test setup instead of XdgConfig::builder()
- simplify layered asset tests using DRY principles and AppContext
- prevent git config access in tests and use AppContext for test isolation
- update dependencies
- rename xdg variable names to better reflect TskConfig usage
- simplify RepoManager by using AppContext directly
- store AppContext in TaskRunner instead of rebuilding it
- simplify DockerImageManager using AppContext and DRY principles
- make executor tests deterministic and remove redundancy
- move git configuration from DockerImageManager to TskConfig
- extract TaskBuilder to separate module for better code organization
- rename XdgDirectories to TskConfig throughout codebase
- replace XdgConfig::with_paths with AppContext in all tests
- simplify test setup by leveraging AppContext's test defaults
- consolidate Config into XdgDirectories and add test-safe context creation
- replace MockAssetManager with FileSystemAssetManager in layered asset tests
- simplify debug command to use TaskManager for unified task execution
- simplify TaskRunner constructor to accept AppContext
- use copied_repo_path from Task struct to determine task directories
- consolidate TaskManager constructors into single new() method
- remove deprecated new() constructor from ClaudeCodeAgent
- pass Config through AgentProvider to eliminate direct env var access
- configure clippy to disallow env variable setting or removing
- add Config struct to centralize environment variable access
- convert RepositoryContext from trait to stateless functions
- add guidance on testing
- fix flaky warmup failure wait behavior test
- stronger wording around fixing just precommit issues
- remove MockFileSystem from file_system module
- replace MockFileSystem with temporary directories in tests
- replace MockFileSystem with temporary directories in tests
- replace MockFileSystem with temporary directories in tests
- remove repository dependency from tsk list command
- update to rust 1.89

## [0.3.2]https://github.com/dtormoen/tsk/compare/v0.3.1...v0.3.2 - 2025-08-05

### Added

- expand project Dockerfile search to include user-level config
- add bulk operations for retry and delete commands
- upgrade Docker images to Ubuntu 24.04 and resolve GID conflict

### Fixed

- ensure project layer detection uses copied repository in server mode

## [0.3.1]https://github.com/dtormoen/tsk/compare/v0.3.0...v0.3.1 - 2025-07-18

This release fixes an issue where Dockerfiles in projects could conflict with tsk's own 
Docker image generation and improves support for Go projects.

### Added

- expand proxy allowed domains for all supported language package managers

### Fixed

- prevent project Dockerfiles from overriding TSK images

## [0.3.0]https://github.com/dtormoen/tsk/compare/v0.2.0...v0.3.0 - 2025-07-09

### Added

- add logging for when container starts
- add --repo argument to add, quick, and debug commands
- make --description optional for templates without {{DESCRIPTION}} placeholder
- add "ack" task type for debugging
- implement parallel task execution with configurable workers

### Fixed

- resolve clippy warnings and improve code quality
- use task ID instead of timestamp for docker container names
- update dependency that causes server hangs
- force local installs to use the lock file
- remove duplicate task status updates causing server shutdown hang
- resolve TSK server worker management and task completion issues

### Other

- add a demo gif of tsk
- remove unused code and fix dead code warnings
- remove unused test utilities and fix dead code warnings
- remove lib target and consolidate binary-only structure
- implement human-readable branch naming format
- [**breaking**] replace timestamp-based task IDs with 8-character nanoid IDs
- rename -i/--instructions flag to -p/--prompt in CLI commands
- [**breaking**] remove log file saving feature from agents
- restructure CLI to follow noun-verb command pattern

## [0.2.0]https://github.com/dtormoen/tsk/compare/v0.1.0...v0.2.0 - 2025-07-07

### Added

- plan template includes success criteria and out of scope section
- ensure proxy image is built before task execution

### Fixed

- release storage mutex lock after task completion to prevent server deadlock
- remove rust specific language from default templates

### Other

- add comprehensive Docker builds documentation
- migrate task_manager tests from mocks to real implementations
- replace git mock implementations with integration tests
- replace git mock implementations with integration tests
- add repo_path parameter to is_git_repository method
- eliminate unsafe blocks in XdgDirectories tests
- add project specific task templates that mention rust best practices
- update install instructions in README.md

## [0.1.0]https://github.com/dtormoen/tsk/releases/tag/v0.1.0 - 2025-06-27

### Added

- add tech-stack Dockerfiles for Go, Python, Node, Java, and Lua
- improve ClaudeCodeLogProcessor with richer output
- extend copy_repo to include untracked non-ignored files
- add filesystem support for project-specific Dockerfiles
- implement streaming Docker build output
- always rebuild Docker images for tasks
- add project-specific Docker layer for tsk
- configure Rust builds to use external target directory
- optimize copy_repo to only copy git-tracked files
- add project-layer template for creating project-specific Docker layers
- add auto-detection for --tech-stack and --project flags
- [**breaking**] introduce DockerImageManager for centralized Docker image management
- [**breaking**] update branch naming scheme to include task type
- add --dry-run flag to docker-build command
- implement multi-level template configuration scheme for Docker images
- implement multi-level template configuration scheme
- transform TSK into installable binary with embedded assets
- *(docker-build)* add --no-cache flag to force fresh builds
- Add retry functionality to tasks command
- add docker-build command to automate Docker image building
- Add a more useful error message when it can't connect to Docker
- Add terminal window title updates during task execution
- Track source commit when tasks are created
- Update templates to use Conventional Commits spec

### Fixed

- resolve format string issues for new Rust version
- resolve all precommit issues and test failures
- use docker cache by default
- remove git repository requirement for tsk run command
- correct Docker layer composition for user switching and CMD placement
- Update Claude settings to avoid timeouts
- remove just target that's no longer needed
- Make it clear in plan template that no code should be written

### Other

- initial release
- add release-plz to manage versioning
- [**breaking**] upgrade project to Rust 2024 edition
- Create rust.yml
- make output of testing commands less verbose
- make Task::new require created_at and copied_repo_path parameters
- rename project_root to build_root in Docker image manager
- simplify Task creation by removing redundant constructor
- move repository copying from task execution to task creation
- [**breaking**] make Docker components repository-aware for multi-repo support
- [**breaking**] unify Docker container execution methods and improve interactive mode
- unify debug and task execution pathways
- use Bollard API for Docker image building instead of CLI commands
- consolidate unit tests according to Rust best practices
- [**breaking**] make Task struct fields required and remove Option types
- standardize agent naming to use 'claude-code' consistently
- update CLAUDE.md
- streamline README
- cleanup parts of README that are no longer accurate
- *(task)* remove unused repo_root parameter from write_instructions_content
- *(task)* remove instructions() method from TaskBuilder
- *(task)* separate instructions content from file path in TaskBuilder
- *(client)* integrate TskClient into AppContext dependency injection system
- Move terminal operations to AppContext
- Fix server EOF error when handling empty client connections
- Add agent warmup mechanism for pre-container setup
- Fix client EOF error when server closes connection without response
- Transform TSK into a centralized server-based system
- Refactor log processor to be specific to Claude Code agent
- Improve task duration display with human-readable format
- Add desktop notifications for task completion events
- Associate each task with repository root to support multi-repo operations
- Improve plan template
- Improve editor workflow by editing instruction files from repository root
- Avoid creating branches when no commits exist
- Add more detail to plan task
- Improve debug command to start interactive session directly
- Update templates slightly
- Make todo list display more compact using status emojis
- Refactor TSK to support multiple AI agents through extensible provider pattern
- Add TODO update display in log processor
- Unify task storage by removing separate quick-tasks directory
- Consolidate test MockDockerClient implementations into reusable test utilities
- Simplify the code a bit
- Add a planning task type
- Refactor task management with TaskBuilder pattern and extract TaskStorage
- Refactor task execution into dedicated TaskRunner
- WIP, refactoring task_manager
- WIP removing DockerManagerTrait
- Add ripgrep
- Fix unit tests in task_manager.rs to be thread-safe
- Use multiple threads for unit tests again
- Update Docker resource limits
- Refactor git operations to use git2-rs library
- Add some guidance on tests to CLAUDE.md
- Add a refactor template
- Add GitOperations trait to AppContext for improved testability
- Add FileSystemOperations trait and refactor AppContext to use builder pattern
- Update CLAUDE.md
- Clean up log parser issues
- Introduce AppContext for dependency injection
- Implement command pattern for CLI commands
- Add a doc template
- Fix task directory cleanup in clean subcommand
- Add interactive instruction editing with -e flag for add and quick commands
- Add tasks subcommand for managing task list
- Make --type flag optional and support any template-based task types
- Refactor TSK to always use instructions files and add template support
- Show only message type for non-assistant/result logs
- Improve log streaming output formatting
- Parse task result status from Claude Code JSON logs
- Implement real-time log streaming with JSON formatting for TSK
- TSK automated changes for task: fix-precommit
- Refactor shared task execution logic into TaskManager module
- Add list and run subcommands for task management
- Add git config to docker image
- Add 'add' subcommand for queuing tasks
- TSK automated changes for task: instructions-file
- Make it easier to view output
- TSK debug session changes for: stream-output
- Run squid as squid user
- Add command to stop proxy
- Add nginx proxy container
- Better way to manage rust
- Pass in the description of the command
- Add some convenience just commands and attempt to unblock cargo
- Add an entrypoint script
- Launch images with firewall script
- Add setup for firewall rules
- Fix to properly merge branches
- Switch from using worktrees to copying the repo
- Add .claude directory to version control
- Add claude config file
- allow networking
- Include claude directory in launched containers
- Make sure tests that effect docker and git don't have unintended side effects
- Refactor docker.rs to reuse code and pull out constants
- Add debug subcommand
- Claude Code now works in Docker container
- Add ability to launch Docker containers
- Add base Dockerfile
- Add tests for git commands
- Add basic command line functionality
- Add a CLAUDE file
- Add a README that explains the project
- Initial commit