recoder-code 1.0.113

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.
Files changed (53) hide show
  1. package/.babelrc +4 -0
  2. package/.claude/commands/commit-push-pr.md +19 -0
  3. package/.claude/commands/dedupe.md +38 -0
  4. package/.devcontainer/Dockerfile +91 -0
  5. package/.devcontainer/devcontainer.json +57 -0
  6. package/.devcontainer/init-firewall.sh +137 -0
  7. package/.gitattributes +2 -0
  8. package/.github/ISSUE_TEMPLATE/bug_report.yml +188 -0
  9. package/.github/ISSUE_TEMPLATE/config.yml +17 -0
  10. package/.github/ISSUE_TEMPLATE/documentation.yml +117 -0
  11. package/.github/ISSUE_TEMPLATE/feature_request.yml +132 -0
  12. package/.github/ISSUE_TEMPLATE/model_behavior.yml +220 -0
  13. package/.github/workflows/auto-close-duplicates.yml +31 -0
  14. package/.github/workflows/backfill-duplicate-comments.yml +44 -0
  15. package/.github/workflows/claude-dedupe-issues.yml +80 -0
  16. package/.github/workflows/claude-issue-triage.yml +106 -0
  17. package/.github/workflows/claude.yml +37 -0
  18. package/.github/workflows/issue-opened-dispatch.yml +28 -0
  19. package/.github/workflows/lock-closed-issues.yml +92 -0
  20. package/.github/workflows/log-issue-events.yml +40 -0
  21. package/CHANGELOG.md +646 -0
  22. package/KILO.md +1273 -0
  23. package/LICENSE.md +21 -0
  24. package/README.md +176 -0
  25. package/SECURITY.md +12 -0
  26. package/Script/run_devcontainer_claude_code.ps1 +152 -0
  27. package/api/githubApi.ts +144 -0
  28. package/babel.config.js +7 -0
  29. package/cli/.gitkeep +0 -0
  30. package/cli/auto-close-duplicates.ts +5 -0
  31. package/cli/configure.js +33 -0
  32. package/cli/list-models.js +48 -0
  33. package/cli/run.js +61 -0
  34. package/cli/set-api-key.js +26 -0
  35. package/config.json +4 -0
  36. package/demo.gif +0 -0
  37. package/examples/gpt-3.5-turbo.js +38 -0
  38. package/examples/gpt-4.js +38 -0
  39. package/examples/hooks/bash_command_validator_example.py +83 -0
  40. package/index.d.ts +3 -0
  41. package/index.js +62 -0
  42. package/jest.config.js +6 -0
  43. package/openapi.yaml +61 -0
  44. package/package.json +47 -0
  45. package/scripts/backfill-duplicate-comments.ts +213 -0
  46. package/tests/api-githubApi.test.ts +30 -0
  47. package/tests/auto-close-duplicates.test.ts +145 -0
  48. package/tests/cli-configure.test.ts +88 -0
  49. package/tests/cli-list-models.test.ts +44 -0
  50. package/tests/cli-run.test.ts +97 -0
  51. package/tests/cli-set-api-key.test.ts +54 -0
  52. package/tests/cli-validate-api-key.test.ts +52 -0
  53. package/tsconfig.json +18 -0
@@ -0,0 +1,132 @@
1
+ name: ✨ Feature Request
2
+ description: Suggest a new feature or enhancement for Recoder Code
3
+ title: "[FEATURE] "
4
+ labels:
5
+ - enhancement
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ ## Thanks for suggesting a feature!
11
+
12
+ We love hearing ideas from our community. Please help us understand your use case by filling out the sections below.
13
+ Before submitting, please check if this feature has already been requested.
14
+
15
+ - type: checkboxes
16
+ id: preflight
17
+ attributes:
18
+ label: Preflight Checklist
19
+ options:
20
+ - label: I have searched [existing requests](https://github.com/anthropics/claude-code/issues?q=is%3Aissue%20label%3Aenhancement) and this feature hasn't been requested yet
21
+ required: true
22
+ - label: This is a single feature request (not multiple features)
23
+ required: true
24
+
25
+ - type: textarea
26
+ id: problem
27
+ attributes:
28
+ label: Problem Statement
29
+ description: |
30
+ What problem are you trying to solve? Why do you need this feature?
31
+ Focus on the problem, not the solution. Help us understand your workflow.
32
+ placeholder: |
33
+ I often need to work with multiple projects simultaneously, but Recoder Code doesn't support...
34
+
35
+ When I'm debugging code, I find it difficult to...
36
+
37
+ The current workflow requires me to manually...
38
+ validations:
39
+ required: true
40
+
41
+ - type: textarea
42
+ id: solution
43
+ attributes:
44
+ label: Proposed Solution
45
+ description: |
46
+ How would you like this to work? Describe the ideal user experience.
47
+ Be specific about how you'd interact with this feature.
48
+ placeholder: |
49
+ I'd like to be able to run `claude --workspace project1,project2` to...
50
+
51
+ There should be a command or setting that allows...
52
+
53
+ The interface should show...
54
+ validations:
55
+ required: true
56
+
57
+ - type: textarea
58
+ id: alternatives
59
+ attributes:
60
+ label: Alternative Solutions
61
+ description: |
62
+ What alternatives have you considered or tried?
63
+ Are there workarounds you're currently using?
64
+ placeholder: |
65
+ I've tried using multiple terminal windows but...
66
+
67
+ Currently I work around this by...
68
+
69
+ Other tools solve this by...
70
+ validations:
71
+ required: false
72
+
73
+ - type: dropdown
74
+ id: priority
75
+ attributes:
76
+ label: Priority
77
+ description: How important is this feature to your workflow?
78
+ options:
79
+ - Critical - Blocking my work
80
+ - High - Significant impact on productivity
81
+ - Medium - Would be very helpful
82
+ - Low - Nice to have
83
+ validations:
84
+ required: true
85
+
86
+ - type: dropdown
87
+ id: category
88
+ attributes:
89
+ label: Feature Category
90
+ description: What area does this feature relate to?
91
+ options:
92
+ - CLI commands and flags
93
+ - Interactive mode (TUI)
94
+ - File operations
95
+ - API and model interactions
96
+ - MCP server integration
97
+ - Performance and speed
98
+ - Configuration and settings
99
+ - Developer tools/SDK
100
+ - Documentation
101
+ - Other
102
+ validations:
103
+ required: true
104
+
105
+ - type: textarea
106
+ id: use_case
107
+ attributes:
108
+ label: Use Case Example
109
+ description: |
110
+ Provide a concrete, real-world example of when you'd use this feature.
111
+ Walk us through a scenario step-by-step.
112
+ placeholder: |
113
+ Example scenario:
114
+ 1. I'm working on a React app with a Node.js backend
115
+ 2. I need to make changes to both frontend and backend
116
+ 3. With this feature, I could...
117
+ 4. This would save me time because...
118
+ validations:
119
+ required: false
120
+
121
+ - type: textarea
122
+ id: additional
123
+ attributes:
124
+ label: Additional Context
125
+ description: |
126
+ - Screenshots or mockups of the proposed feature
127
+ - Links to similar features in other tools
128
+ - Technical considerations or constraints
129
+ - Any other relevant information
130
+ placeholder: Add any other context, mockups, or examples here...
131
+ validations:
132
+ required: false
@@ -0,0 +1,220 @@
1
+ name: 🤖 Model Behavior Issue
2
+ description: Report unexpected Recoder model behavior, incorrect actions, or permission violations
3
+ title: "[MODEL] "
4
+ labels:
5
+ - model
6
+ body:
7
+ - type: markdown
8
+ attributes:
9
+ value: |
10
+ ## Report Unexpected Model Behavior
11
+
12
+ Use this template when Recoder does something unexpected, makes unwanted changes, or behaves inconsistently with your instructions.
13
+
14
+ **This is for:** Unexpected actions, file modifications outside scope, ignoring instructions, making assumptions
15
+ **NOT for:** Crashes, API errors, or installation issues (use Bug Report instead)
16
+
17
+ - type: checkboxes
18
+ id: preflight
19
+ attributes:
20
+ label: Preflight Checklist
21
+ description: Please confirm before submitting
22
+ options:
23
+ - label: I have searched [existing issues](https://github.com/anthropics/claude-code/issues?q=is%3Aissue%20state%3Aopen%20label%3Amodel) for similar behavior reports
24
+ required: true
25
+ - label: This report does NOT contain sensitive information (API keys, passwords, etc.)
26
+ required: true
27
+
28
+ - type: dropdown
29
+ id: behavior_type
30
+ attributes:
31
+ label: Type of Behavior Issue
32
+ description: What category best describes the unexpected behavior?
33
+ options:
34
+ - Recoder modified files I didn't ask it to modify
35
+ - Recoder accessed files outside the working directory
36
+ - Recoder ignored my instructions or configuration
37
+ - Recoder reverted/undid previous changes without asking
38
+ - Recoder made incorrect assumptions about my project
39
+ - Recoder refused a reasonable request
40
+ - Recoder's behavior changed between sessions
41
+ - Subagent behaved unexpectedly
42
+ - Other unexpected behavior
43
+ validations:
44
+ required: true
45
+
46
+ - type: textarea
47
+ id: what_you_asked
48
+ attributes:
49
+ label: What You Asked Recoder to Do
50
+ description: Provide the exact prompt or command you gave
51
+ placeholder: |
52
+ I asked: "Update the README.md file to add installation instructions"
53
+
54
+ Or I ran: `claude "fix the bug in auth.js"`
55
+ validations:
56
+ required: true
57
+
58
+ - type: textarea
59
+ id: what_claude_did
60
+ attributes:
61
+ label: What Recoder Actually Did
62
+ description: Describe step-by-step what Recoder did instead
63
+ placeholder: |
64
+ 1. Recoder read README.md
65
+ 2. Instead of updating it, Recoder deleted the entire file
66
+ 3. Created a new README from scratch with different content
67
+ 4. Also modified package.json without being asked
68
+ 5. Changed .gitignore file
69
+ validations:
70
+ required: true
71
+
72
+ - type: textarea
73
+ id: expected_behavior
74
+ attributes:
75
+ label: Expected Behavior
76
+ description: What should Recoder have done?
77
+ placeholder: |
78
+ Recoder should have:
79
+ 1. Read the existing README.md
80
+ 2. Added an "Installation" section
81
+ 3. Only modified that single file
82
+ 4. Not touched any other files
83
+ validations:
84
+ required: true
85
+
86
+ - type: textarea
87
+ id: files_affected
88
+ attributes:
89
+ label: Files Affected
90
+ description: |
91
+ List all files that were accessed or modified (even if you didn't expect them to be)
92
+ placeholder: |
93
+ Modified:
94
+ - README.md (deleted and recreated)
95
+ - package.json (version bumped - not requested)
96
+ - .gitignore (added entries - not requested)
97
+
98
+ Read (unexpectedly):
99
+ - /Users/me/.ssh/config
100
+ - ../../../parent-directory/secrets.env
101
+ render: shell
102
+ validations:
103
+ required: false
104
+
105
+ - type: dropdown
106
+ id: permission_mode
107
+ attributes:
108
+ label: Permission Mode
109
+ description: What permission settings were active?
110
+ options:
111
+ - Accept Edits was ON (auto-accepting changes)
112
+ - Accept Edits was OFF (manual approval required)
113
+ - I don't know / Not sure
114
+ validations:
115
+ required: true
116
+
117
+ - type: dropdown
118
+ id: reproducible
119
+ attributes:
120
+ label: Can You Reproduce This?
121
+ description: Does this happen consistently?
122
+ options:
123
+ - Yes, every time with the same prompt
124
+ - Sometimes (intermittent)
125
+ - No, only happened once
126
+ - Haven't tried to reproduce
127
+ validations:
128
+ required: true
129
+
130
+ - type: textarea
131
+ id: reproduction_steps
132
+ attributes:
133
+ label: Steps to Reproduce
134
+ description: If reproducible, provide minimal steps
135
+ placeholder: |
136
+ 1. Create a new directory with a simple README.md
137
+ 2. Ask Recoder Code to "improve the README"
138
+ 3. Recoder will delete and recreate the file instead of editing
139
+ validations:
140
+ required: false
141
+
142
+ - type: dropdown
143
+ id: model
144
+ attributes:
145
+ label: Recoder Model
146
+ description: Which model were you using? (Run `/model` to check)
147
+ options:
148
+ - Sonnet
149
+ - Opus
150
+ - Haiku
151
+ - Not sure
152
+ - Other
153
+ validations:
154
+ required: true
155
+
156
+ - type: textarea
157
+ id: conversation_log
158
+ attributes:
159
+ label: Relevant Conversation
160
+ description: |
161
+ Include relevant parts of Recoder's responses, especially where it explains what it's doing
162
+ placeholder: |
163
+ Recoder said: "I'll help you update the README. Let me first delete the old one and create a fresh version..."
164
+
165
+ [Then proceeded to delete without asking for confirmation]
166
+ render: markdown
167
+ validations:
168
+ required: false
169
+
170
+ - type: dropdown
171
+ id: impact
172
+ attributes:
173
+ label: Impact
174
+ description: How severe was the impact of this behavior?
175
+ options:
176
+ - Critical - Data loss or corrupted project
177
+ - High - Significant unwanted changes
178
+ - Medium - Extra work to undo changes
179
+ - Low - Minor inconvenience
180
+ validations:
181
+ required: true
182
+
183
+ - type: input
184
+ id: version
185
+ attributes:
186
+ label: Recoder Code Version
187
+ description: Run `claude --version` and paste the output
188
+ placeholder: "e.g., 1.0.123 (Recoder Code)"
189
+ validations:
190
+ required: true
191
+
192
+ - type: dropdown
193
+ id: platform
194
+ attributes:
195
+ label: Platform
196
+ description: Which API platform are you using?
197
+ options:
198
+ - Anthropic API
199
+ - AWS Bedrock
200
+ - Google Vertex AI
201
+ - Other
202
+ validations:
203
+ required: true
204
+
205
+ - type: textarea
206
+ id: additional
207
+ attributes:
208
+ label: Additional Context
209
+ description: |
210
+ - Any patterns you've noticed
211
+ - Similar behavior in other sessions
212
+ - Specific file types or project structures that trigger this
213
+ - Screenshots if relevant
214
+ placeholder: |
215
+ This seems to happen more often with:
216
+ - Python projects
217
+ - When there are multiple similar files
218
+ - After long conversations
219
+ validations:
220
+ required: false
@@ -0,0 +1,31 @@
1
+ name: Auto-close duplicate issues
2
+ description: Auto-closes issues that are duplicates of existing issues
3
+ on:
4
+ schedule:
5
+ - cron: "0 9 * * *"
6
+ workflow_dispatch:
7
+
8
+ jobs:
9
+ auto-close-duplicates:
10
+ runs-on: ubuntu-latest
11
+ timeout-minutes: 10
12
+ permissions:
13
+ contents: read
14
+ issues: write
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Setup Bun
21
+ uses: oven-sh/setup-bun@v2
22
+ with:
23
+ bun-version: latest
24
+
25
+ - name: Auto-close duplicate issues
26
+ run: bun run scripts/auto-close-duplicates.ts
27
+ env:
28
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29
+ GITHUB_REPOSITORY_OWNER: ${{ github.repository_owner }}
30
+ GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}
31
+ STATSIG_API_KEY: ${{ secrets.STATSIG_API_KEY }}
@@ -0,0 +1,44 @@
1
+ name: Backfill Duplicate Comments
2
+ description: Triggers duplicate detection for old issues that don't have duplicate comments
3
+
4
+ on:
5
+ workflow_dispatch:
6
+ inputs:
7
+ days_back:
8
+ description: 'How many days back to look for old issues'
9
+ required: false
10
+ default: '90'
11
+ type: string
12
+ dry_run:
13
+ description: 'Dry run mode (true to only log what would be done)'
14
+ required: false
15
+ default: 'true'
16
+ type: choice
17
+ options:
18
+ - 'true'
19
+ - 'false'
20
+
21
+ jobs:
22
+ backfill-duplicate-comments:
23
+ runs-on: ubuntu-latest
24
+ timeout-minutes: 30
25
+ permissions:
26
+ contents: read
27
+ issues: read
28
+ actions: write
29
+
30
+ steps:
31
+ - name: Checkout repository
32
+ uses: actions/checkout@v4
33
+
34
+ - name: Setup Bun
35
+ uses: oven-sh/setup-bun@v2
36
+ with:
37
+ bun-version: latest
38
+
39
+ - name: Backfill duplicate comments
40
+ run: bun run scripts/backfill-duplicate-comments.ts
41
+ env:
42
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
43
+ DAYS_BACK: ${{ inputs.days_back }}
44
+ DRY_RUN: ${{ inputs.dry_run }}
@@ -0,0 +1,80 @@
1
+ name: Recoder Issue Dedupe
2
+ description: Automatically dedupe GitHub issues using Recoder Code
3
+ on:
4
+ issues:
5
+ types: [opened]
6
+ workflow_dispatch:
7
+ inputs:
8
+ issue_number:
9
+ description: 'Issue number to process for duplicate detection'
10
+ required: true
11
+ type: string
12
+
13
+ jobs:
14
+ claude-dedupe-issues:
15
+ runs-on: ubuntu-latest
16
+ timeout-minutes: 10
17
+ permissions:
18
+ contents: read
19
+ issues: write
20
+
21
+ steps:
22
+ - name: Checkout repository
23
+ uses: actions/checkout@v4
24
+
25
+ - name: Run Recoder Code slash command
26
+ uses: anthropics/claude-code-base-action@beta
27
+ with:
28
+ prompt: "/dedupe ${{ github.repository }}/issues/${{ github.event.issue.number || inputs.issue_number }}"
29
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
30
+ claude_env: |
31
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32
+
33
+ - name: Log duplicate comment event to Statsig
34
+ if: always()
35
+ env:
36
+ STATSIG_API_KEY: ${{ secrets.STATSIG_API_KEY }}
37
+ run: |
38
+ ISSUE_NUMBER=${{ github.event.issue.number || inputs.issue_number }}
39
+ REPO=${{ github.repository }}
40
+
41
+ if [ -z "$STATSIG_API_KEY" ]; then
42
+ echo "STATSIG_API_KEY not found, skipping Statsig logging"
43
+ exit 0
44
+ fi
45
+
46
+ # Prepare the event payload
47
+ EVENT_PAYLOAD=$(jq -n \
48
+ --arg issue_number "$ISSUE_NUMBER" \
49
+ --arg repo "$REPO" \
50
+ --arg triggered_by "${{ github.event_name }}" \
51
+ '{
52
+ events: [{
53
+ eventName: "github_duplicate_comment_added",
54
+ value: 1,
55
+ metadata: {
56
+ repository: $repo,
57
+ issue_number: ($issue_number | tonumber),
58
+ triggered_by: $triggered_by,
59
+ workflow_run_id: "${{ github.run_id }}"
60
+ },
61
+ time: (now | floor | tostring)
62
+ }]
63
+ }')
64
+
65
+ # Send to Statsig API
66
+ echo "Logging duplicate comment event to Statsig for issue #${ISSUE_NUMBER}"
67
+
68
+ RESPONSE=$(curl -s -w "\n%{http_code}" -X POST https://events.statsigapi.net/v1/log_event \
69
+ -H "Content-Type: application/json" \
70
+ -H "STATSIG-API-KEY: ${STATSIG_API_KEY}" \
71
+ -d "$EVENT_PAYLOAD")
72
+
73
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
74
+ BODY=$(echo "$RESPONSE" | head -n-1)
75
+
76
+ if [ "$HTTP_CODE" -eq 200 ] || [ "$HTTP_CODE" -eq 202 ]; then
77
+ echo "Successfully logged duplicate comment event for issue #${ISSUE_NUMBER}"
78
+ else
79
+ echo "Failed to log duplicate comment event for issue #${ISSUE_NUMBER}. HTTP ${HTTP_CODE}: ${BODY}"
80
+ fi
@@ -0,0 +1,106 @@
1
+ name: Recoder Issue Triage
2
+ description: Automatically triage GitHub issues using Recoder Code
3
+ on:
4
+ issues:
5
+ types: [opened]
6
+
7
+ jobs:
8
+ triage-issue:
9
+ runs-on: ubuntu-latest
10
+ timeout-minutes: 10
11
+ permissions:
12
+ contents: read
13
+ issues: write
14
+
15
+ steps:
16
+ - name: Checkout repository
17
+ uses: actions/checkout@v4
18
+
19
+ - name: Create triage prompt
20
+ run: |
21
+ mkdir -p /tmp/claude-prompts
22
+ cat > /tmp/claude-prompts/triage-prompt.txt << 'EOF'
23
+ You're an issue triage assistant for GitHub issues. Your task is to analyze the issue and select appropriate labels from the provided list.
24
+
25
+ IMPORTANT: Don't post any comments or messages to the issue. Your only action should be to apply labels.
26
+
27
+ Issue Information:
28
+ - REPO: ${{ github.repository }}
29
+ - ISSUE_NUMBER: ${{ github.event.issue.number }}
30
+
31
+ TASK OVERVIEW:
32
+
33
+ 1. First, fetch the list of labels available in this repository by running: `gh label list`. Run exactly this command with nothing else.
34
+
35
+ 2. Next, use the GitHub tools to get context about the issue:
36
+ - You have access to these tools:
37
+ - mcp__github__get_issue: Use this to retrieve the current issue's details including title, description, and existing labels
38
+ - mcp__github__get_issue_comments: Use this to read any discussion or additional context provided in the comments
39
+ - mcp__github__update_issue: Use this to apply labels to the issue (do not use this for commenting)
40
+ - mcp__github__search_issues: Use this to find similar issues that might provide context for proper categorization and to identify potential duplicate issues
41
+ - mcp__github__list_issues: Use this to understand patterns in how other issues are labeled
42
+ - Start by using mcp__github__get_issue to get the issue details
43
+
44
+ 3. Analyze the issue content, considering:
45
+ - The issue title and description
46
+ - The type of issue (bug report, feature request, question, etc.)
47
+ - Technical areas mentioned
48
+ - Severity or priority indicators
49
+ - User impact
50
+ - Components affected
51
+
52
+ 4. Select appropriate labels from the available labels list provided above:
53
+ - Choose labels that accurately reflect the issue's nature
54
+ - Be specific but comprehensive
55
+ - Select priority labels if you can determine urgency (high-priority, med-priority, or low-priority)
56
+ - Consider platform labels (android, ios) if applicable
57
+ - If you find similar issues using mcp__github__search_issues, consider using a "duplicate" label if appropriate. Only do so if the issue is a duplicate of another OPEN issue.
58
+
59
+ 5. Apply the selected labels:
60
+ - Use mcp__github__update_issue to apply your selected labels
61
+ - DO NOT post any comments explaining your decision
62
+ - DO NOT communicate directly with users
63
+ - If no labels are clearly applicable, do not apply any labels
64
+
65
+ IMPORTANT GUIDELINES:
66
+ - Be thorough in your analysis
67
+ - Only select labels from the provided list above
68
+ - DO NOT post any comments to the issue
69
+ - Your ONLY action should be to apply labels using mcp__github__update_issue
70
+ - It's okay to not add any labels if none are clearly applicable
71
+ EOF
72
+
73
+ - name: Setup GitHub MCP Server
74
+ run: |
75
+ mkdir -p /tmp/mcp-config
76
+ cat > /tmp/mcp-config/mcp-servers.json << 'EOF'
77
+ {
78
+ "mcpServers": {
79
+ "github": {
80
+ "command": "docker",
81
+ "args": [
82
+ "run",
83
+ "-i",
84
+ "--rm",
85
+ "-e",
86
+ "GITHUB_PERSONAL_ACCESS_TOKEN",
87
+ "ghcr.io/github/github-mcp-server:sha-7aced2b"
88
+ ],
89
+ "env": {
90
+ "GITHUB_PERSONAL_ACCESS_TOKEN": "${{ secrets.GITHUB_TOKEN }}"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ EOF
96
+
97
+ - name: Run Recoder Code for Issue Triage
98
+ uses: anthropics/claude-code-base-action@beta
99
+ with:
100
+ prompt_file: /tmp/claude-prompts/triage-prompt.txt
101
+ allowed_tools: "Bash(gh label list),mcp__github__get_issue,mcp__github__get_issue_comments,mcp__github__update_issue,mcp__github__search_issues,mcp__github__list_issues"
102
+ timeout_minutes: "5"
103
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
104
+ mcp_config: /tmp/mcp-config/mcp-servers.json
105
+ claude_env: |
106
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,37 @@
1
+ name: Recoder Code
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+ pull_request_review_comment:
7
+ types: [created]
8
+ issues:
9
+ types: [opened, assigned]
10
+ pull_request_review:
11
+ types: [submitted]
12
+
13
+ jobs:
14
+ claude:
15
+ if: |
16
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20
+ runs-on: ubuntu-latest
21
+ permissions:
22
+ contents: read
23
+ pull-requests: read
24
+ issues: read
25
+ id-token: write
26
+ steps:
27
+ - name: Checkout repository
28
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
29
+ with:
30
+ fetch-depth: 1
31
+
32
+ - name: Run Recoder Code
33
+ id: claude
34
+ uses: anthropics/claude-code-action@beta
35
+ with:
36
+ anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
37
+
@@ -0,0 +1,28 @@
1
+ name: Issue Opened Dispatch
2
+
3
+ on:
4
+ issues:
5
+ types: [opened]
6
+
7
+ permissions:
8
+ issues: read
9
+ actions: write
10
+
11
+ jobs:
12
+ notify:
13
+ runs-on: ubuntu-latest
14
+ timeout-minutes: 1
15
+ steps:
16
+ - name: Process new issue
17
+ env:
18
+ ISSUE_URL: ${{ github.event.issue.html_url }}
19
+ ISSUE_NUMBER: ${{ github.event.issue.number }}
20
+ ISSUE_TITLE: ${{ github.event.issue.title }}
21
+ TARGET_REPO: ${{ secrets.ISSUE_OPENED_DISPATCH_TARGET_REPO }}
22
+ GH_TOKEN: ${{ secrets.ISSUE_OPENED_DISPATCH_TOKEN }}
23
+ run: |
24
+ gh api repos/${TARGET_REPO}/dispatches \
25
+ -f event_type=issue_opened \
26
+ -f client_payload[issue_url]="${ISSUE_URL}" || {
27
+ exit 0
28
+ }