Claude Code Plugins

Community-maintained marketplace

Feedback

write-and-commit

@cowwoc/styler
2
0

Create file and commit atomically (60-75% faster than step-by-step)

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name write-and-commit
description Create file and commit atomically (60-75% faster than step-by-step)
allowed-tools Bash, Write

Write and Commit Skill

Purpose: Create a new file and commit it in a single atomic operation, reducing LLM round-trips from 4-5 to 2-3.

Performance: 60-75% faster than traditional workflow

When to Use This Skill

✅ Use write-and-commit When:

  • Creating a new file that will be committed immediately
  • File content is ready and complete (no iterative edits needed)
  • You want to save time on routine file creation
  • Creating scripts that need executable permissions
  • Adding configuration files or documentation
  • Creating test files or example code

❌ Do NOT Use When:

  • Editing existing files (use Edit tool instead)
  • File content is complex and may need iteration
  • Creating multiple related files that should be in one commit together
  • File is part of larger refactoring (commit all changes together)
  • You need to review the file before committing
  • Creating files in task protocol states that require agent delegation

Performance Comparison

Traditional Workflow (4-5 LLM round-trips, 20-30s)

[LLM Round 1] Write file
  → Write tool: Create file with content

[LLM Round 2] Make executable (if needed)
  → Bash: chmod +x file.sh

[LLM Round 3] Stage file
  → Bash: git add file.sh

[LLM Round 4] Commit file
  → Bash: git commit -m "Add file"

[LLM Round 5] Report success
  → Report commit SHA to user

Total: 20-30 seconds, 4-5 LLM round-trips

Optimized Workflow (2-3 LLM round-trips, 5-8s)

[LLM Round 1] Plan and execute
  → Write content to temp file
  → Write commit message to temp file
  → Bash: write-and-commit.sh file.sh /tmp/content /tmp/msg --executable

[LLM Round 2] Report success
  → Parse JSON result
  → Report commit SHA to user

Total: 5-8 seconds, 2-3 LLM round-trips

Savings: 60-75% faster

Usage

Basic File Creation

# Step 1: Prepare content and commit message (in LLM)
cat > /tmp/content-$$.txt <<'EOF'
File content goes here...
EOF

cat > /tmp/commit-msg-$$.txt <<'EOF'
Add new feature file

Description of what this file does.

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
EOF

# Step 2: Execute atomic creation
/workspace/main/.claude/scripts/write-and-commit.sh \
  "path/to/file.txt" \
  "/tmp/content-$$.txt" \
  "/tmp/commit-msg-$$.txt"

Executable Script Creation

# For scripts that need executable permissions
/workspace/main/.claude/scripts/write-and-commit.sh \
  ".claude/scripts/my-script.sh" \
  "/tmp/content-$$.txt" \
  "/tmp/commit-msg-$$.txt" \
  --executable

Output Format

Script returns JSON:

{
  "status": "success",
  "message": "File created and committed successfully",
  "duration_seconds": 2,
  "file_path": "path/to/file.txt",
  "executable": false,
  "commit_sha": "abc123def456",
  "working_directory": "/workspace/main",
  "timestamp": "2025-11-08T00:15:30-05:00"
}

LLM Integration Pattern

Example: User asks to create a new utility script

User: Create a script to clean up temporary files

LLM Round 1 (Planning + Execution):

# Draft script content
cat > /tmp/cleanup-script-$$.sh <<'SCRIPT'
#!/bin/bash
# Clean up temporary files
find /tmp -name "*.tmp" -mtime +7 -delete
SCRIPT

# Draft commit message
cat > /tmp/commit-msg-$$.txt <<'MSG'
Add temporary file cleanup script

Removes .tmp files older than 7 days from /tmp directory.

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
MSG

# Execute atomic creation
/workspace/main/.claude/scripts/write-and-commit.sh \
  ".claude/scripts/cleanup-temp.sh" \
  "/tmp/cleanup-script-$$.sh" \
  "/tmp/commit-msg-$$.txt" \
  --executable

Script Output:

{
  "status": "success",
  "commit_sha": "3f8a920",
  "duration_seconds": 2,
  ...
}

LLM Round 2 (Verification):

Created cleanup script successfully!
- File: .claude/scripts/cleanup-temp.sh
- Executable: Yes
- Commit: 3f8a920
- Duration: 2 seconds

Safety Features

Precondition Validation

  • ✅ Verifies we're in a git repository
  • ✅ Creates parent directories if needed
  • ✅ Warns if overwriting existing file

Atomic Operation

  • ✅ File creation and commit happen together
  • ✅ If commit fails, file still exists (staged)
  • ✅ Can be reverted with standard git commands

Error Handling

On any error, script:

  • Exits immediately with clear error message
  • Returns JSON with error status
  • Leaves repository in clean state (file may be staged)

Recovery: If script fails after file creation but before commit:

# File exists but not committed
git reset HEAD <file>  # Unstage
rm <file>              # Remove if unwanted

Common Use Cases

1. Create Configuration File

# Creating .gitignore
cat > /tmp/content.txt <<'EOF'
*.tmp
*.log
build/
EOF

write-and-commit.sh ".gitignore" /tmp/content.txt /tmp/msg.txt

2. Create Documentation

# Creating README for a subdirectory
cat > /tmp/content.txt <<'EOF'
# Component Documentation
...
EOF

write-and-commit.sh "docs/component/README.md" /tmp/content.txt /tmp/msg.txt

3. Create Test File

# Creating a test file
cat > /tmp/content.txt <<'EOF'
public class MyTest {
  @Test
  public void testFeature() {
    // Test implementation
  }
}
EOF

write-and-commit.sh "src/test/java/MyTest.java" /tmp/content.txt /tmp/msg.txt

4. Create Executable Script

# Creating a hook script
cat > /tmp/content.txt <<'EOF'
#!/bin/bash
# Hook implementation
EOF

write-and-commit.sh ".claude/hooks/my-hook.sh" /tmp/content.txt /tmp/msg.txt --executable

When NOT to Use

Multiple Related Files

❌ Wrong: Create files one-by-one with write-and-commit

write-and-commit.sh file1.txt /tmp/content1 /tmp/msg1
write-and-commit.sh file2.txt /tmp/content2 /tmp/msg2
write-and-commit.sh file3.txt /tmp/content3 /tmp/msg3
# Result: 3 separate commits

✅ Correct: Use traditional workflow, commit together

Write file1.txt
Write file2.txt
Write file3.txt
git add file1.txt file2.txt file3.txt
git commit -m "Add related files"
# Result: 1 commit with all files

Files Needing Review

❌ Wrong: Commit immediately if unsure about content ✅ Correct: Create with Write tool, review, then commit manually

Task Protocol States

❌ Wrong: Main agent creates source files in IMPLEMENTATION state ✅ Correct: Delegate to stakeholder agents via Task tool

Frequency and Impact

Expected Usage: 10-20 times per day

Time Savings per Use: ~15 seconds

Daily Impact: 150-300 seconds (2.5-5 minutes)

Monthly Impact: 50-100 minutes (almost 2 hours)

Related

  • Write tool: For creating files without immediate commit
  • Edit tool: For modifying existing files
  • git-squash-optimized.sh: For combining commits after creation
  • CLAUDE.md § Backup-Verify-Cleanup Pattern: Git operation best practices