You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 0b5e838
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: .claude/settings/permissions/bash.jsonc
+51-10Lines changed: 51 additions & 10 deletions
Original file line number
Diff line number
Diff line change
@@ -44,13 +44,63 @@
44
44
// Git & Version Control
45
45
"Bash(git add *)",
46
46
"Bash(git branch *)",
47
+
"Bash(git checkout *)",
47
48
"Bash(git commit *)",
48
49
"Bash(git diff *)",
49
50
"Bash(git log *)",
51
+
"Bash(git mv *)",
50
52
"Bash(git push)",
51
53
"Bash(git remote get-url origin)",
52
54
"Bash(git rev-parse *)",
53
55
"Bash(git status *)",
56
+
// Github
57
+
"Bash(gh issue list *)",
58
+
"Bash(gh issue view *)",
59
+
"Bash(gh run download *)",
60
+
"Bash(gh run list *)",
61
+
"Bash(gh run view *)",
62
+
"Bash(gh run watch *)",
63
+
"Bash(gh search *)",
64
+
"Bash(gh pr view *)",
65
+
"Bash(gh pr diff *)",
66
+
// Local app interaction
67
+
// Claude currently has terrible support for this: https://github.com/anthropics/claude-code/issues/338 using `:*` as a pattern is not allowed (doesn't error, just doesn't really work), so have to specify _something_ between the colon and asterisk.
68
+
"Bash(curl http://localhost:1*)",
69
+
"Bash(curl http://localhost:2*)",
70
+
"Bash(curl http://localhost:3*)",
71
+
"Bash(curl http://localhost:4*)",
72
+
"Bash(curl http://localhost:5*)",
73
+
"Bash(curl http://localhost:6*)",
74
+
"Bash(curl http://localhost:7*)",
75
+
"Bash(curl http://localhost:8*)",
76
+
"Bash(curl http://localhost:9*)",
77
+
"Bash(curl -s http://localhost:1*)",
78
+
"Bash(curl -s http://localhost:2*)",
79
+
"Bash(curl -s http://localhost:3*)",
80
+
"Bash(curl -s http://localhost:4*)",
81
+
"Bash(curl -s http://localhost:5*)",
82
+
"Bash(curl -s http://localhost:6*)",
83
+
"Bash(curl -s http://localhost:7*)",
84
+
"Bash(curl -s http://localhost:8*)",
85
+
"Bash(curl -s http://localhost:9*)",
86
+
"Bash(curl \"http://localhost:1*)",
87
+
"Bash(curl \"http://localhost:2*)",
88
+
"Bash(curl \"http://localhost:3*)",
89
+
"Bash(curl \"http://localhost:4*)",
90
+
"Bash(curl \"http://localhost:5*)",
91
+
"Bash(curl \"http://localhost:6*)",
92
+
"Bash(curl \"http://localhost:7*)",
93
+
"Bash(curl \"http://localhost:8*)",
94
+
"Bash(curl \"http://localhost:9*)",
95
+
"Bash(curl -s \"http://localhost:1*)",
96
+
"Bash(curl -s \"http://localhost:2*)",
97
+
"Bash(curl -s \"http://localhost:3*)",
98
+
"Bash(curl -s \"http://localhost:4*)",
99
+
"Bash(curl -s \"http://localhost:5*)",
100
+
"Bash(curl -s \"http://localhost:6*)",
101
+
"Bash(curl -s \"http://localhost:7*)",
102
+
"Bash(curl -s \"http://localhost:8*)",
103
+
"Bash(curl -s \"http://localhost:9*)",
54
104
// Misc
55
105
"Bash(amp *)",
56
106
"Bash(atuin *)",
@@ -64,8 +114,7 @@
64
114
"Bash(zk *)",
65
115
// Node.js
66
116
"Bash(pnpm list *)",
67
-
"Bash(pnpm test-unit *)",
68
-
"Bash(pnpm test-e2e *)",
117
+
"Bash(pnpm test*)",
69
118
"Bash(pnpm view *)",
70
119
// Python
71
120
"Bash(uv run pytest *)",
@@ -83,10 +132,6 @@
83
132
// Search
84
133
"Bash(rg *)",
85
134
// Research
86
-
"Bash(gh issue list *)",
87
-
"Bash(gh search *)",
88
-
"Bash(gh pr view *)",
89
-
"Bash(gh pr diff *)",
90
135
],
91
136
"ask": [
92
137
// let's hold off before we let it use the github CLI in any free running allow mode...I don't want it somehow approving PRs with the user's credentials
@@ -95,11 +140,7 @@
95
140
"Bash(gh secret *)",
96
141
"Bash(gh ruleset *)",
97
142
"Bash(aws *)", // let's hold off before we let it use AWS CLI in any free running allow mode. We need to be very sure we don't have any access to staging or production credentials in our dev environment (...which we shouldn't...but we need to double check that or consider any other safeguards first)
Copy file name to clipboardExpand all lines: AGENTS.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,11 +14,12 @@ This project is a Copier template used to generate other copier templates. It is
14
14
- Prefer keyword-only parameters (unless a very clear single-argument function): use `*` in Python signatures and destructured options objects in TypeScript.
15
15
- When disabling a linting rule with an inline directive, provide a comment at the end of the line (or on the line above for tools that don't allow extra text after an inline directive) describing the reasoning for disabling the rule.
16
16
- Avoid telling the type checker what a type is rather than letting it prove it. This includes type assertions (`as SomeType` in TypeScript, `cast()` in Python) and variable annotations that override inference. Prefer approaches that let the type checker verify the type itself: `isinstance`/`instanceof` narrowing, restructuring code so the correct type flows naturally, or using discriminated unions. When there is genuinely no alternative, add a comment explaining why the workaround is necessary and why it is safe.
17
+
- Avoid `||` (TypeScript) or `or` (Python) in `if`/`elif` conditions, and avoid `x in ['a', 'b']`-style membership tests in implementation code — coverage tools treat these as a single branch, silently masking untested paths and producing false 100% branch coverage. Use separate `if`/`elif` branches instead so each condition is independently covered.
17
18
18
19
## Testing
19
20
20
21
- Always run tests with an explicit path (e.g. uv run pytest tests/unit) — test runners discover all types (unit, integration, E2E...) by default.
21
-
- When iterating on a single test, run that test in isolation first and confirm it is in the expected state (red or green) before widening to the full suite. Use the most targeted invocation available: a specific test function for Python (e.g. `uv run pytest path/to/test.py::test_name --no-cov`) or a file path and name filter for TypeScript (e.g. `pnpm test-unit -- path/to/test.spec.ts -t "test name" --no-coverage`). Only run the full suite once the target test behaves as expected.
22
+
- When iterating on a single test, run that test in isolation first and confirm it is in the expected state (red or green) before widening to the full suite. Use the most targeted invocation available: a specific test function for Python (e.g. `uv run pytest path/to/test.py::test_name --no-cov`) or a file path and name filter for TypeScript (e.g. `pnpm test-unit path/to/test.spec.ts -t "test name" --no-coverage`). Only run the full suite once the target test behaves as expected.
22
23
- Test coverage requirements are usually at 100%, so when running a subset of tests, always disable test coverage to avoid the test run failing for insufficient coverage.
23
24
- Avoid magic values in comparisons in tests in all languages (like ruff rule PLR2004 specifies). Note: `1` and `0` are not magic numbers (according to PLR2004)
24
25
- Prefer using random values in tests rather than arbitrary ones (e.g. the faker library, uuids, random.randint) when possible. For enums, pick randomly rather than hardcoding one value.
for script in .claude/skills/address-pr-comments/check-footer.py .claude/skills/address-pr-comments/fetch-pr-comments.py .claude/skills/address-pr-comments/post-reply.py; do
167
173
if [ -f "$script" ]; then
168
174
chmod +x "$script"
175
+
if git ls-files --error-unmatch "$script" > /dev/null 2>&1; then
0 commit comments