From 7754f5c7694bc4c77bee714fa78e7d20cb328082 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?=
<226712+halilim@users.noreply.github.com>
Date: Mon, 8 Sep 2025 04:07:54 +0300
Subject: [PATCH 1/8] feat(service): add Gramps Web template
---
public/svgs/gramps-web.svg | 154 ++++++++++++++++++++++++++++++
templates/compose/gramps-web.yaml | 63 ++++++++++++
2 files changed, 217 insertions(+)
create mode 100644 public/svgs/gramps-web.svg
create mode 100644 templates/compose/gramps-web.yaml
diff --git a/public/svgs/gramps-web.svg b/public/svgs/gramps-web.svg
new file mode 100644
index 000000000..b5d79d76d
--- /dev/null
+++ b/public/svgs/gramps-web.svg
@@ -0,0 +1,154 @@
+
+
diff --git a/templates/compose/gramps-web.yaml b/templates/compose/gramps-web.yaml
new file mode 100644
index 000000000..765a5321d
--- /dev/null
+++ b/templates/compose/gramps-web.yaml
@@ -0,0 +1,63 @@
+# documentation: https://www.grampsweb.org/install_setup/setup/
+# slogan: Open Source Online Genealogy System.
+# category: family
+# tags: family, genealogy, personal
+# logo: svgs/gramps-web.svg
+# port: 5000
+
+services:
+ grampsweb: &grampsweb
+ image: ghcr.io/gramps-project/grampsweb:latest
+ environment:
+ GRAMPSWEB_TREE: ${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists
+ GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0"
+ GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0"
+ GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1
+ GUNICORN_NUM_WORKERS: ${GUNICORN_NUM_WORKERS:-2}
+ depends_on:
+ - grampsweb_redis
+ volumes:
+ - gramps_users:/app/users # persist user database
+ - gramps_index:/app/indexdir # persist search index
+ - gramps_thumb_cache:/app/thumbnail_cache # persist thumbnails
+ - gramps_cache:/app/cache # persist export and report caches
+ - gramps_secret:/app/secret # persist flask secret
+ - gramps_db:/root/.gramps/grampsdb # persist Gramps database
+ - gramps_media:/app/media # persist media files
+ - gramps_tmp:/tmp
+ healthcheck:
+ test: wget -O - http://localhost:5000 > /dev/null 2>&1
+ interval: 5s
+ timeout: 10s
+ retries: 3
+
+ grampsweb_celery:
+ <<: *grampsweb
+ container_name: grampsweb_celery
+ depends_on:
+ - grampsweb_redis
+ command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2
+ healthcheck:
+ test: SECRET_KEY="$(cat secret/secret)" celery -A gramps_webapi.celery status || exit 1
+ interval: 5s
+ timeout: 10s
+ retries: 3
+
+ grampsweb_redis:
+ image: docker.io/library/redis:7.2.4-alpine
+ container_name: grampsweb_redis
+ healthcheck:
+ test: redis-cli ping | grep PONG
+ interval: 5s
+ timeout: 10s
+ retries: 3
+
+volumes:
+ gramps_users:
+ gramps_index:
+ gramps_thumb_cache:
+ gramps_cache:
+ gramps_secret:
+ gramps_db:
+ gramps_media:
+ gramps_tmp:
From f5a4c5ac3f8a4ecc1fac5679fdb65891eefc1b90 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?=
<226712+halilim@users.noreply.github.com>
Date: Tue, 9 Sep 2025 10:27:33 +0300
Subject: [PATCH 2/8] Improve service & update logo color
---
public/svgs/gramps-web.svg | 26 +++++++++++-----------
templates/compose/gramps-web.yaml | 36 ++++++++++++++-----------------
2 files changed, 29 insertions(+), 33 deletions(-)
diff --git a/public/svgs/gramps-web.svg b/public/svgs/gramps-web.svg
index b5d79d76d..eeef33047 100644
--- a/public/svgs/gramps-web.svg
+++ b/public/svgs/gramps-web.svg
@@ -73,7 +73,7 @@
inkscape:connector-curvature="0"
id="path1087"
d="m 175.2367,338.27684 h 31.47905 v -153.9548 h 60.76188"
- style="fill:none;stroke:#795649;stroke-width:30;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
diff --git a/templates/compose/gramps-web.yaml b/templates/compose/gramps-web.yaml
index 765a5321d..04a284ff2 100644
--- a/templates/compose/gramps-web.yaml
+++ b/templates/compose/gramps-web.yaml
@@ -6,17 +6,18 @@
# port: 5000
services:
- grampsweb: &grampsweb
+ grampsweb:
image: ghcr.io/gramps-project/grampsweb:latest
environment:
- GRAMPSWEB_TREE: ${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists
- GRAMPSWEB_CELERY_CONFIG__broker_url: "redis://grampsweb_redis:6379/0"
- GRAMPSWEB_CELERY_CONFIG__result_backend: "redis://grampsweb_redis:6379/0"
- GRAMPSWEB_RATELIMIT_STORAGE_URI: redis://grampsweb_redis:6379/1
- GUNICORN_NUM_WORKERS: ${GUNICORN_NUM_WORKERS:-2}
+ - SERVICE_URL_GRAMPSWEB_5000
+ - GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists
+ - GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0
+ - GRAMPSWEB_CELERY_CONFIG__result_backend=redis://grampsweb_redis:6379/0
+ - GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://grampsweb_redis:6379/1
+ - GUNICORN_NUM_WORKERS=${GUNICORN_NUM_WORKERS:-2}
depends_on:
- grampsweb_redis
- volumes:
+ volumes: &volumes
- gramps_users:/app/users # persist user database
- gramps_index:/app/indexdir # persist search index
- gramps_thumb_cache:/app/thumbnail_cache # persist thumbnails
@@ -32,10 +33,16 @@ services:
retries: 3
grampsweb_celery:
- <<: *grampsweb
- container_name: grampsweb_celery
+ image: ghcr.io/gramps-project/grampsweb:latest
+ environment:
+ - GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists
+ - GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0
+ - GRAMPSWEB_CELERY_CONFIG__result_backend=redis://grampsweb_redis:6379/0
+ - GRAMPSWEB_RATELIMIT_STORAGE_URI=redis://grampsweb_redis:6379/1
depends_on:
- grampsweb_redis
+ volumes:
+ <<: *volumes
command: celery -A gramps_webapi.celery worker --loglevel=INFO --concurrency=2
healthcheck:
test: SECRET_KEY="$(cat secret/secret)" celery -A gramps_webapi.celery status || exit 1
@@ -45,19 +52,8 @@ services:
grampsweb_redis:
image: docker.io/library/redis:7.2.4-alpine
- container_name: grampsweb_redis
healthcheck:
test: redis-cli ping | grep PONG
interval: 5s
timeout: 10s
retries: 3
-
-volumes:
- gramps_users:
- gramps_index:
- gramps_thumb_cache:
- gramps_cache:
- gramps_secret:
- gramps_db:
- gramps_media:
- gramps_tmp:
From 6a581b2759762560250613b57342c8f263c5e1bf Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Tue, 7 Oct 2025 09:37:48 +0200
Subject: [PATCH 3/8] "Update Claude PR Assistant workflow"
---
.github/workflows/claude.yml | 37 +++++++++++-------------------------
1 file changed, 11 insertions(+), 26 deletions(-)
diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml
index 9daf0e90e..b1a3201d7 100644
--- a/.github/workflows/claude.yml
+++ b/.github/workflows/claude.yml
@@ -16,8 +16,6 @@ jobs:
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
- (github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'Claude') ||
- (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'Claude') ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
@@ -36,30 +34,17 @@ jobs:
id: claude
uses: anthropics/claude-code-action@v1
with:
- anthropic_api_key: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
-
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
-
- # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1)
- # model: "claude-opus-4-1-20250805"
-
- # Optional: Customize the trigger phrase (default: @claude)
- # trigger_phrase: "/claude"
-
- # Optional: Trigger when specific user is assigned to an issue
- # assignee_trigger: "claude-bot"
-
- # Optional: Allow Claude to run specific commands
- # allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
-
- # Optional: Add custom instructions for Claude to customize its behavior for your project
- # custom_instructions: |
- # Follow our coding standards
- # Ensure all new code has tests
- # Use TypeScript for new files
-
- # Optional: Custom environment variables for Claude
- # claude_env: |
- # NODE_ENV: test
+
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
+ # prompt: 'Update the pull request description to include a summary of changes.'
+
+ # Optional: Add claude_args to customize behavior and configuration
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
+ # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
+ # claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)'
+
From af4ce5d1d2fc134f8da0babbde64eac5ed1dd313 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Tue, 7 Oct 2025 09:37:50 +0200
Subject: [PATCH 4/8] "Update Claude Code Review workflow"
---
.github/workflows/claude-code-review.yml | 40 ++++++------------------
1 file changed, 9 insertions(+), 31 deletions(-)
diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml
index a2c92df59..31c04fdf6 100644
--- a/.github/workflows/claude-code-review.yml
+++ b/.github/workflows/claude-code-review.yml
@@ -12,7 +12,6 @@ on:
jobs:
claude-review:
- if: false
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
@@ -34,15 +33,13 @@ jobs:
- name: Run Claude Code Review
id: claude-review
- uses: anthropics/claude-code-action@beta
+ uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+ prompt: |
+ REPO: ${{ github.repository }}
+ PR NUMBER: ${{ github.event.pull_request.number }}
- # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1)
- # model: "claude-opus-4-1-20250805"
-
- # Direct prompt for automated review (no @claude mention needed)
- direct_prompt: |
Please review this pull request and provide feedback on:
- Code quality and best practices
- Potential bugs or issues
@@ -50,30 +47,11 @@ jobs:
- Security concerns
- Test coverage
- Be constructive and helpful in your feedback.
+ Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
- # Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR
- # use_sticky_comment: true
+ Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
- # Optional: Customize review based on file types
- # direct_prompt: |
- # Review this PR focusing on:
- # - For TypeScript files: Type safety and proper interface usage
- # - For API endpoints: Security, input validation, and error handling
- # - For React components: Performance, accessibility, and best practices
- # - For tests: Coverage, edge cases, and test quality
-
- # Optional: Different prompts for different authors
- # direct_prompt: |
- # ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
- # 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
- # 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
-
- # Optional: Add specific tools for running tests or linting
- # allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
-
- # Optional: Skip review for certain conditions
- # if: |
- # !contains(github.event.pull_request.title, '[skip-review]') &&
- # !contains(github.event.pull_request.title, '[WIP]')
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
+ # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
+ claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
From 7949c0613498fb2f125f459c91dc5b5686f0b1ff Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Tue, 7 Oct 2025 09:53:35 +0200
Subject: [PATCH 5/8] Update .github/workflows/claude.yml
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---
.github/workflows/claude.yml | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml
index b1a3201d7..e93c95bff 100644
--- a/.github/workflows/claude.yml
+++ b/.github/workflows/claude.yml
@@ -34,9 +34,14 @@ jobs:
id: claude
uses: anthropics/claude-code-action@v1
with:
- claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
-
- # This is an optional setting that allows Claude to read CI results on PRs
+ - name: Run Claude Code
+ id: claude
+ uses: anthropics/claude-code-action@v1
+ with:
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+ # This is an optional setting that allows Claude to read CI results on PRs
+ additional_permissions: |
+ actions: read
additional_permissions: |
actions: read
From c05ad62f8350188b53bc223f4d6b3f457dad7069 Mon Sep 17 00:00:00 2001
From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com>
Date: Tue, 7 Oct 2025 09:57:16 +0200
Subject: [PATCH 6/8] disable pr review for now
---
.github/workflows/claude-code-review.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml
index 31c04fdf6..d73398046 100644
--- a/.github/workflows/claude-code-review.yml
+++ b/.github/workflows/claude-code-review.yml
@@ -12,6 +12,7 @@ on:
jobs:
claude-review:
+ if: false
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
From 354eadd02f18872ef9aa50476f689e5186fbba19 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?=
<226712+halilim@users.noreply.github.com>
Date: Thu, 9 Oct 2025 00:14:17 +0300
Subject: [PATCH 7/8] Gramps Web: Pin to a version
---
templates/compose/gramps-web.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/templates/compose/gramps-web.yaml b/templates/compose/gramps-web.yaml
index 04a284ff2..fa3b02c6f 100644
--- a/templates/compose/gramps-web.yaml
+++ b/templates/compose/gramps-web.yaml
@@ -7,7 +7,7 @@
services:
grampsweb:
- image: ghcr.io/gramps-project/grampsweb:latest
+ image: ghcr.io/gramps-project/grampsweb:25.9.0
environment:
- SERVICE_URL_GRAMPSWEB_5000
- GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists
@@ -33,7 +33,7 @@ services:
retries: 3
grampsweb_celery:
- image: ghcr.io/gramps-project/grampsweb:latest
+ image: ghcr.io/gramps-project/grampsweb:25.9.0
environment:
- GRAMPSWEB_TREE=${GRAMPSWEB_TREE:-Gramps Web} # will create a new tree if not exists
- GRAMPSWEB_CELERY_CONFIG__broker_url=redis://grampsweb_redis:6379/0
From ee6b8c9c042b746dcd39cdd1b1991b8efe4b8663 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Halil=20=C3=96zg=C3=BCr?=
<226712+halilim@users.noreply.github.com>
Date: Thu, 9 Oct 2025 00:19:17 +0300
Subject: [PATCH 8/8] Revert unintentional changes
---
.github/workflows/claude-code-review.yml | 39 ++++++++++++++++-----
.github/workflows/claude.yml | 44 +++++++++++++++---------
2 files changed, 57 insertions(+), 26 deletions(-)
diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml
index d73398046..a2c92df59 100644
--- a/.github/workflows/claude-code-review.yml
+++ b/.github/workflows/claude-code-review.yml
@@ -34,13 +34,15 @@ jobs:
- name: Run Claude Code Review
id: claude-review
- uses: anthropics/claude-code-action@v1
+ uses: anthropics/claude-code-action@beta
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
- prompt: |
- REPO: ${{ github.repository }}
- PR NUMBER: ${{ github.event.pull_request.number }}
+ # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1)
+ # model: "claude-opus-4-1-20250805"
+
+ # Direct prompt for automated review (no @claude mention needed)
+ direct_prompt: |
Please review this pull request and provide feedback on:
- Code quality and best practices
- Potential bugs or issues
@@ -48,11 +50,30 @@ jobs:
- Security concerns
- Test coverage
- Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.
+ Be constructive and helpful in your feedback.
- Use `gh pr comment` with your Bash tool to leave your review as a comment on the PR.
+ # Optional: Use sticky comments to make Claude reuse the same comment on subsequent pushes to the same PR
+ # use_sticky_comment: true
- # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
- # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
- claude_args: '--allowed-tools "Bash(gh issue view:*),Bash(gh search:*),Bash(gh issue list:*),Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*),Bash(gh pr list:*)"'
+ # Optional: Customize review based on file types
+ # direct_prompt: |
+ # Review this PR focusing on:
+ # - For TypeScript files: Type safety and proper interface usage
+ # - For API endpoints: Security, input validation, and error handling
+ # - For React components: Performance, accessibility, and best practices
+ # - For tests: Coverage, edge cases, and test quality
+
+ # Optional: Different prompts for different authors
+ # direct_prompt: |
+ # ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
+ # 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
+ # 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
+
+ # Optional: Add specific tools for running tests or linting
+ # allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
+
+ # Optional: Skip review for certain conditions
+ # if: |
+ # !contains(github.event.pull_request.title, '[skip-review]') &&
+ # !contains(github.event.pull_request.title, '[WIP]')
diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml
index e93c95bff..9daf0e90e 100644
--- a/.github/workflows/claude.yml
+++ b/.github/workflows/claude.yml
@@ -16,6 +16,8 @@ jobs:
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
+ (github.event_name == 'issues' && github.event.action == 'labeled' && github.event.label.name == 'Claude') ||
+ (github.event_name == 'pull_request' && github.event.action == 'labeled' && github.event.label.name == 'Claude') ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
@@ -34,22 +36,30 @@ jobs:
id: claude
uses: anthropics/claude-code-action@v1
with:
- - name: Run Claude Code
- id: claude
- uses: anthropics/claude-code-action@v1
- with:
- claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
- # This is an optional setting that allows Claude to read CI results on PRs
- additional_permissions: |
- actions: read
+ anthropic_api_key: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+
+ # This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
-
- # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
- # prompt: 'Update the pull request description to include a summary of changes.'
-
- # Optional: Add claude_args to customize behavior and configuration
- # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
- # or https://docs.claude.com/en/docs/claude-code/sdk#command-line for available options
- # claude_args: '--model claude-opus-4-1-20250805 --allowed-tools Bash(gh pr:*)'
-
+
+ # Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4.1)
+ # model: "claude-opus-4-1-20250805"
+
+ # Optional: Customize the trigger phrase (default: @claude)
+ # trigger_phrase: "/claude"
+
+ # Optional: Trigger when specific user is assigned to an issue
+ # assignee_trigger: "claude-bot"
+
+ # Optional: Allow Claude to run specific commands
+ # allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
+
+ # Optional: Add custom instructions for Claude to customize its behavior for your project
+ # custom_instructions: |
+ # Follow our coding standards
+ # Ensure all new code has tests
+ # Use TypeScript for new files
+
+ # Optional: Custom environment variables for Claude
+ # claude_env: |
+ # NODE_ENV: test