From ac176a3e58dd66105a8b4c6ff34ebfff911537c6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 24 Jan 2026 18:56:28 +0000 Subject: [PATCH 1/5] Add make_new_job.sh permission to installer Update ClaudeAdapter.sync_permissions() to automatically add the Bash permission for .deepwork/jobs/deepwork_jobs/make_new_job.sh during installation, allowing Claude to run the job creation script. --- src/deepwork/core/adapters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/deepwork/core/adapters.py b/src/deepwork/core/adapters.py index a6354770..a642f455 100644 --- a/src/deepwork/core/adapters.py +++ b/src/deepwork/core/adapters.py @@ -469,6 +469,8 @@ def sync_permissions(self, project_path: Path) -> int: "Write(./.deepwork/**)", # All deepwork CLI commands "Bash(deepwork:*)", + # Job scripts that need to be executable + "Bash(./.deepwork/jobs/deepwork_jobs/make_new_job.sh:*)", ] # Load settings once, add all permissions, then save once From bb4a8a28e83a6ddc94b3d1caaa51ef22501cda39 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 24 Jan 2026 18:58:51 +0000 Subject: [PATCH 2/5] Bump version to 0.4.3 for make_new_job.sh permission Update version and changelog for the new installer feature that automatically adds permission for the make_new_job.sh script. --- CHANGELOG.md | 5 +++++ pyproject.toml | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83d757b8..93515d81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +## [0.4.3] - 2026-01-24 + +### Added +- Installer now auto-adds permission for `make_new_job.sh` script, allowing Claude to run job creation without manual configuration + ## [0.4.2] - 2026-01-24 ### Changed diff --git a/pyproject.toml b/pyproject.toml index 98bb5f81..d47a89cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "deepwork" -version = "0.4.2" +version = "0.4.3" description = "Framework for enabling AI agents to perform complex, multi-step work tasks" readme = "README.md" requires-python = ">=3.11" From aba7cc3bd2bb4fd0839a223ddf2cb6befb3227dd Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 24 Jan 2026 19:09:09 +0000 Subject: [PATCH 3/5] Revert premature version bump and fix test assertions - Revert version from 0.4.3 to 0.4.2 in pyproject.toml - Move make_new_job.sh changelog entry from [0.4.3] to [Unreleased] - Update test assertions to expect 5 permissions (was 4) to account for the new make_new_job.sh permission added by this feature branch --- CHANGELOG.md | 6 +----- pyproject.toml | 2 +- tests/unit/test_adapters.py | 4 ++-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93515d81..55081786 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added +- Installer now auto-adds permission for `make_new_job.sh` script, allowing Claude to run job creation without manual configuration ### Changed @@ -15,11 +16,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed -## [0.4.3] - 2026-01-24 - -### Added -- Installer now auto-adds permission for `make_new_job.sh` script, allowing Claude to run job creation without manual configuration - ## [0.4.2] - 2026-01-24 ### Changed diff --git a/pyproject.toml b/pyproject.toml index d47a89cb..98bb5f81 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "deepwork" -version = "0.4.3" +version = "0.4.2" description = "Framework for enabling AI agents to perform complex, multi-step work tasks" readme = "README.md" requires-python = ">=3.11" diff --git a/tests/unit/test_adapters.py b/tests/unit/test_adapters.py index 36d00287..b708eb98 100644 --- a/tests/unit/test_adapters.py +++ b/tests/unit/test_adapters.py @@ -194,7 +194,7 @@ def test_sync_permissions_creates_settings_file(self, temp_dir: Path) -> None: count = adapter.sync_permissions(temp_dir) - assert count == 4 # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + assert count == 5 # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + Bash for make_new_job.sh settings_file = temp_dir / ".claude" / "settings.json" assert settings_file.exists() settings = json.loads(settings_file.read_text()) @@ -226,7 +226,7 @@ def test_sync_permissions_idempotent(self, temp_dir: Path) -> None: # First call adds permissions count1 = adapter.sync_permissions(temp_dir) - assert count1 == 4 + assert count1 == 5 # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + Bash for make_new_job.sh # Second call should add nothing count2 = adapter.sync_permissions(temp_dir) From d02127c08496647a8dc6a5150fd1cb3dbb13962c Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 24 Jan 2026 19:11:30 +0000 Subject: [PATCH 4/5] Format test_adapters.py with ruff --- tests/unit/test_adapters.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/unit/test_adapters.py b/tests/unit/test_adapters.py index b708eb98..de22f217 100644 --- a/tests/unit/test_adapters.py +++ b/tests/unit/test_adapters.py @@ -194,7 +194,9 @@ def test_sync_permissions_creates_settings_file(self, temp_dir: Path) -> None: count = adapter.sync_permissions(temp_dir) - assert count == 5 # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + Bash for make_new_job.sh + assert ( + count == 5 + ) # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + Bash for make_new_job.sh settings_file = temp_dir / ".claude" / "settings.json" assert settings_file.exists() settings = json.loads(settings_file.read_text()) @@ -226,7 +228,9 @@ def test_sync_permissions_idempotent(self, temp_dir: Path) -> None: # First call adds permissions count1 = adapter.sync_permissions(temp_dir) - assert count1 == 5 # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + Bash for make_new_job.sh + assert ( + count1 == 5 + ) # Read, Edit, Write for .deepwork/** + Bash for deepwork CLI + Bash for make_new_job.sh # Second call should add nothing count2 = adapter.sync_permissions(temp_dir) From c0ab3aa40fe64b7b732de9d30cd0f5cc0d30eeb6 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 24 Jan 2026 19:15:33 +0000 Subject: [PATCH 5/5] Add comment referencing test for required_permissions changes --- src/deepwork/core/adapters.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/deepwork/core/adapters.py b/src/deepwork/core/adapters.py index a642f455..db859ebb 100644 --- a/src/deepwork/core/adapters.py +++ b/src/deepwork/core/adapters.py @@ -472,6 +472,8 @@ def sync_permissions(self, project_path: Path) -> int: # Job scripts that need to be executable "Bash(./.deepwork/jobs/deepwork_jobs/make_new_job.sh:*)", ] + # NOTE: When modifying required_permissions, update the test assertion in + # tests/unit/test_adapters.py::TestClaudeAdapter::test_sync_permissions_idempotent # Load settings once, add all permissions, then save once settings = self._load_settings(project_path)