acc-create-rate-limiter

Generates Rate Limiter pattern for PHP 8.5. Creates request throttling with token bucket, sliding window, and fixed window algorithms. Includes unit tests.

181 stars

Best use case

acc-create-rate-limiter is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Generates Rate Limiter pattern for PHP 8.5. Creates request throttling with token bucket, sliding window, and fixed window algorithms. Includes unit tests.

Teams using acc-create-rate-limiter should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/acc-create-rate-limiter/SKILL.md --create-dirs "https://raw.githubusercontent.com/majiayu000/claude-skill-registry/main/skills/data/acc-create-rate-limiter/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/acc-create-rate-limiter/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How acc-create-rate-limiter Compares

Feature / Agentacc-create-rate-limiterStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Generates Rate Limiter pattern for PHP 8.5. Creates request throttling with token bucket, sliding window, and fixed window algorithms. Includes unit tests.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Rate Limiter Generator

Creates Rate Limiter pattern infrastructure for request throttling and API protection.

## When to Use

| Scenario | Example |
|----------|---------|
| API protection | Prevent abuse |
| Resource throttling | Database connection limits |
| Fair usage | Per-user request limits |
| Burst protection | Spike handling |

## Component Characteristics

### RateLimiterInterface
- Common interface for all algorithms
- Check and consume methods
- Remaining capacity queries

### Algorithms
- **Token Bucket**: Smooth rate limiting with burst capacity
- **Sliding Window**: Time-based with sliding window log
- **Fixed Window**: Simple time-based counter

### RateLimitResult
- Contains allowed/denied status
- Provides retry-after information
- Generates HTTP headers

---

## Generation Process

### Step 1: Generate Core Components

**Path:** `src/Infrastructure/Resilience/RateLimiter/`

1. `RateLimiterInterface.php` — Common interface
2. `RateLimitResult.php` — Result value object with headers
3. `RateLimitExceededException.php` — Exception with retry info
4. `StorageInterface.php` — Storage abstraction

### Step 2: Choose and Generate Algorithm

Choose based on use case:

1. `TokenBucketRateLimiter.php` — For APIs with burst allowance
2. `SlidingWindowRateLimiter.php` — For strict per-time limits
3. `FixedWindowRateLimiter.php` — For simple rate limiting

### Step 3: Generate Storage

1. `RedisStorage.php` — Production storage with TTL

### Step 4: Generate Tests

1. `{Algorithm}RateLimiterTest.php` — Algorithm tests
2. `RateLimitResultTest.php` — Result value object tests

---

## File Placement

| Component | Path |
|-----------|------|
| All Classes | `src/Infrastructure/Resilience/RateLimiter/` |
| Unit Tests | `tests/Unit/Infrastructure/Resilience/RateLimiter/` |

---

## Naming Conventions

| Component | Pattern | Example |
|-----------|---------|---------|
| Interface | `RateLimiterInterface` | `RateLimiterInterface` |
| Token Bucket | `TokenBucketRateLimiter` | `TokenBucketRateLimiter` |
| Sliding Window | `SlidingWindowRateLimiter` | `SlidingWindowRateLimiter` |
| Fixed Window | `FixedWindowRateLimiter` | `FixedWindowRateLimiter` |
| Result | `RateLimitResult` | `RateLimitResult` |
| Exception | `RateLimitExceededException` | `RateLimitExceededException` |
| Test | `{ClassName}Test` | `TokenBucketRateLimiterTest` |

---

## Quick Template Reference

### RateLimiterInterface

```php
interface RateLimiterInterface
{
    public function attempt(string $key, int $tokens = 1): RateLimitResult;
    public function getRemainingTokens(string $key): int;
    public function getRetryAfter(string $key): ?int;
    public function reset(string $key): void;
}
```

### RateLimitResult

```php
final readonly class RateLimitResult
{
    public static function allowed(int $remaining, int $limit, \DateTimeImmutable $resetsAt): self;
    public static function denied(int $limit, int $retryAfter, \DateTimeImmutable $resetsAt): self;
    public function isAllowed(): bool;
    public function isDenied(): bool;
    public function toHeaders(): array; // X-RateLimit-* headers
}
```

---

## Usage Example

```php
// Create limiter
$limiter = new TokenBucketRateLimiter(
    capacity: 100,
    refillRate: 10.0, // 10 tokens per second
    clock: $clock,
    storage: new RedisStorage($redis)
);

// Check limit
$result = $limiter->attempt('user:123');

if ($result->isDenied()) {
    throw new RateLimitExceededException(
        key: 'user:123',
        limit: $result->limit,
        retryAfterSeconds: $result->retryAfterSeconds
    );
}

// Add headers to response
foreach ($result->toHeaders() as $name => $value) {
    $response = $response->withHeader($name, (string) $value);
}
```

---

## Algorithm Comparison

| Algorithm | Burst Handling | Memory | Precision | Use Case |
|-----------|----------------|--------|-----------|----------|
| Token Bucket | Good (configurable) | Low | Medium | APIs with burst allowance |
| Sliding Window | Limited | High | High | Strict per-time limits |
| Fixed Window | Poor (boundary issues) | Low | Low | Simple rate limiting |

---

## Anti-patterns to Avoid

| Anti-pattern | Problem | Solution |
|--------------|---------|----------|
| No Redis/Shared Storage | Per-instance limits | Use shared storage |
| Missing Headers | Client can't adapt | Return X-RateLimit-* headers |
| Single Algorithm | Doesn't fit all cases | Choose per use case |
| No Retry-After | Client spams | Always return retry timing |
| Synchronous Blocking | Thread blocking | Use non-blocking check |

---

## References

For complete PHP templates and examples, see:
- `references/templates.md` — All algorithm implementations
- `references/examples.md` — Middleware example and tests

Related Skills

advanced-memoization-strategies

181
from majiayu000/claude-skill-registry

Apply principled memoization techniques to reduce re-rendering without introducing correctness bugs.

advanced-caching-strategies

181
from majiayu000/claude-skill-registry

Multi-layer caching strategies across CDN, browser, server, and database. PROACTIVELY activate for: (1) HTTP caching headers, (2) CDN configuration, (3) Server-side caching with Redis, (4) Cache invalidation strategies, (5) ETag implementation. Triggers: "caching", "cache strategy", "CDN", "browser cache", "server cache", "redis", "cache invalidation", "ETag", "Cache-Control"

add-rate-limiting

181
from majiayu000/claude-skill-registry

Configure rate limiting policies for API endpoints with sliding window limits

Adaptive Bitrate Streaming

181
from majiayu000/claude-skill-registry

Automatically adjusting video quality based on network conditions using HLS, DASH protocols and player implementation for smooth playback and optimal user experience.

huggingface-accelerate

181
from majiayu000/claude-skill-registry

Simplest distributed training API. 4 lines to add distributed support to any PyTorch script. Unified API for DeepSpeed/FSDP/Megatron/DDP. Automatic device placement, mixed precision (FP16/BF16/FP8). Interactive config, single launch command. HuggingFace ecosystem standard.

acc-create-value-object

181
from majiayu000/claude-skill-registry

Generates DDD Value Objects for PHP 8.5. Creates immutable, self-validating objects with equality comparison. Includes unit tests.

acc-create-use-case

181
from majiayu000/claude-skill-registry

Generates Application Use Cases for PHP 8.5. Creates orchestration services that coordinate domain objects, handle transactions, and dispatch events. Includes unit tests.

acc-create-unit-test

181
from majiayu000/claude-skill-registry

Generates PHPUnit unit tests for PHP 8.5. Creates isolated tests with AAA pattern, proper naming, attributes, and one behavior per test. Supports Value Objects, Entities, Services.

acc-create-test-double

181
from majiayu000/claude-skill-registry

Generates test doubles (Mocks, Stubs, Fakes, Spies) for PHP 8.5. Creates appropriate double type based on testing needs with PHPUnit MockBuilder patterns.

acc-create-test-builder

181
from majiayu000/claude-skill-registry

Generates Test Data Builder and Object Mother patterns for PHP 8.5. Creates fluent builders with sensible defaults and factory methods for test data creation.

acc-create-strategy

181
from majiayu000/claude-skill-registry

Generates Strategy pattern for PHP 8.5. Creates interchangeable algorithm families with context class, strategy interface, and concrete implementations. Includes unit tests.

acc-create-state

181
from majiayu000/claude-skill-registry

Generates State pattern for PHP 8.5. Creates state machines with context, state interface, and concrete states for behavior changes. Includes unit tests.