Skip to main content

ironclaw pairing

Manage pairing requests for direct message channels like Telegram and Slack. When someone sends a DM to your agent from an unknown sender, a pairing request is created that must be approved before the agent will respond.

Subcommands

  • list - List pending pairing requests
  • approve - Approve a pairing request by code

ironclaw pairing list

List all pending pairing requests for a specific channel.

Syntax

Arguments

<CHANNEL> Channel name (e.g., telegram, slack, discord).

Flags

--json Output as JSON instead of human-readable format.

Examples

Output

Human-readable format:
Columns:
  • Code - Pairing code to use with approve
  • ID - Channel-specific user ID
  • Metadata - Additional information (username, name, etc.)
  • Created - Timestamp when request was created
No pending requests:
JSON format:

ironclaw pairing approve

Approve a pairing request using its code.

Syntax

Arguments

<CHANNEL> Channel name (e.g., telegram, slack). <CODE> Pairing code from the list output (e.g., ABC12345).

Examples

Output

Success:
Code not found:
Rate limited:

How Pairing Works

1. Unknown Sender Messages You

When someone sends a DM to your agent from a channel you’ve configured:

2. Pairing Request Created

The agent creates a pairing request and responds with a code:

3. You Approve the Request

4. Sender Can Now Chat

The sender’s next message will be processed normally:

Pairing Request Lifecycle

Creation

  • Created when an unknown sender messages the agent
  • Includes metadata: username, display name, etc.
  • Generates an 8-character alphanumeric code
  • Valid indefinitely until approved or sender is blocked

Approval

  • Marks the sender as trusted
  • Removes the pending request
  • Future messages from this sender are processed normally

Re-requesting

If the same sender messages again before approval:
  • Extends the existing request timestamp
  • Returns the same pairing code
  • Does not create a duplicate request

Security Features

Rate Limiting

Approval attempts are rate-limited to prevent brute-force attacks:
  • Too many failed attempts trigger a cooldown period
  • Cooldown is user-specific (per your IronClaw instance)

Code Format

Pairing codes are:
  • 8 characters long
  • Alphanumeric (A-Z, 0-9)
  • Case-insensitive
  • Cryptographically random

Automatic Cleanup

Old pairing requests are automatically cleaned up after:
  • 30 days of inactivity (configurable)
  • Approval
  • Manual deletion

Storage Location

Pairing data is stored in:
Example: ~/.ironclaw/pairing/telegram.json

File Format

Common Workflows

Daily Pairing Check

Bulk Approval

Monitoring Script

Channel-Specific Metadata

Telegram

Slack

Discord

Troubleshooting

”No pending pairing requests”

Either:
  • No one has messaged your agent from unknown accounts, or
  • All requests have been approved/expired
Test by messaging your agent from a new account.

”Pairing file not found”

The channel may not be configured:
Check your .env file for channel configuration.

”Code not found”

Possible causes:
  • Typo in the code (codes are case-insensitive)
  • Request already approved
  • Request expired or manually deleted
List current requests:

“Rate limited”

Too many failed approval attempts. Wait a few minutes and try again.

Manual Pairing File Management

You can manually edit pairing files if needed:
Warning: Manual edits can break pairing functionality. Use the CLI commands when possible.

Privacy Considerations

  • Pairing requests include user metadata (usernames, names)
  • This data is stored locally in plaintext
  • Consider the sensitivity of stored metadata
  • Regularly clean up old pairing data