Azure Service Bus for Python
microsoft/skills
Reference for the Azure Service Bus Python SDK: queues, topics and subscriptions, sending and receiving messages, receive modes and DefaultAzureCredential authentication.
A skill your agent uses when implementing reliable message processing with Azure Service Bus — choosing between queues and topics, configuring peek-lock settlement, handling dead-lettered messages…
$ npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kid-sid/claude-spellbook azure-service-bus --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/azure-service-bus .claude/skills/azure-service-bus && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "azure-service-bus" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-bus into .claude/skills/azure-service-bus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-service-bus", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-busType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kid-sid/claude-spellbook azure-service-bus --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/azure-service-bus .agents/skills/azure-service-bus && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "azure-service-bus" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-bus into .agents/skills/azure-service-bus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-service-bus", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kid-sid/claude-spellbook azure-service-bus --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/azure-service-bus .cursor/skills/azure-service-bus && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "azure-service-bus" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-bus into .cursor/skills/azure-service-bus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-service-bus", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kid-sid/claude-spellbook.git --path skills/azure-service-bus--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kid-sid/claude-spellbook azure-service-bus --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/azure-service-bus .gemini/skills/azure-service-bus && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "azure-service-bus" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-bus into .gemini/skills/azure-service-bus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-service-bus", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kid-sid/claude-spellbook azure-service-busInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/azure-service-bus .github/skills/azure-service-bus && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "azure-service-bus" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-bus into .github/skills/azure-service-bus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-service-bus", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kid-sid/claude-spellbook azure-service-bus --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/azure-service-bus .opencode/skills/azure-service-bus && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "azure-service-bus" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/azure-service-bus into .opencode/skills/azure-service-bus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "azure-service-bus", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
azure-service-busA skill your agent uses when implementing reliable message processing with Azure Service Bus — choosing between queues and topics, configuring peek-lock settlement, handling dead-lettered messages…
Azure Service Bus is an agent skill from kid-sid/claude-spellbook. Use when implementing reliable message processing with Azure Service Bus — choosing between queues and topics, configuring peek-lock settlement, handling dead-lettered messages, or enforcing ordered processing with sessions.
Its SKILL.md is about 4.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Backend & APIs. It works with Azure Service Bus. The repository describes itself as: A curated collection of skills, prompts, and workflows that extend Claude's capabilities — your personal grimoire for AI-powered development. The licence is MIT.
Read from SKILL.md and the folder at commit a7c2ac9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Azure Service Bus loads about 4.2k tokens when it runs. Until then it costs about 61 tokens; SKILL.md has 736 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from kid-sid/claude-spellbook at commit a7c2ac9, republished under its MIT licence (© kid-sid). 736 words, ~4,240 tokens.
.claude/skills/azure-service-bus/SKILL.md (or your agent's skills folder).Production patterns for Azure Service Bus using the azure-servicebus Python SDK.
azure-servicebus or @azure/service-busfrom azure.identity import DefaultAzureCredential
from azure.servicebus import ServiceBusClient
credential = DefaultAzureCredential()
client = ServiceBusClient(
fully_qualified_namespace="myns.servicebus.windows.net",
credential=credential,
)
# BAD: connection string embeds shared access key
client = ServiceBusClient.from_connection_string(
"Endpoint=sb://myns.servicebus.windows.net/;SharedAccessKeyName=..."
)
# GOOD: keyless via RBAC role (Azure Service Bus Data Sender / Receiver)
client = ServiceBusClient(
fully_qualified_namespace=os.environ["SERVICEBUS_NAMESPACE"],
credential=DefaultAzureCredential(),
)Always use DefaultAzureCredential and assign the minimum RBAC role:
| Role | Permission |
|---|---|
Azure Service Bus Data Sender | Send messages only |
Azure Service Bus Data Receiver | Receive and settle messages only |
Azure Service Bus Data Owner | Full control — use only for admin tooling |
| Factor | Queue | Topic + Subscriptions |
|---|---|---|
| Consumers | Single consumer group | Multiple independent consumers |
| Fan-out | No | Yes — each subscription gets a copy |
| Filtering | No | Yes — SQL or correlation filter per subscription |
| Ordering | Sessions only | Sessions only |
| Use case | Task queue, work distribution | Event fan-out, pub/sub |
Queue: Producer → [Queue] → Consumer A
Topic: Producer → [Topic] → [Sub: orders-billing] → Billing Service
→ [Sub: orders-shipping] → Shipping Service
→ [Sub: orders-analytics] → Analytics Servicefrom azure.servicebus import ServiceBusMessage
import json
def send_message(namespace: str, queue_name: str, body: dict, **props) -> None:
credential = DefaultAzureCredential()
with ServiceBusClient(namespace, credential) as client:
with client.get_queue_sender(queue_name) as sender:
message = ServiceBusMessage(
json.dumps(body),
subject=props.get("subject"),
correlation_id=props.get("correlation_id"),
message_id=props.get("message_id"), # deduplication key
time_to_live=props.get("ttl"), # timedelta
application_properties=props.get("properties", {}),
)
sender.send_messages(message)def send_batch(namespace: str, queue_name: str, messages: list[dict]) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_sender(queue_name) as sender:
batch = sender.create_message_batch()
for body in messages:
try:
batch.add_message(ServiceBusMessage(json.dumps(body)))
except ValueError:
# Batch full — send current batch and start a new one
sender.send_messages(batch)
batch = sender.create_message_batch()
batch.add_message(ServiceBusMessage(json.dumps(body)))
if len(batch):
sender.send_messages(batch)from datetime import datetime, timedelta, timezone
def schedule_message(namespace: str, queue_name: str, body: dict, delay: timedelta) -> int:
enqueue_at = datetime.now(timezone.utc) + delay
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_sender(queue_name) as sender:
seq_numbers = sender.schedule_messages(
ServiceBusMessage(json.dumps(body)),
enqueue_at,
)
return seq_numbers[0] # use to cancel with cancel_scheduled_messages()def publish_event(namespace: str, topic_name: str, event_type: str, payload: dict) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_topic_sender(topic_name) as sender:
sender.send_messages(ServiceBusMessage(
json.dumps(payload),
subject=event_type,
application_properties={"event_type": event_type},
))Locks the message for processing; must be explicitly settled. Ensures at-least-once delivery.
from azure.servicebus import ServiceBusReceiveMode
def process_queue(namespace: str, queue_name: str, handler, max_messages: int = 10) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_receiver(
queue_name,
receive_mode=ServiceBusReceiveMode.PEEK_LOCK,
max_wait_time=5,
) as receiver:
for msg in receiver.receive_messages(max_message_count=max_messages):
try:
body = json.loads(str(msg))
handler(body)
receiver.complete_message(msg) # ack — removes from queue
except Exception as e:
if msg.delivery_count >= 3:
receiver.dead_letter_message( # send to DLQ
msg,
reason="MaxRetriesExceeded",
error_description=str(e),
)
else:
receiver.abandon_message(msg) # nack — requeues with backoff| Method | Effect | When to use |
|---|---|---|
complete_message | Removes from queue | Processing succeeded |
abandon_message | Returns to queue; increments delivery_count | Transient failure, will retry |
dead_letter_message | Moves to DLQ with reason | Poison message, max retries exceeded |
defer_message | Parks with sequence number for later retrieval | Out-of-order messages needing dependencies |
import threading
def start_consumer(namespace: str, queue_name: str, handler, stop_event: threading.Event) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_receiver(queue_name, max_wait_time=5) as receiver:
while not stop_event.is_set():
messages = receiver.receive_messages(max_message_count=10, max_wait_time=5)
if not messages:
continue
for msg in messages:
try:
handler(json.loads(str(msg)))
receiver.complete_message(msg)
except Exception as e:
logger.exception("message_processing_failed", extra={"delivery_count": msg.delivery_count})
receiver.abandon_message(msg)def process_dlq(namespace: str, queue_name: str) -> list[dict]:
dlq_path = f"{queue_name}/$deadletterqueue"
dead_letters = []
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_receiver(
dlq_path,
receive_mode=ServiceBusReceiveMode.PEEK_LOCK,
) as receiver:
for msg in receiver.receive_messages(max_message_count=50):
dead_letters.append({
"body": json.loads(str(msg)),
"reason": msg.dead_letter_reason,
"description": msg.dead_letter_error_description,
"delivery_count": msg.delivery_count,
"enqueued_at": msg.enqueued_time_utc,
})
receiver.complete_message(msg) # drain DLQ after inspection
return dead_lettersAlert when DLQ message count (ActiveMessageCount on the DLQ entity) exceeds zero.
Sessions guarantee FIFO ordering for messages with the same session_id. The queue/topic subscription must have requires_session=True.
# Send with session ID (all messages for the same order stay ordered)
def send_with_session(namespace: str, queue_name: str, session_id: str, body: dict) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_sender(queue_name) as sender:
sender.send_messages(ServiceBusMessage(
json.dumps(body),
session_id=session_id,
))
# Receive a specific session
def process_session(namespace: str, queue_name: str, session_id: str, handler) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_receiver(
queue_name,
session_id=session_id,
) as receiver:
for msg in receiver.receive_messages(max_message_count=100):
handler(json.loads(str(msg)))
receiver.complete_message(msg)
# Accept the next available session (let Service Bus assign)
def process_next_session(namespace: str, queue_name: str, handler) -> None:
with ServiceBusClient(namespace, DefaultAzureCredential()) as client:
with client.get_queue_receiver(
queue_name,
session_id=NEXT_AVAILABLE_SESSION, # from azure.servicebus
) as receiver:
for msg in receiver.receive_messages(max_message_count=100, max_wait_time=10):
handler(json.loads(str(msg)))
receiver.complete_message(msg)from azure.servicebus.management import ServiceBusAdministrationClient, SqlRuleFilter, CorrelationRuleFilter
admin = ServiceBusAdministrationClient(
fully_qualified_namespace="myns.servicebus.windows.net",
credential=DefaultAzureCredential(),
)
# SQL filter — route by message property
admin.create_rule(
topic_name="orders",
subscription_name="orders-eu",
rule_name="eu-only",
filter=SqlRuleFilter("Region = 'EU'"),
)
# Correlation filter — cheaper, matches on built-in or application properties
admin.create_rule(
topic_name="orders",
subscription_name="orders-priority",
rule_name="priority-orders",
filter=CorrelationRuleFilter(
subject="order.placed",
application_properties={"priority": "high"},
),
)
# Remove the default catch-all rule when adding selective filters
admin.delete_rule("orders", "orders-eu", "$Default")| Filter type | Performance | Flexibility | Use when |
|---|---|---|---|
TrueRuleFilter | Fast | None | Subscription receives everything (default) |
CorrelationRuleFilter | Fastest | Subject, correlation ID, app properties | Property-based routing |
SqlRuleFilter | Slower | Full SQL expression | Complex conditions across multiple properties |
FalseRuleFilter | Fast | None | Disable subscription without deleting it |
from azure.servicebus import ServiceBusClient
from azure.core.pipeline.policies import RetryPolicy
# SDK-level retry (network/transient errors)
client = ServiceBusClient(
fully_qualified_namespace="myns.servicebus.windows.net",
credential=DefaultAzureCredential(),
retry_total=5,
retry_backoff_factor=1.5,
retry_backoff_max=30,
)
# Message-level retry: set max_delivery_count on the queue/subscription
# (default 10 — messages exceeding this are auto-dead-lettered by Service Bus)
admin.update_queue(
admin.get_queue("my-queue"),
max_delivery_count=5,
lock_duration=timedelta(minutes=2), # must process within this window
)from azure.servicebus.exceptions import (
ServiceBusError,
ServiceBusConnectionError,
ServiceBusAuthorizationError,
MessageLockLostError,
SessionLockLostError,
MessageAlreadySettled,
)
def safe_receive(receiver, handler, msg) -> None:
try:
handler(json.loads(str(msg)))
receiver.complete_message(msg)
except MessageLockLostError:
# Lock expired before we could settle — message will reappear
logger.warning("lock_expired", message_id=msg.message_id)
except MessageAlreadySettled:
# Duplicate settle call — safe to ignore
pass
except ServiceBusAuthorizationError:
# RBAC role missing — fail fast, don't retry
raise
except ServiceBusConnectionError as e:
logger.error("connection_lost", error=str(e))
raise # outer loop should reconnect
except Exception as e:
logger.exception("handler_failed")
try:
receiver.abandon_message(msg)
except MessageAlreadySettled:
pass| Lever | Impact | How |
|---|---|---|
| Tier (Basic vs Standard vs Premium) | High | Basic: queues only, no topics/sessions; Standard: topics + sessions; Premium: dedicated capacity, no throttling |
| Message size | Medium | Standard max 256 KB; Premium max 100 MB — compress large payloads before sending |
| Message TTL | Medium | Set queue/message TTL to avoid accumulating unprocessed messages that waste storage |
| Auto-delete on idle | Low | Set auto_delete_on_idle on dev/staging queues to clean up abandoned resources |
| Duplicate detection window | Low | Enable on idempotent queues; deduplicated messages don't count toward throughput billing |
See also:
event-driven,azure,observability
complete_message() before your handler returns means a crash loses the work with no retry opportunity; settle only after successful processingServiceBusReceiver ignores session grouping and violates ordering guarantees; use accept_next_session() for session-aware deliveryTrueRuleFilter subscription on a high-volume topic processes every message; use correlation or SQL filters to subscribe only to relevant message typesServiceBusClient recreated per message — each client creation opens a new AMQP connection; create the client once at startup and reuse it across all sends and receivesdefer() or back off before abandoning on transient failuresDefaultAzureCredential — no connection strings or SAS keys in codeData Sender for producers, Data Receiver for consumersPEEK_LOCK for all reliable processing — not RECEIVE_AND_DELETEcomplete, abandon, or dead_letter — no silent dropsdelivery_count checked before settling; poison messages sent to DLQ with reason and descriptionActiveMessageCount on /$deadletterqueue exceeds 0max_delivery_count set on queues/subscriptions (not left at default 10 without review)lock_duration set long enough to cover worst-case processing time$Default rule deleted when selective CorrelationRuleFilter or SqlRuleFilter is added© kid-sid, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/azure-service-bus of kid-sid/claude-spellbook.
Open the folder on GitHubat commit a7c2ac9
Azure Service Bus next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Azure Service Bus this skillkid-sid/claude-spellbook | 190 | — | ~4.2k | Automated safety check: Pass | MIT | |
| Azure Service Bus for Pythonmicrosoft/skills | 3.1k | — | ~2.6k | Automated safety check: Pass | MIT | |
| Azure Servicebus TSmicrosoft/skills | 3.1k | 5 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Azure Servicebus Dotnetmicrosoft/skills | 3.1k | 5 repos | ~2.8k | Automated safety check: Pass | MIT | |
| Messagingcodewithmukesh/dotnet-claude-kit | 756 | 1 repos | ~2.7k | Automated safety check: Pass | MIT | |
| Azure Servicebus Rustsickn33/agentic-awesome-skills | 47k | 1 repos | ~2k | Automated safety check: Pass | MIT |
microsoft/skills
Reference for the Azure Service Bus Python SDK: queues, topics and subscriptions, sending and receiving messages, receive modes and DefaultAzureCredential authentication.
microsoft/skills
Build messaging applications using Azure Service Bus SDK for JavaScript (@azure/service-bus).
microsoft/skills
Azure Service Bus SDK for .NET. An agent skill from microsoft/skills.
codewithmukesh/dotnet-claude-kit
Asynchronous messaging patterns for .NET applications. An agent skill from codewithmukesh/dotnet-claude-kit.
sickn33/agentic-awesome-skills
Azure Service Bus library for Rust. An agent skill from sickn33/agentic-awesome-skills.
aiskillstore/marketplace
Azure Service Bus SDK for Python messaging. An agent skill from aiskillstore/marketplace.
kid-sid/claude-spellbook
A skill your agent uses when building or reviewing UI components for keyboard and screen reader compatibility, adding ARIA to custom widgets, auditing a page for WCAG AA conformance, or preparing…
kid-sid/claude-spellbook
A skill your agent uses when building, wiring, or debugging an Agentex agent — choosing agent type, configuring acp.py and manifest.yaml, using adk.messages or adk.state, or resolving…
kid-sid/claude-spellbook
A skill your agent uses when building production LLM applications — designing RAG pipelines, choosing vector databases, implementing agent orchestration, optimizing cost, or adding AI safety…
kid-sid/claude-spellbook
A skill your agent uses when building or refactoring Angular applications — choosing between signals, RxJS, and NgRx for state, configuring routing with guards and lazy loading, optimizing change…
kid-sid/claude-spellbook
A skill your agent uses when designing new REST endpoints, reviewing an existing API contract, adding pagination or filtering, planning a versioning strategy, or building a public or partner-facing…
kid-sid/claude-spellbook
A skill your agent uses when implementing login flows, issuing or validating JWTs, setting up OAuth2/OIDC with a provider, designing role-based or attribute-based access control, securing API…
Works with
Categories
A skill your agent uses when implementing reliable message processing with Azure Service Bus — choosing between queues and topics, configuring peek-lock settlement, handling dead-lettered messages…. Azure Service Bus is an agent skill from kid-sid/claude-spellbook. Use when implementing reliable message processing with Azure Service Bus — choosing between queues and topics, configuring peek-lock settlement, handling dead-lettered messages, or enforcing ordered processing with sessions.
Azure Service Bus fits situations like: implementing reliable message processing with Azure Service Bus — choosing between queues and topics; configuring peek-lock settlement; handling dead-lettered messages; enforcing ordered processing with sessions.
Run `npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a claude-code`. Or copy the skill folder (skills/azure-service-bus in kid-sid/claude-spellbook) into .claude/skills/azure-service-bus in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a codex`. Or copy the skill folder (skills/azure-service-bus in kid-sid/claude-spellbook) into .agents/skills/azure-service-bus in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kid-sid/claude-spellbook --skill azure-service-bus -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/azure-service-bus, .gemini/skills/azure-service-bus, .github/skills/azure-service-bus and .opencode/skills/azure-service-bus in your project.
SKILL.md names no scripts, command-line tools or credentials: Azure Service Bus is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Azure Service Bus is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Azure Service Bus: Azure Service Bus for Python (microsoft/skills, 3.1k stars), Azure Servicebus TS (microsoft/skills, 3.1k stars), Azure Servicebus Dotnet (microsoft/skills, 3.1k stars) and Messaging (codewithmukesh/dotnet-claude-kit, 756 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kid-sid (a GitHub user) maintains it in kid-sid/claude-spellbook, which has 190 GitHub stars. The repository holds 55 skills in this directory. The repository was last updated on August 5, 2026.
Source: kid-sid/claude-spellbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.