Agent skill

implementation-patterns

Five idempotency patterns for automation: check-before-act, upsert, force overwrite, unique identifiers, and tombstones. Choose based on constraints and APIs.

Stars 1
Forks 2

Install this agent skill to your Project

npx add-skill https://github.com/adaptive-enforcement-lab/claude-skills/tree/main/plugins/patterns/skills/implementation-patterns

SKILL.md

Implementation Patterns

When to Use This Skill

Pattern Best For Tradeoff
Check-Before-Act Creating resources Race conditions possible
Upsert APIs with atomic operations Not universally available
Force Overwrite Content that can be safely replaced Destructive if misused
Unique Identifiers Natural deduplication ID logic can be complex
Tombstone Markers Multi-step operations Markers need cleanup

Implementation

Five patterns for making operations idempotent. Each has tradeoffs; choose based on your constraints.


Pattern Overview

Pattern Best For Tradeoff
Check-Before-Act Creating resources Race conditions possible
Upsert APIs with atomic operations Not universally available
Force Overwrite Content that can be safely replaced Destructive if misused
Unique Identifiers Natural deduplication ID logic can be complex
Tombstone Markers Multi-step operations Markers need cleanup

Quick Reference

Check-Before-Act

The most common pattern. Check if the target state exists before attempting to create it.

bash
if git ls-remote --heads origin "$BRANCH" | grep -q "$BRANCH"; then
  git checkout -B "$BRANCH" "origin/$BRANCH"
else
  git checkout -b "$BRANCH"
fi

Create-or-Update (Upsert)

Use APIs or commands that handle both cases atomically.

bash
gh release create v1.0.0 --notes "Release" || gh release edit v1.0.0 --notes "Release"

Force Overwrite

Don't check, just overwrite. Safe when overwriting with identical content is acceptable.

bash
git push --force-with-lease origin "$BRANCH"

Unique Identifiers

Generate deterministic IDs so duplicate operations target the same resource.

bash
BRANCH="update-$(sha256sum file.txt | cut -c1-8)"

Tombstone/Marker Files

Leave markers indicating operations completed.

bash
MARKER=".completed-$RUN_ID"
[ -f "$MARKER" ] && exit 0
# Do work...
touch "$MARKER"

Choosing a Pattern

See examples.md for detailed code examples.

Scenario Recommended Pattern
Creating resources (PRs, branches, files) Check-Before-Act
Updating existing resources Upsert or Force Overwrite
Operations with natural keys Unique Identifiers
Complex multi-step operations Tombstone Markers
API supports atomic operations Upsert

Combine Patterns

Real-world automation often combines multiple patterns. A workflow might use Check-Before-Act for PR creation, Force Overwrite for branch updates, and Unique Identifiers for naming.

Pattern Overview

Pattern Best For Tradeoff
Check-Before-Act Creating resources Race conditions possible
Upsert APIs with atomic operations Not universally available
Force Overwrite Content that can be safely replaced Destructive if misused
Unique Identifiers Natural deduplication ID logic can be complex
Tombstone Markers Multi-step operations Markers need cleanup

Quick Reference

Check-Before-Act

The most common pattern. Check if the target state exists before attempting to create it.

bash
if git ls-remote --heads origin "$BRANCH" | grep -q "$BRANCH"; then
  git checkout -B "$BRANCH" "origin/$BRANCH"
else
  git checkout -b "$BRANCH"
fi

Create-or-Update (Upsert)

Use APIs or commands that handle both cases atomically.

bash
gh release create v1.0.0 --notes "Release" || gh release edit v1.0.0 --notes "Release"

Force Overwrite

Don't check, just overwrite. Safe when overwriting with identical content is acceptable.

bash
git push --force-with-lease origin "$BRANCH"

Unique Identifiers

Generate deterministic IDs so duplicate operations target the same resource.

bash
BRANCH="update-$(sha256sum file.txt | cut -c1-8)"

Tombstone/Marker Files

Leave markers indicating operations completed.

bash
MARKER=".completed-$RUN_ID"
[ -f "$MARKER" ] && exit 0
# Do work...
touch "$MARKER"

Choosing a Pattern

See examples.md for detailed code examples.

Scenario Recommended Pattern
Creating resources (PRs, branches, files) Check-Before-Act
Updating existing resources Upsert or Force Overwrite
Operations with natural keys Unique Identifiers
Complex multi-step operations Tombstone Markers
API supports atomic operations Upsert

Combine Patterns

Real-world automation often combines multiple patterns. A workflow might use Check-Before-Act for PR creation, Force Overwrite for branch updates, and Unique Identifiers for naming.

Techniques

Pattern Overview

Pattern Best For Tradeoff
Check-Before-Act Creating resources Race conditions possible
Upsert APIs with atomic operations Not universally available
Force Overwrite Content that can be safely replaced Destructive if misused
Unique Identifiers Natural deduplication ID logic can be complex
Tombstone Markers Multi-step operations Markers need cleanup

Quick Reference

Check-Before-Act

The most common pattern. Check if the target state exists before attempting to create it.

bash
if git ls-remote --heads origin "$BRANCH" | grep -q "$BRANCH"; then
  git checkout -B "$BRANCH" "origin/$BRANCH"
else
  git checkout -b "$BRANCH"
fi

Create-or-Update (Upsert)

Use APIs or commands that handle both cases atomically.

bash
gh release create v1.0.0 --notes "Release" || gh release edit v1.0.0 --notes "Release"

Force Overwrite

Don't check, just overwrite. Safe when overwriting with identical content is acceptable.

bash
git push --force-with-lease origin "$BRANCH"

Unique Identifiers

Generate deterministic IDs so duplicate operations target the same resource.

bash
BRANCH="update-$(sha256sum file.txt | cut -c1-8)"

Tombstone/Marker Files

Leave markers indicating operations completed.

bash
MARKER=".completed-$RUN_ID"
[ -f "$MARKER" ] && exit 0
# Do work...
touch "$MARKER"

Choosing a Pattern

mermaid
flowchart TD
    A[Need idempotency] --> B{API has upsert?}
    B -->|Yes| C[Use Upsert]
    B -->|No| D{Safe to overwrite?}
    D -->|Yes| E[Use Force Overwrite]
    D -->|No| F{Natural unique key?}
    F -->|Yes| G[Use Unique Identifiers]
    F -->|No| H{Multi-step operation?}
    H -->|Yes| I[Use Tombstone Markers]
    H -->|No| J[Use Check-Before-Act]

    %% Ghostty Hardcore Theme
    style A fill:#5e7175,color:#f8f8f3
    style B fill:#fd971e,color:#1b1d1e
    style C fill:#a7e22e,color:#1b1d1e
    style D fill:#fd971e,color:#1b1d1e
    style E fill:#e6db74,color:#1b1d1e
    style F fill:#fd971e,color:#1b1d1e
    style G fill:#65d9ef,color:#1b1d1e
    style H fill:#fd971e,color:#1b1d1e
    style I fill:#9e6ffe,color:#1b1d1e
    style J fill:#65d9ef,color:#1b1d1e

Scenario Recommended Pattern
Creating resources (PRs, branches, files) Check-Before-Act
Updating existing resources Upsert or Force Overwrite
Operations with natural keys Unique Identifiers
Complex multi-step operations Tombstone Markers
API supports atomic operations Upsert

Combine Patterns

Real-world automation often combines multiple patterns. A workflow might use Check-Before-Act for PR creation, Force Overwrite for branch updates, and Unique Identifiers for naming.

Examples

See examples.md for code examples.

References

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results