denylist-stuck-messages

Add message IDs to the relayer denylist. Use after investigating stuck messages with /investigate-stuck-messages, or when you have specific message IDs to denylist.

16 stars

Best use case

denylist-stuck-messages is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Add message IDs to the relayer denylist. Use after investigating stuck messages with /investigate-stuck-messages, or when you have specific message IDs to denylist.

Teams using denylist-stuck-messages 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/denylist-stuck-messages/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/devops/denylist-stuck-messages/SKILL.md"

Manual Installation

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

How denylist-stuck-messages Compares

Feature / Agentdenylist-stuck-messagesStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Add message IDs to the relayer denylist. Use after investigating stuck messages with /investigate-stuck-messages, or when you have specific message IDs to denylist.

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

# Denylist Stuck Messages

Add message IDs to the relayer denylist configuration, create a PR, and deploy.

## When to Use

1. **After investigation:**

   - User ran `/investigate-stuck-messages` and wants to denylist the found messages
   - User says "denylist these" or "add these to blacklist"

2. **Direct denylist request:**
   - User provides specific message IDs to denylist
   - User pastes message IDs from explorer or logs

## Input Parameters

```
/denylist-stuck-messages <message_ids> [app_context=NAME] [reason=REASON]
```

| Parameter     | Required | Default                  | Description                                    |
| ------------- | -------- | ------------------------ | ---------------------------------------------- |
| `message_ids` | Yes      | -                        | Space or newline separated message IDs (0x...) |
| `app_context` | No       | Inferred or "Unknown"    | App context name for the comment               |
| `reason`      | No       | "stuck in prepare queue" | Reason for denylisting (for comment)           |
| `environment` | No       | `mainnet3`               | Deployment environment                         |

**Examples:**

```
/denylist-stuck-messages 0xabc123 0xdef456 app_context=USDC/mainnet-cctp-v2-standard
```

```
/denylist-stuck-messages
0xabc123
0xdef456
0x789ghi
```

## Workflow

### Step 1: Parse Message IDs

Extract all message IDs from the input. Valid formats:

- Space-separated: `0xabc 0xdef 0x123`
- Newline-separated
- Comma-separated: `0xabc, 0xdef, 0x123`

Validate each ID:

- Must start with `0x`
- Must be 66 characters (0x + 64 hex chars)

### Step 2: Confirm with User

Use `AskUserQuestion` to confirm:

```
Ready to denylist X messages for [APP_CONTEXT]:

| Message ID |
|------------|
| 0xabc123... |
| 0xdef456... |

Proceed?
```

Options:

1. "Yes, denylist all" (Recommended)
2. "Let me modify the list"
3. "Cancel"

### Step 3: Get User's GitHub Handle

Ask for GitHub handle if not known:

```
What is your GitHub handle for the branch name?
```

### Step 4: Update Blacklist Configuration

Edit `typescript/infra/config/environments/mainnet3/customBlacklist.ts`:

1. Read the current file
2. Add new message IDs to the `blacklistedMessageIds` array
3. Include a comment with:
   - App context name
   - Date (YYYY-MM-DD format)
   - Reason

Example addition:

```typescript
  // [APP_CONTEXT] [REASON] [YYYY-MM-DD]
  '0xabc123...',
  '0xdef456...',
```

Add entries near the end of the array, before the closing bracket.

### Step 5: Create Branch and Pull Request

```bash
# Checkout main and pull latest
git checkout main && git pull origin main

# Create branch
git checkout -b <github_handle>/denylist-<app_context>

# Stage changes
git add typescript/infra/config/environments/mainnet3/customBlacklist.ts

# Commit
git commit -m "chore: denylist <APP_CONTEXT> stuck messages

Added X message IDs to denylist for <APP_CONTEXT> route.
Reason: <REASON>

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"

# Push and create PR
git push -u origin HEAD
gh pr create --title "chore: denylist <APP_CONTEXT> stuck messages" --body "$(cat <<'EOF'
## Summary
- Added X message IDs to the relayer denylist
- App context: `<APP_CONTEXT>`
- Reason: <REASON>

## Message IDs
<list of message IDs>

## Test plan
- [ ] Review message IDs are correct
- [ ] Deploy relayer with updated denylist

Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
```

### Step 6: Output Slack Message

Before asking about deployment, output the Slack message:

```
**Slack Message (copy/paste to #relayer-alerts):**

:no_entry_sign: *Denylist PR created*

App context: `<APP_CONTEXT>`
Messages denylisted: X
Reason: <REASON>

PR: <PR_URL>
```

### Step 7: Ask About Deployment

Use `AskUserQuestion`:

```
PR created. Deploy the relayer now with the updated denylist?
```

Options:

1. "Yes, deploy now" (Recommended)
2. "No, I'll deploy later"

If user confirms, run:

```bash
pnpm --dir typescript/infra exec tsx ./scripts/agents/deploy-agents.ts -e mainnet3 --context hyperlane --role relayer
```

If user skips, output the command for later use.

### Step 8: Update Slack Message After Deploy

If deployed, update the Slack message:

```
:no_entry_sign: *Denylist deployed*

App context: `<APP_CONTEXT>`
Messages denylisted: X
Reason: <REASON>

PR: <PR_URL>
```

## Grouping by Destination

If message IDs are for multiple destinations (from investigation output), group them in the blacklist file:

```typescript
  // [APP_CONTEXT] stuck messages [YYYY-MM-DD]
  // dest: arbitrum
  '0xabc123...',
  '0xdef456...',
  // dest: optimism
  '0x789ghi...',
  '0xjkl012...',
```

## Error Handling

- **Invalid message ID format**: Show which IDs are invalid, ask user to fix
- **Git conflicts**: Pull latest main and retry
- **PR creation fails**: Check gh auth status
- **Deployment fails**: Show error, suggest manual deployment

## Prerequisites

- `gh` CLI authenticated
- Git configured with push access to the repo
- For deployment: `kubectl` configured with mainnet cluster access

Related Skills

bgo

10
from diegosouzapw/awesome-omni-skill

Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.

Coding & Development

devops-specialist

16
from diegosouzapw/awesome-omni-skill

DevOps 与运维专家。精通 CI/CD、容器化、编排、基础设施即代码、监控告警和自动化部署。用于构建高效、可靠的软件交付流水线和运维系统。

DevOps Practices

16
from diegosouzapw/awesome-omni-skill

Expertise in deployment automation, container orchestration, and infrastructure as code. Activates when working with "deploy", "kubernetes", "docker", "terraform", "helm", "k8s", "container", or cloud infrastructure.

devops

16
from diegosouzapw/awesome-omni-skill

Deploy applications with Docker and Kubernetes, automate with CI/CD, manage infrastructure with code, and configure cloud platforms and networking.

devops-infrastructure

16
from diegosouzapw/awesome-omni-skill

クラウドインフラ設計・IaC実装・監視設定・コンテナオーケストレーション。AWS、GCP、Azureのリソース構築、Terraform/Pulumi、Kubernetes、Docker、Prometheus/Grafana監視。「インフラ」「クラウド」「Terraform」「Kubernetes」「監視」「Docker」に関する質問で使用。

devops-infra-github

16
from diegosouzapw/awesome-omni-skill

Expert guidance for containerization, orchestration, and CI/CD pipelines for Bun monorepo projects.

devops-guide

16
from diegosouzapw/awesome-omni-skill

Comprehensive DevOps and infrastructure guide covering Docker, Kubernetes, AWS, Terraform, CI/CD pipelines, Linux, and cloud deployment strategies. Use when setting up infrastructure, automation, or deployment systems.

devops-engineer

16
from diegosouzapw/awesome-omni-skill

Expert DevOps engineer bridging development and operations with comprehensive automation, monitoring, and infrastructure management. Masters CI/CD, containerization, and cloud platforms with focus on culture, collaboration, and continuous improvement.

DevOps & Deployment

16
from diegosouzapw/awesome-omni-skill

Use when setting up CI/CD pipelines, containerizing applications, deploying to Kubernetes, or writing infrastructure as code. DevOps & Deployment covers GitHub Actions, Docker, Helm, and Terraform patterns.

devops-deployer

16
from diegosouzapw/awesome-omni-skill

Comprehensive DevOps and deployment workflow that orchestrates infrastructure automation, CI/CD pipelines, container orchestration, and cloud deployment. Handles everything from infrastructure as code and pipeline setup to monitoring, scaling, and disaster recovery.

devops-cloud

16
from diegosouzapw/awesome-omni-skill

Master DevOps, cloud infrastructure, containerization, CI/CD, Kubernetes, and infrastructure as code. Use when deploying applications, setting up infrastructure, or managing cloud services.

devops-agent

16
from diegosouzapw/awesome-omni-skill

Infrastructure, deployment, and operations automation