Concurrency and parallelism skill. Activates when user needs thread safety analysis, race condition detection, async/await pattern guidance, lock-free data structures, actor model design, deadlock detection and prevention, or concurrent testing strategies. Triggers on: /godmode:concurrent, "thread safety", "race condition", "async await", "deadlock", "lock-free", "actor model", "concurrent", "parallelism", or when the orchestrator detects concurrency work.
From godmodenpx claudepluginhub arbazkhan971/godmodeThis skill uses the workspace's default tool permissions.
references/concurrency-patterns.mdDesigns and optimizes AI agent action spaces, tool definitions, observation formats, error recovery, and context for higher task completion rates.
Enables AI agents to execute x402 payments with per-task budgets, spending controls, and non-custodial wallets via MCP tools. Use when agents pay for APIs, services, or other agents.
Compares coding agents like Claude Code and Aider on custom YAML-defined codebase tasks using git worktrees, measuring pass rate, cost, time, and consistency.
/godmode:concurrent/godmode:review flags potential race conditions or deadlocks/godmode:test reveals non-deterministic test failuresUnderstand the concurrency requirements before designing solutions:
CONCURRENCY CONTEXT:
Project: <name and purpose>
Language/Runtime: <Go | Rust | Node.js | Python | Java | Erlang/Elixir>
Concurrency Model: Threads | Green Threads | Event Loop | Actor Model | CSP
Current Issues: <race conditions, deadlocks, performance bottlenecks, none>
Shared State: <what mutable state is shared across concurrent units>
I/O Profile: CPU-bound | I/O-bound | Mixed
Scale: <concurrent connections/operations expected>
...
If the user has not provided context, ask: "What language/runtime are you using, and is the workload primarily CPU-bound or I/O-bound? This determines the right concurrency model."
Identify shared mutable state and classify access patterns:
SHARED STATE INVENTORY:
| State | Access Pattern | Protection | Risk |
|--|--|--|--|
| <variable/resource> | Read-Write | <mutex/none> | HIGH |
| <variable/resource> | Read-Only | None needed | LOW |
| <variable/resource> | Write-Only | <channel> | MED |
CRITICAL SECTIONS:
...
Rules:
Systematically check for race conditions:
RACE CONDITION ANALYSIS:
| Pattern | Found | Location | Fix |
|--|--|--|--|
| Check-then-act | Y/N | <file:line> | |
| Read-modify-write | Y/N | <file:line> | |
| Compound actions | Y/N | <file:line> | |
| Lazy initialization | Y/N | <file:line> | |
| Iterator invalidation | Y/N | <file:line> | |
...
Check-then-act (TOCTOU)
UNSAFE:
if (map.has(key)) { // Check
return map.get(key); // Act -- another thread may have removed key
}
SAFE (atomic operation):
return map.getOrDefault(key, fallback); // Single atomic operation
...
Read-modify-write
UNSAFE:
counter = counter + 1; // Read, modify, write -- not atomic
SAFE (atomic):
counter.incrementAndGet(); // Java AtomicInteger
counter.fetch_add(1, Ordering::SeqCst); // Rust AtomicUsize
atomic.AddInt64(&counter, 1); // Go sync/atomic
...
Design correct async code for the target runtime:
PATTERNS:
1. Sequential async -- await one at a time (when order matters)
const user = await getUser(id);
const orders = await getOrders(user.id);
2. Concurrent async -- Promise.all (when independent)
const [user, products, config] = await Promise.all([
getUser(id),
...
PATTERNS:
1. Concurrent tasks -- asyncio.gather
results = await asyncio.gather(
fetch_user(user_id),
fetch_orders(user_id),
fetch_preferences(user_id)
)
...
PATTERNS:
1. Fan-out/fan-in
results := make(chan Result, len(jobs))
for _, job := range jobs {
go func(j Job) {
results <- process(j)
}(job)
}
...
PATTERNS:
1. Concurrent futures -- tokio::join!
let (user, orders) = tokio::join!(
get_user(id),
get_orders(id)
);
2. Spawned tasks with handles
...
Design or select lock-free alternatives when locks are a bottleneck:
LOCK-FREE DATA STRUCTURES:
| Structure | Use Case | Implementation |
|--|--|--|
| Atomic counter | Counters, flags | AtomicI64, atomic|
| CAS loop | Compare-and-swap ops | compare_exchange |
| Lock-free queue | Producer-consumer | crossbeam, ConcurrentLinkedQueue |
| Lock-free stack | LIFO work stealing | Treiber stack |
| Lock-free hash map | Concurrent KV | dashmap (Rust), ConcurrentHashMap (Java) |
...
Design actor-based systems for message-driven concurrency:
ACTOR MODEL PRINCIPLES:
1. Each actor has private state -- no shared mutable state
2. Actors communicate only through asynchronous messages
3. Each actor processes one message at a time -- sequential within actor
4. Actors can create child actors, send messages, change behavior
ACTOR SYSTEM DESIGN:
| Actor | Messages Received | State | Children|
...
Systematically prevent and detect deadlocks:
DEADLOCK CONDITIONS (all four must hold):
1. Mutual exclusion -- resource held exclusively
2. Hold and wait -- holding one resource, waiting for another
3. No preemption -- resources cannot be forcibly taken
4. Circular wait -- A waits for B, B waits for A
PREVENTION STRATEGIES:
| Strategy | Breaks Condition | How |
...
Verify correctness of concurrent code:
CONCURRENT TESTING APPROACH:
| Technique | What It Catches | Tools |
|--|--|--|
| Race detector | Data races | go -race, TSan |
| Stress testing | Intermittent bugs | Run N times |
| Loom (Rust) | All interleavings | loom crate |
| Property testing | Invariant violations | QuickCheck, Hypothesis |
| Linearizability | Correctness of | Jepsen, elle |
...
Choose the right concurrency model for the workload:
CONCURRENCY MODEL DECISION:
| Workload | Recommended Model | Language/Runtime |
|--|--|--|
| High I/O, many | Event loop / async | Node.js, Python |
| connections | | asyncio |
| CPU-bound parallel | Thread pool / rayon | Rust, Go, Java |
| Message-driven | Actor model | Erlang, Akka |
| distributed | | |
...
Validate the concurrency design:
CONCURRENCY VALIDATION:
| Check | Status |
|--|--|
| All shared mutable state identified | PASS | FAIL |
| Protection strategy for each shared state| PASS | FAIL |
| Race condition analysis complete | PASS | FAIL |
| Deadlock prevention strategy in place | PASS | FAIL |
| Cancellation/shutdown paths verified | PASS | FAIL |
...
Generate deliverables:
CONCURRENCY DESIGN COMPLETE:
Artifacts:
- Thread safety analysis: docs/concurrency/<feature>-thread-safety.md
- Race condition report: docs/concurrency/<feature>-race-analysis.md
- Concurrency tests: tests/concurrent/<feature>-concurrent.test.<ext>
- Validation: <SAFE | NEEDS WORK>
...
Commit: "concurrent: <feature> -- <model>, <N> shared states protected, <verdict>"
Never ask to continue. Loop autonomously until done.
# Run concurrency checks
go test -race ./...
cargo test -- --test-threads=1
python -m pytest tests/ -x --timeout=30
IF race detector reports > 0 races: fix before merging. WHEN stress test (1000 iterations) shows any failure: investigate. IF mutex hold time > 100ms: refactor to reduce critical section.
| Flag | Description |
|---|---|
| (none) | Full concurrency analysis and design |
--analyze | Thread safety analysis of existing code |
--race | Race condition detection and fixes |
Detect language and concurrency model:
Go: goroutines+channels. Rust: tokio/async-std. Node: event loop.
Python: asyncio/threading. Java: threads/virtual threads.
## Keep/Discard Discipline
Each concurrency fix either passes the race detector or gets reverted.
- **KEEP**: Race detector clean, stress test (1000 iterations) passes, no new deadlock risk introduced.
- **DISCARD**: Fix introduces a new race, deadlock, or performance regression. Revert immediately.
- **CRASH**: Stress test reveals intermittent failure. Increase iterations to 10,000 to reproduce reliably, then fix.
- Log every analysis to `.godmode/concurrent-results.tsv`.
## Stop Conditions