Langsmith Deployment
soba-labs/langchain-agent-skills
Deploy and operate production agent servers with LangSmith Deployment.
Agent skill
by jeremylongshore in jeremylongshore/tons-of-skills-marketplace
Dispatch LangChain 1.0 chain/agent events to external systems — webhooks, Kafka, Redis Streams, SNS — via async fire-and-forget callbacks, subgraph-aware wiring, and HMAC-signed delivery with…
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-webhooks-events --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/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/.curated/langchain-webhooks-events .claude/skills/langchain-webhooks-events && 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 "langchain-webhooks-events" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-events into .claude/skills/langchain-webhooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-webhooks-events", 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/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-eventsType 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 jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-webhooks-events --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/.curated/langchain-webhooks-events .agents/skills/langchain-webhooks-events && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "langchain-webhooks-events" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-events into .agents/skills/langchain-webhooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-webhooks-events", 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 jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-webhooks-events --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/.curated/langchain-webhooks-events .cursor/skills/langchain-webhooks-events && 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 "langchain-webhooks-events" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-events into .cursor/skills/langchain-webhooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-webhooks-events", 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/jeremylongshore/tons-of-skills-marketplace.git --path skills/.curated/langchain-webhooks-events--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 jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-webhooks-events --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/.curated/langchain-webhooks-events .gemini/skills/langchain-webhooks-events && 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 "langchain-webhooks-events" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-events into .gemini/skills/langchain-webhooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-webhooks-events", 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 jeremylongshore/tons-of-skills-marketplace langchain-webhooks-eventsInstalls 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 jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/.curated/langchain-webhooks-events .github/skills/langchain-webhooks-events && 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 "langchain-webhooks-events" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-events into .github/skills/langchain-webhooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-webhooks-events", 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 jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-webhooks-events --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jeremylongshore/tons-of-skills-marketplace.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/.curated/langchain-webhooks-events .opencode/skills/langchain-webhooks-events && 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 "langchain-webhooks-events" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-webhooks-events into .opencode/skills/langchain-webhooks-events/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-webhooks-events", 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.
langchain-webhooks-eventsDispatch LangChain 1.0 chain/agent events to external systems — webhooks, Kafka, Redis Streams, SNS — via async fire-and-forget callbacks, subgraph-aware wiring, and HMAC-signed delivery with…
Langchain Webhooks Events is an agent skill from jeremylongshore/tons-of-skills-marketplace. Dispatch LangChain 1.0 chain/agent events to external systems — webhooks, Kafka, Redis Streams, SNS — via async fire-and-forget callbacks, subgraph-aware wiring, and HMAC-signed delivery with idempotency keys. Use when firing webhooks on tool calls, pushing telemetry to Kafka / Redis Streams, or fanning progress to multiple subscribers without blocking the chain. Trigger with "langchain webhook", "langchain event dispatch", "langchain callback kafka", "langchain pubsub", "langchain per-tool webhook"…
Its SKILL.md is about 3.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/async-callback-handler.md`, `references/dispatch-targets.md` and `references/idempotency-and-retry.md`). Compatibility notes: Designed for Claude Code
It sits in Backend & APIs, covering Webhooks, Building AI agents and Event-driven systems. It works with LangChain, Apache Kafka, Redis and LangGraph. The repository describes itself as: Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit cfae287. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditBash(python:*)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.
Links to these hosts (documentation or services it may open):
python.langchain.comlangchain-ai.github.iofastapi.tiangolo.comaiokafka.readthedocs.ioredis.ioFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
SIGNING_SECRETWEBHOOK_SIGNING_SECRETFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Designed for Claude Code
From compatibility in the SKILL.md frontmatter.
Langchain Webhooks Events loads about 3.9k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 154 tokens; SKILL.md has 1,052 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 jeremylongshore/tons-of-skills-marketplace at commit cfae287, republished under its MIT licence (© jeremylongshore). 1,052 words, ~3,915 tokens.
.claude/skills/langchain-webhooks-events/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.A team wires per-tool webhook dispatch from their LangChain agent via FastAPI
BackgroundTasks — analytics is always N seconds late because BackgroundTasks
fire after the HTTP response closes, not during the stream (P60). Worse:
the BaseCallbackHandler they attached via .with_config(callbacks=[h])
fires on the outer agent but is dark on the subagent's tool calls — custom
callbacks are not inherited by LangGraph subgraphs (P28), they must be
passed via config["callbacks"] at invoke time.
Pain-catalog anchors handled here:
with_config don't propagate to subgraphslangchain-langgraph-streaming)astream_events(v2) emits thousands of events; never forward rawinvoke() inside async endpoint blocks the event loopBackgroundTasks fire post-response; wrong for per-event dispatchThis skill walks through an async AsyncCallbackHandler with fire-and-forget
dispatch, per-target sinks for HTTP / Kafka / Redis Streams / SNS, HMAC-signed
delivery with 1s/5s/30s retry and DLQ, idempotency keys = `run_id + event_type
, andconfig["callbacks"]wiring that makes subagent calls visible. Typical webhook latency budget: <500ms per event. Pin:langchain-core 1.0.x, langgraph 1.0.x. Scope: server-to-server dispatch only — UI streaming is in langchain-langgraph-streaming`.langchain-core >= 1.0, < 2.0, langgraph >= 1.0, < 2.0httpx >= 0.27 for async HTTP (or aiohttp)aiokafka, redis[hiredis] >= 5, aioboto3 (per target)Sync dispatch from a callback blocks the chain — a slow HTTP POST during
on_tool_end serializes all downstream tokens behind it (P48). Use
asyncio.create_task(...) so the dispatch runs alongside the chain:
import asyncio
import uuid
from typing import Any
from langchain_core.callbacks import AsyncCallbackHandler
class EventDispatchHandler(AsyncCallbackHandler):
"""Fire-and-forget dispatch to external sinks.
IMPORTANT: subclass AsyncCallbackHandler (not BaseCallbackHandler) so
on_* methods are awaited. Mixing sync and async handlers is a silent
footgun — sync on_* blocks the event loop (P48).
"""
def __init__(self, sink, *, run_id: str | None = None):
self.sink = sink # dispatch target — Step 3
self.run_id = run_id or str(uuid.uuid4())
self._tasks: set[asyncio.Task] = set()
def _dispatch(self, event_type: str, payload: dict, step_index: int) -> None:
# Fire-and-forget. Keep a strong reference so the task isn't GC'd
# mid-flight (asyncio quirk — orphan tasks get garbage-collected).
task = asyncio.create_task(
self.sink.send(
idempotency_key=f"{self.run_id}:{event_type}:{step_index}",
event_type=event_type,
payload=payload,
)
)
self._tasks.add(task)
task.add_done_callback(self._tasks.discard)
async def on_tool_end(self, output: Any, *, run_id, parent_run_id=None, **kwargs):
# 4000 char cap — keep payload under typical webhook body limits
# while preserving enough context for downstream analytics.
MAX_OUTPUT_CHARS = 4000
self._dispatch(
"tool_end",
{"output": str(output)[:MAX_OUTPUT_CHARS], "run_id": str(run_id)},
step_index=kwargs.get("tags", []).__len__() or 0,
)
async def on_chain_end(self, outputs: dict, *, run_id, **kwargs):
# Only named chains — skip the unnamed LCEL inner nodes (P47)
name = kwargs.get("name")
if not name or name.startswith("RunnableLambda"):
return
self._dispatch("chain_end", {"name": name, "run_id": str(run_id)}, step_index=0)
async def drain(self, timeout: float = 5.0) -> None:
"""Call before process exit so in-flight dispatches complete."""
if self._tasks:
await asyncio.wait(self._tasks, timeout=timeout)See Async Callback Handler for the full
handler — on_llm_end, filtering, sync-vs-async decision.
config so subgraphs inherit themP28: Runnable.with_config(callbacks=[h]) binds at definition and is not
inherited by LangGraph subgraphs. Pass callbacks via config at invocation:
# WRONG — subagent tool calls never fire the handler
agent_with_handler = agent.with_config({"callbacks": [handler]})
await agent_with_handler.ainvoke({"messages": [...]})
# RIGHT — callbacks in config propagate into subgraphs
await agent.ainvoke(
{"messages": [...]},
config={"callbacks": [handler], "configurable": {"thread_id": "t1"}},
)Validate propagation with a probe that counts events by kwargs["name"] and
asserts the subagent's name appears. See Subgraph Propagation.
Match the event to the transport:
| Target | Delivery | Typical latency | Use when | Failure mode |
|---|---|---|---|---|
| HTTP webhook | At-least-once (with retry) | 50-500ms | Partner integrations, Zapier/Make, customer-owned endpoints | Endpoint 5xx → retry 1s/5s/30s → DLQ |
| Kafka (aiokafka) | At-least-once (idempotent producer) | 5-20ms intra-region | High-volume telemetry, analytics fan-in | Broker unavailable → retry + local buffer |
Redis Streams (XADD) | At-least-once (consumer groups) | 1-5ms | Near-realtime worker queues, progress fan-out | Redis down → retry or spill to disk |
| SNS | At-most-once (best-effort) | 10-100ms | Fan-out to multiple SQS/Lambda subscribers | Best-effort only; accept loss or front with SQS FIFO |
Handler stays provider-agnostic; only the sink changes. A minimal HTTP sink:
import hashlib, hmac, json, os
import httpx
WEBHOOK_URL = os.environ["WEBHOOK_URL"]
SIGNING_SECRET = os.environ["WEBHOOK_SIGNING_SECRET"].encode()
class WebhookSink:
# 256-bit HMAC — industry-standard signature strength (GitHub, Stripe use same)
SIG_ALG = hashlib.sha256
# Retry schedule: 1s absorbs transient blips, 5s absorbs brief 503s,
# 30s absorbs autoscaler / cold-start incidents. Beyond 30s = stale event.
RETRY_DELAYS = (1, 5, 30)
REQUEST_TIMEOUT_S = 5.0
def __init__(self, client: httpx.AsyncClient):
self.client = client
async def send(self, *, idempotency_key: str, event_type: str, payload: dict) -> None:
body = json.dumps({"event": event_type, "data": payload}, sort_keys=True).encode()
sig = hmac.new(SIGNING_SECRET, body, self.SIG_ALG).hexdigest()
headers = {
"Content-Type": "application/json",
"Idempotency-Key": idempotency_key,
"X-Signature-256": f"sha256={sig}",
}
for delay in self.RETRY_DELAYS:
try:
resp = await self.client.post(WEBHOOK_URL, content=body, headers=headers, timeout=self.REQUEST_TIMEOUT_S)
if 200 <= resp.status_code < 300:
return
if resp.status_code < 500 and resp.status_code != 429:
return # 4xx (except 429) is not retryable
except (httpx.TimeoutException, httpx.TransportError):
pass
await asyncio.sleep(delay)
await self._dead_letter(idempotency_key, event_type, payload)See Dispatch Targets for Kafka / Redis Streams / SNS sinks and per-target DLQ patterns.
astream_events(version="v2") emits thousands of events per invocation (P47).
Never forward raw — dispatch only what the downstream consumes:
| Callback method | Typical decision | Why |
|---|---|---|
on_llm_start | Skip | Prompt content often contains PII; low value without masking |
on_llm_new_token | Skip for dispatch (UI only) | 1 event per token; N/A to analytics |
on_llm_end | Dispatch for named chains only | Token usage, final response — high value, low volume |
on_chain_start | Skip (P47 noise) | LCEL emits one per inner runnable |
on_chain_end | Dispatch for named subgraphs only | Stage completion — what analytics cares about |
on_tool_start | Optional (dispatch for audit log) | Matters for compliance / tool-use audit |
on_tool_end | Dispatch always | The key analytics signal in agent flows |
on_agent_action | Dispatch | Cleaner signal than on_tool_start in agent graphs |
on_agent_finish | Dispatch | Terminal event for the run |
Rule of thumb: dispatch on_tool_end + named on_chain_end + on_llm_end.
Everything else is noise.
At-least-once transports mean duplicates. Build the key deterministically:
# run_id — unique per chain invocation (propagates into subgraphs)
# event_type — on_tool_end / on_chain_end / on_llm_end
# step_index — monotonic per-run counter you maintain in the handler
idempotency_key = f"{run_id}:{event_type}:{step_index}"Retry budget: 1s → 5s → 30s (~36s total) then DLQ. Retry on 5xx / 429 /
network only — 4xx (except 429) goes straight to DLQ. DLQ is a Redis Stream
or S3 prefix keyed by YYYY/MM/DD/run_id/idempotency_key.json; alarm on depth
growth. See Idempotency and Retry for
HMAC verify, at-least-once vs at-most-once, and 24h de-dup window sizing.
BackgroundTasks (P60)FastAPI BackgroundTasks run after the response closes — exactly wrong for
per-event dispatch. Events must go out during the chain:
# WRONG — events fire all at once after the stream ends
@app.post("/chat")
async def chat(req: Request, bg: BackgroundTasks):
bg.add_task(agent.ainvoke, {"messages": [...]}) # late + no streaming
return {"status": "accepted"}
# RIGHT — handler fires during the chain, each on_tool_end dispatches immediately
@app.post("/chat")
async def chat(req: ChatReq):
handler = EventDispatchHandler(sink=webhook_sink, run_id=req.run_id)
try:
result = await agent.ainvoke(
{"messages": req.messages},
config={"callbacks": [handler], "configurable": {"thread_id": req.thread_id}},
)
finally:
await handler.drain(timeout=5.0) # flush in-flight dispatches
return {"result": result}drain() awaits in-flight asyncio.create_task() dispatches up to 5s so
events aren't lost when the pod scales down mid-request.
BaseCallbackHandler subclass with asyncio.create_task() fire-and-forgetconfig["callbacks"] at invoke time (subgraph-safe)run_id + event_type + step_indexon_tool_end + named on_chain_end + on_llm_enddrain() on shutdown to flush in-flight dispatches| Error | Cause | Fix |
|---|---|---|
| Handler fires on outer agent but not subagent | Bound via with_config at definition (P28) | Pass via config["callbacks"] at invoke(...) time |
| Webhook analytics lags generation duration | BackgroundTasks fire post-response (P60) | Dispatch from the callback handler, never from BackgroundTasks |
| Browser / Kafka saturates on long generations | Forwarded astream_events(v2) raw (P47) | Filter events server-side; dispatch only on_tool_end/on_chain_end/on_llm_end |
| SSE stream hangs, no end event | Proxy buffering (P46) | Set X-Accel-Buffering: no — see langchain-langgraph-streaming |
| Event loop freezes on slow webhook | Sync POST in callback (P48) | Subclass AsyncCallbackHandler; use asyncio.create_task() |
| Duplicate events downstream | At-least-once dispatch + retry | Receiver dedupes on Idempotency-Key header with 24h cache |
Orphan asyncio.create_task never runs | GC collected the task | Hold a strong reference in self._tasks and discard on completion |
| Events lost on pod shutdown | In-flight tasks cancelled | Call await handler.drain(timeout=5.0) in endpoint finally block |
| 4xx webhook errors retrying 3x | Retry logic retrying everything | Retry only on 5xx / 429 / network; 4xx goes straight to DLQ |
| Signature verification fails on receiver | Body re-serialized with different key order | Sign the exact bytes you send; use sort_keys=True in json.dumps |
Planner subagent runs search_docs → summarize; outer agent needs a webhook
on summarize completion. Full wiring in Subgraph Propagation.
CompositeSink dispatches to multiple child sinks via
asyncio.gather(..., return_exceptions=True) — one sink's failure doesn't block
others. See Dispatch Targets.
Verify X-Signature-256, SETNX Idempotency-Key against Redis with 24h TTL,
200 on both replay and first-seen. See Idempotency and Retry.
BaseCallbackHandler / AsyncCallbackHandler APIastream_events v2 events referenceXADD / consumer groupslangchain-langgraph-streaming (UI streaming), langchain-debug-bundle (callback-propagation debugging)docs/pain-catalog.md (entries P28, P46, P47, P48, P60)© jeremylongshore, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references) in skills/.curated/langchain-webhooks-events of jeremylongshore/tons-of-skills-marketplace.
Open the folder on GitHubat commit cfae287
Langchain Webhooks Events 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 |
|---|---|---|---|---|---|---|
| Langchain Webhooks Events this skilljeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~3.9k | Automated safety check: Pass | MIT | |
| Langsmith Deploymentsoba-labs/langchain-agent-skills | 107 | — | ~1.7k | Automated safety check: Pass | MIT | |
| FoundatioFoundatioFx/Foundatio | 2.1k | — | ~3.9k | Automated safety check: Pass | Apache-2.0 | |
| Stripe Best Practiceskanchengw/cnllm | 173 | 2 repos | ~925 | Automated safety check: Pass | Apache-2.0 | |
| Create Environmentgodatadriven/whirl | 205 | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| Monstermq Graphql Configvogler75/monster-mq | 143 | — | ~2.3k | Automated safety check: Pass | GPL-3.0 |
soba-labs/langchain-agent-skills
Deploy and operate production agent servers with LangSmith Deployment.
FoundatioFx/Foundatio
A skill your agent uses when working with Foundatio infrastructure abstractions for .NET -- caching, queuing, messaging, file storage, distributed locking, or background jobs.
kanchengw/cnllm
Guides Stripe integration decisions — API selection (Checkout Sessions vs PaymentIntents), Connect platform setup (Accounts v2, controller properties), billing/subscriptions, Treasury financial…
godatadriven/whirl
Create a new Whirl environment in the envs/ directory. An agent skill from godatadriven/whirl.
vogler75/monster-mq
Guide for configuring, managing, and mutating MonsterMQ settings, devices, flows, AI agents, users, loggers, archive groups, topic schemas, and publishing messages via the GraphQL API.
ydf0509/funboost
当需要为 funboost 任务选择消息中间件时使用。触发场景:对比 Redis/RabbitMQ/Kafka/本地队列、配置 broker 连接、设置 brokerexclusiveconfig。关键词:BrokerEnum, brokerkind, Redis, RabbitMQ, Kafka, MQTT, 中间件选型, 消息队列选择。
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to conduct a security-focused code review using the security-agent plugin.
jeremylongshore/tons-of-skills-marketplace
Build this skill automates the adaptation of pre-trained machine learning models using transfer learning techniques.
jeremylongshore/tons-of-skills-marketplace
Execute proactive auto-loading: automatically detects and loads agents.md files.
jeremylongshore/tons-of-skills-marketplace
Aggregate and centralize performance metrics from applications, systems, databases, caches, and services.
jeremylongshore/tons-of-skills-marketplace
Execute this skill enables AI assistant to analyze capacity requirements and plan for future growth.
jeremylongshore/tons-of-skills-marketplace
Process use when you need to work with database indexing. An agent skill from jeremylongshore/tons-of-skills-marketplace.
Works with
Categories
Dispatch LangChain 1.0 chain/agent events to external systems — webhooks, Kafka, Redis Streams, SNS — via async fire-and-forget callbacks, subgraph-aware wiring, and HMAC-signed delivery with…. Langchain Webhooks Events is an agent skill from jeremylongshore/tons-of-skills-marketplace.0 chain/agent events to external systems — webhooks, Kafka, Redis Streams, SNS — via async fire-and-forget callbacks, subgraph-aware wiring, and HMAC-signed delivery with idempotency keys.
Langchain Webhooks Events fits situations like: firing webhooks on tool calls; pushing telemetry to Kafka / Redis Streams; fanning progress to multiple subscribers without blocking the chain; with langchain webhook.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a claude-code`. Or copy the skill folder (skills/.curated/langchain-webhooks-events in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/langchain-webhooks-events in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a codex`. Or copy the skill folder (skills/.curated/langchain-webhooks-events in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/langchain-webhooks-events 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 jeremylongshore/tons-of-skills-marketplace --skill langchain-webhooks-events -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/langchain-webhooks-events, .gemini/skills/langchain-webhooks-events, .github/skills/langchain-webhooks-events and .opencode/skills/langchain-webhooks-events in your project.
Going by SKILL.md and its folder, Langchain Webhooks Events needs credentials named SIGNING_SECRET and WEBHOOK_SIGNING_SECRET. Our summary lists: Python 3; A credential in SIGNING_SECRET; A credential in WEBHOOK_SIGNING_SECRET. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(python:*). Compatibility (from SKILL.md): Designed for Claude Code.
SKILL.md names 5 domains. As links in the text: python.langchain.com, langchain-ai.github.io, fastapi.tiangolo.com, aiokafka.readthedocs.io and redis.io. 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.
Langchain Webhooks Events is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.9k tokens (SKILL.md is roughly 16k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Langchain Webhooks Events: Langsmith Deployment (soba-labs/langchain-agent-skills, 107 stars), Foundatio (FoundatioFx/Foundatio, 2.1k stars), Stripe Best Practices (kanchengw/cnllm, 173 stars) and Create Environment (godatadriven/whirl, 205 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
jeremylongshore (a GitHub user) maintains it in jeremylongshore/tons-of-skills-marketplace, which has 2,827 GitHub stars. The repository holds 3,342 skills in this directory. The repository was last updated on October 10, 2026.
Source: jeremylongshore/tons-of-skills-marketplace on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.