Compare commits

...

30 Commits

Author SHA1 Message Date
Ashwin Bhat
45461b9dce adjust params 2025-07-29 08:57:21 -07:00
Ashwin Bhat
4284a235c2 PR feedback 2025-07-28 12:44:45 -07:00
Ashwin Bhat
7039affbe6 Add GitHub workflow to lock stale issues
- Locks issues closed for 7+ days without activity
- Runs daily at 7am Pacific (2pm UTC)
- Includes manual workflow dispatch trigger
- Posts helpful comment before locking with guidance for new issues

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-28 11:18:18 -07:00
GitHub Actions
55219b8b4e chore: Update CHANGELOG.md 2025-07-25 21:06:44 +00:00
GitHub Actions
812c27b8b3 chore: Update CHANGELOG.md 2025-07-24 21:01:31 +00:00
GitHub Actions
e0d79c3571 chore: Update CHANGELOG.md 2025-07-23 21:21:28 +00:00
GitHub Actions
c8207b4f68 chore: Update CHANGELOG.md 2025-07-23 21:17:14 +00:00
GitHub Actions
4c056f7a09 chore: Update CHANGELOG.md 2025-07-19 00:06:08 +00:00
GitHub Actions
b328530abd chore: Update CHANGELOG.md 2025-07-18 20:30:50 +00:00
GitHub Actions
486b305708 chore: Update CHANGELOG.md 2025-07-18 16:41:25 +00:00
GitHub Actions
68d43db2a0 chore: Update CHANGELOG.md 2025-07-17 22:39:14 +00:00
GitHub Actions
90c26533d1 chore: Update CHANGELOG.md 2025-07-16 23:50:28 +00:00
GitHub Actions
d45bce242d chore: Update CHANGELOG.md 2025-07-11 22:54:23 +00:00
Robert Boyce
54a4ed0f5e Merge pull request #3310 from ddworken/main
Isolate devcontainer mounts using ${devcontainerId}
2025-07-10 15:26:42 -07:00
David Dworken
33e37bd828 Fix devcontainer volume security vulnerability
Use ${devcontainerId} variable to create project-specific volumes,
preventing cross-container data access. This addresses the security
issue where multiple containers could share sensitive data through
named volumes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-10 15:13:18 -07:00
GitHub Actions
ff15c6f147 chore: Update CHANGELOG.md 2025-07-10 16:17:34 +00:00
GitHub Actions
0cbe1dcac5 chore: Update CHANGELOG.md 2025-07-08 23:54:58 +00:00
GitHub Actions
a705bca81c chore: Update CHANGELOG.md 2025-07-08 23:08:40 +00:00
GitHub Actions
ecaf0d818a chore: Update CHANGELOG.md 2025-07-07 22:48:22 +00:00
GitHub Actions
397442ddf5 chore: Update CHANGELOG.md 2025-07-03 21:09:58 +00:00
GitHub Actions
5def9264e5 chore: Update CHANGELOG.md 2025-07-03 03:54:12 +00:00
ant-kurt
0149827a77 Merge pull request #951 from Masa1984a/feat/Add-PowerShell-script-for-Windows-DevContainer-setup
Add PowerShell script for Windows DevContainer setup (Docker/Podman)
2025-07-02 18:09:19 -07:00
Kurt Carpenter
c93c724eeb PowerShell parameter improvements 2025-07-02 18:06:00 -07:00
Masa1984a
545d78c331 Apply review suggestions: Add ValidateSet and improve documentation 2025-07-03 06:29:38 +09:00
GitHub Actions
e16c9857ef chore: Update CHANGELOG.md 2025-07-02 18:25:23 +00:00
Thariq Shihipar
a39ae004aa Merge pull request #2871 from anthropics/examples/hook
Example Hook
2025-07-02 11:01:12 -07:00
Dickson Tsai
74ba615503 Script polish 2025-07-02 11:00:03 -07:00
Thariq Shihipar
3d2166eec9 proper hook file 2025-07-02 09:32:33 -07:00
Ashwin Bhat
beacb95320 Add checkout step to issue triage workflow (#2867)
Added a checkout step to the GitHub Actions workflow for issue triage
to ensure the repository is available during the triage process.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-02 09:01:44 -07:00
Massan
11cfc055af Add PowerShell script for Windows DevContainer setup (Docker/Podman) 2025-05-04 22:05:27 +09:00
6 changed files with 372 additions and 4 deletions

View File

@@ -38,8 +38,8 @@
},
"remoteUser": "node",
"mounts": [
"source=claude-code-bashhistory,target=/commandhistory,type=volume",
"source=claude-code-config,target=/home/node/.claude,type=volume"
"source=claude-code-bashhistory-${devcontainerId},target=/commandhistory,type=volume",
"source=claude-code-config-${devcontainerId},target=/home/node/.claude,type=volume"
],
"remoteEnv": {
"NODE_OPTIONS": "--max-old-space-size=4096",

View File

@@ -13,6 +13,9 @@ jobs:
issues: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Create triage prompt
run: |
mkdir -p /tmp/claude-prompts

View File

@@ -0,0 +1,27 @@
name: "Lock Stale Issues"
on:
schedule:
# 8am Pacific = 1pm UTC (2pm UTC during DST)
- cron: "0 14 * * *"
workflow_dispatch:
permissions:
issues: write
concurrency:
group: lock-threads
jobs:
lock-threads:
runs-on: ubuntu-latest
steps:
- uses: dessant/lock-threads@1bf7ec25051fe7c00bdd17e6a7cf3d7bfb7dc771 # v5.0.1
with:
issue-inactive-days: "7"
process-only: "issues"
issue-comment: >
This issue has been automatically locked since it was
closed and has not had any activity for 7 days.
If you're experiencing a similar issue, please file a new issue
and reference this one if it's relevant.

View File

@@ -1,8 +1,130 @@
# Changelog
## 1.0.61
- Added --settings flag to load settings from a JSON file
## 1.0.60
- You can now create custom subagents for specialized tasks! Run /agents to get started
## 1.0.59
- Rename CLAUDE_CODE_BASH_PREFIX to CLAUDE_CODE_SHELL_PREFIX
- SDK: Added tool confirmation support with canUseTool callback
- SDK: Allow specifying env for spawned process
- Hooks: Exposed PermissionDecision to hooks (including "ask")
- Hooks: UserPromptSubmit now supports additionalContext in advanced JSON output
- Fixed issue where some Max users that specified Opus would still see fallback to Sonnet
## 1.0.58
- Added support for reading PDFs
- MCP: Improved server health status display in 'claude mcp list'
- Hooks: Added CLAUDE_PROJECT_DIR env var for hook commands
## 1.0.57
- Added support for specifying a model in slash commands
- Improved permission messages to help Claude understand allowed tools
- Fix: Remove trailing newlines from bash output in terminal wrapping
## 1.0.56
- Windows: Enabled shift+tab for mode switching on versions of Node.js that support terminal VT mode
- Fixes for WSL IDE detection
- Fix an issue causing awsRefreshHelper changes to .aws directory not to be picked up
## 1.0.55
- Clarified knowledge cutoff for Opus 4 and Sonnet 4 models
- Windows: fixed Ctrl+Z crash
- SDK: Added ability to capture error logging
- Add --system-prompt-file option to override system prompt in print mode
## 1.0.54
- Hooks: Added UserPromptSubmit hook and the current working directory to hook inputs
- Custom slash commands: Added argument-hint to frontmatter
- Windows: OAuth uses port 45454 and properly constructs browser URL
- Windows: mode switching now uses alt + m, and plan mode renders properly
- Shell: Switch to in-memory shell snapshot to fix file-related errors
## 1.0.53
- Updated @-mention file truncation from 100 lines to 2000 lines
- Add helper script settings for AWS token refresh: awsAuthRefresh (for foreground operations like aws sso login) and awsCredentialExport (for background operation with STS-like response).
## 1.0.52
- Added support for MCP server instructions
## 1.0.51
- Added support for native Windows (requires Git for Windows)
- Added support for Bedrock API keys through environment variable AWS_BEARER_TOKEN_BEDROCK
- Settings: /doctor can now help you identify and fix invalid setting files
- `--append-system-prompt` can now be used in interactive mode, not just --print/-p.
- Increased auto-compact warning threshold from 60% to 80%
- Fixed an issue with handling user directories with spaces for shell snapshots
- OTEL resource now includes os.type, os.version, host.arch, and wsl.version (if running on Windows Subsystem for Linux)
- Custom slash commands: Fixed user-level commands in subdirectories
- Plan mode: Fixed issue where rejected plan from sub-task would get discarded
## 1.0.48
- Fixed a bug in v1.0.45 where the app would sometimes freeze on launch
- Added progress messages to Bash tool based on the last 5 lines of command output
- Added expanding variables support for MCP server configuration
- Moved shell snapshots from /tmp to ~/.claude for more reliable Bash tool calls
- Improved IDE extension path handling when Claude Code runs in WSL
- Hooks: Added a PreCompact hook
- Vim mode: Added c, f/F, t/T
## 1.0.45
- Redesigned Search (Grep) tool with new tool input parameters and features
- Disabled IDE diffs for notebook files, fixing "Timeout waiting after 1000ms" error
- Fixed config file corruption issue by enforcing atomic writes
- Updated prompt input undo to Ctrl+\_ to avoid breaking existing Ctrl+U behavior, matching zsh's undo shortcut
- Stop Hooks: Fixed transcript path after /clear and fixed triggering when loop ends with tool call
- Custom slash commands: Restored namespacing in command names based on subdirectories. For example, .claude/commands/frontend/component.md is now /frontend:component, not /component.
## 1.0.44
- New /export command lets you quickly export a conversation for sharing
- MCP: resource_link tool results are now supported
- MCP: tool annotations and tool titles now display in /mcp view
- Changed Ctrl+Z to suspend Claude Code. Resume by running `fg`. Prompt input undo is now Ctrl+U.
## 1.0.43
- Fixed a bug where the theme selector was saving excessively
- Hooks: Added EPIPE system error handling
## 1.0.42
- Added tilde (`~`) expansion support to `/add-dir` command
## 1.0.41
- Hooks: Split Stop hook triggering into Stop and SubagentStop
- Hooks: Enabled optional timeout configuration for each command
- Hooks: Added "hook_event_name" to hook input
- Fixed a bug where MCP tools would display twice in tool list
- New tool parameters JSON for Bash tool in `tool_decision` event
## 1.0.40
- Fixed a bug causing API connection errors with UNABLE_TO_GET_ISSUER_CERT_LOCALLY if `NODE_EXTRA_CA_CERTS` was set
## 1.0.39
- New Active Time metric in OpenTelemetry logging
## 1.0.38
- Released [hooks](https://docs.anthropic.com/en/docs/claude-code/hooks). Special thanks to community input in [Github Issues](https://github.com/anthropics/claude-code/issues/712)
- Released hooks. Special thanks to community input in https://github.com/anthropics/claude-code/issues/712. Docs: https://docs.anthropic.com/en/docs/claude-code/hooks
## 1.0.37
@@ -24,7 +146,7 @@
## 1.0.33
- Improved logging functionality with session ID support
- Added undo functionality (Ctrl+Z and vim 'u' command)
- Added prompt input undo functionality (Ctrl+Z and vim 'u' command)
- Improvements to plan mode
## 1.0.32

View File

@@ -0,0 +1,133 @@
<#
.SYNOPSIS
Automates the setup and connection to a DevContainer environment using either Docker or Podman on Windows.
.DESCRIPTION
This script automates the process of initializing, starting, and connecting to a DevContainer
using either Docker or Podman as the container backend. It must be executed from the root
directory of your project and assumes the script is located in a 'Script' subdirectory.
.PARAMETER Backend
Specifies the container backend to use. Valid values are 'docker' or 'podman'.
.EXAMPLE
.\Script\run_devcontainer_claude_code.ps1 -Backend docker
Uses Docker as the container backend.
.EXAMPLE
.\Script\run_devcontainer_claude_code.ps1 -Backend podman
Uses Podman as the container backend.
.NOTES
Project Structure:
Project/
├── .devcontainer/
└── Script/
└── run_devcontainer_claude_code.ps1
#>
[CmdletBinding()]
param(
[Parameter(Mandatory=$true)]
[ValidateSet('docker','podman')]
[string]$Backend
)
# Notify script start
Write-Host "--- DevContainer Startup & Connection Script ---"
Write-Host "Using backend: $($Backend)"
# --- Backend-Specific Initialization ---
if ($Backend -eq 'podman') {
Write-Host "--- Podman Backend Initialization ---"
# --- Step 1a: Initialize Podman machine ---
Write-Host "Initializing Podman machine 'claudeVM'..."
try {
& podman machine init claudeVM
Write-Host "Podman machine 'claudeVM' initialized or already exists."
} catch {
Write-Error "Failed to initialize Podman machine: $($_.Exception.Message)"
exit 1 # Exit script on error
}
# --- Step 1b: Start Podman machine ---
Write-Host "Starting Podman machine 'claudeVM'..."
try {
& podman machine start claudeVM -q
Write-Host "Podman machine started or already running."
} catch {
Write-Error "Failed to start Podman machine: $($_.Exception.Message)"
exit 1
}
# --- Step 2: Set default connection ---
Write-Host "Setting default Podman connection to 'claudeVM'..."
try {
& podman system connection default claudeVM
Write-Host "Default connection set."
} catch {
Write-Warning "Failed to set default Podman connection (may be already set or machine issue): $($_.Exception.Message)"
}
} elseif ($Backend -eq 'docker') {
Write-Host "--- Docker Backend Initialization ---"
# --- Step 1 & 2: Check Docker Desktop ---
Write-Host "Checking if Docker Desktop is running and docker command is available..."
try {
docker info | Out-Null
Write-Host "Docker Desktop (daemon) is running."
} catch {
Write-Error "Docker Desktop is not running or docker command not found."
Write-Error "Please ensure Docker Desktop is running."
exit 1
}
}
# --- Step 3: Bring up DevContainer ---
Write-Host "Bringing up DevContainer in the current folder..."
try {
$arguments = @('up', '--workspace-folder', '.')
if ($Backend -eq 'podman') {
$arguments += '--docker-path', 'podman'
}
& devcontainer @arguments
Write-Host "DevContainer startup process completed."
} catch {
Write-Error "Failed to bring up DevContainer: $($_.Exception.Message)"
exit 1
}
# --- Step 4: Get DevContainer ID ---
Write-Host "Finding the DevContainer ID..."
$currentFolder = (Get-Location).Path
try {
$containerId = (& $Backend ps --filter "label=devcontainer.local_folder=$currentFolder" --format '{{.ID}}').Trim()
} catch {
$displayCommand = "$Backend ps --filter `"label=devcontainer.local_folder=$currentFolder`" --format '{{.ID}}'"
Write-Error "Failed to get container ID (Command: $displayCommand): $($_.Exception.Message)"
exit 1
}
if (-not $containerId) {
Write-Error "Could not find DevContainer ID for the current folder ('$currentFolder')."
Write-Error "Please check if 'devcontainer up' was successful and the container is running."
exit 1
}
Write-Host "Found container ID: $containerId"
# --- Step 5 & 6: Execute command and enter interactive shell inside container ---
Write-Host "Executing 'claude' command and then starting zsh session inside container $($containerId)..."
try {
& $Backend exec -it $containerId zsh -c 'claude; exec zsh'
Write-Host "Interactive session ended."
} catch {
$displayCommand = "$Backend exec -it $containerId zsh -c 'claude; exec zsh'"
Write-Error "Failed to execute command inside container (Command: $displayCommand): $($_.Exception.Message)"
exit 1
}
# Notify script completion
Write-Host "--- Script completed ---"

View File

@@ -0,0 +1,83 @@
#!/usr/bin/env python3
"""
Claude Code Hook: Bash Command Validator
=========================================
This hook runs as a PreToolUse hook for the Bash tool.
It validates bash commands against a set of rules before execution.
In this case it changes grep calls to using rg.
Read more about hooks here: https://docs.anthropic.com/en/docs/claude-code/hooks
Make sure to change your path to your actual script.
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "python3 /path/to/claude-code/examples/hooks/bash_command_validator_example.py"
}
]
}
]
}
}
"""
import json
import re
import sys
# Define validation rules as a list of (regex pattern, message) tuples
_VALIDATION_RULES = [
(
r"^grep\b(?!.*\|)",
"Use 'rg' (ripgrep) instead of 'grep' for better performance and features",
),
(
r"^find\s+\S+\s+-name\b",
"Use 'rg --files | rg pattern' or 'rg --files -g pattern' instead of 'find -name' for better performance",
),
]
def _validate_command(command: str) -> list[str]:
issues = []
for pattern, message in _VALIDATION_RULES:
if re.search(pattern, command):
issues.append(message)
return issues
def main():
try:
input_data = json.load(sys.stdin)
except json.JSONDecodeError as e:
print(f"Error: Invalid JSON input: {e}", file=sys.stderr)
# Exit code 1 shows stderr to the user but not to Claude
sys.exit(1)
tool_name = input_data.get("tool_name", "")
if tool_name != "Bash":
sys.exit(0)
tool_input = input_data.get("tool_input", {})
command = tool_input.get("command", "")
if not command:
sys.exit(0)
issues = _validate_command(command)
if issues:
for message in issues:
print(f"• {message}", file=sys.stderr)
# Exit code 2 blocks tool call and shows stderr to Claude
sys.exit(2)
if __name__ == "__main__":
main()