Mem0 Platform SDK
mem0ai/mem0
Adds persistent memory to AI apps with the Mem0 Python and TypeScript SDKs: store, search, update and delete user memories, with framework integrations.
Agent skill
by jeremylongshore in jeremylongshore/tons-of-skills-marketplace
Build LangGraph 1.0 human-in-the-loop approval flows with interruptbefore / interruptafter and Command(resume=...) — JSON-serializable state, clean resume semantics, and UI wiring for approval…
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-langgraph-human-in-loop -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-langgraph-human-in-loop --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-langgraph-human-in-loop .claude/skills/langchain-langgraph-human-in-loop && 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-langgraph-human-in-loop" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-langgraph-human-in-loop into .claude/skills/langchain-langgraph-human-in-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-langgraph-human-in-loop", 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-langgraph-human-in-loopType 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-langgraph-human-in-loop -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-langgraph-human-in-loop --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-langgraph-human-in-loop .agents/skills/langchain-langgraph-human-in-loop && 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-langgraph-human-in-loop" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-langgraph-human-in-loop into .agents/skills/langchain-langgraph-human-in-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-langgraph-human-in-loop", 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-langgraph-human-in-loop -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-langgraph-human-in-loop --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-langgraph-human-in-loop .cursor/skills/langchain-langgraph-human-in-loop && 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-langgraph-human-in-loop" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-langgraph-human-in-loop into .cursor/skills/langchain-langgraph-human-in-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-langgraph-human-in-loop", 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-langgraph-human-in-loop--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-langgraph-human-in-loop -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-langgraph-human-in-loop --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-langgraph-human-in-loop .gemini/skills/langchain-langgraph-human-in-loop && 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-langgraph-human-in-loop" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-langgraph-human-in-loop into .gemini/skills/langchain-langgraph-human-in-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-langgraph-human-in-loop", 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-langgraph-human-in-loopInstalls 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-langgraph-human-in-loop -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-langgraph-human-in-loop .github/skills/langchain-langgraph-human-in-loop && 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-langgraph-human-in-loop" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-langgraph-human-in-loop into .github/skills/langchain-langgraph-human-in-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-langgraph-human-in-loop", 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-langgraph-human-in-loop -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-langgraph-human-in-loop --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-langgraph-human-in-loop .opencode/skills/langchain-langgraph-human-in-loop && 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-langgraph-human-in-loop" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-langgraph-human-in-loop into .opencode/skills/langchain-langgraph-human-in-loop/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-langgraph-human-in-loop", 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-langgraph-human-in-loopBuild LangGraph 1.0 human-in-the-loop approval flows with interruptbefore / interruptafter and Command(resume=...) — JSON-serializable state, clean resume semantics, and UI wiring for approval…
Langchain Langgraph Human In Loop is an agent skill from jeremylongshore/tons-of-skills-marketplace. Build LangGraph 1.0 human-in-the-loop approval flows with interruptbefore / interruptafter and Command(resume=...) — JSON-serializable state, clean resume semantics, and UI wiring for approval decisions. Use when adding an approval gate before an expensive tool call, wiring a Slack/web UI for agent approvals, or debugging a graph that crashes on interrupt. Trigger with "langgraph human in loop", "langgraph interruptbefore", "langgraph approval flow", "Command resume", "langgraph HITL".
Its SKILL.md is about 4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/approval-ui-wiring.md`, `references/interrupt-decision-tree.md` and `references/one-pager.md`). Compatibility notes: Designed for Claude Code
It sits in AI & LLM Engineering, covering Building AI agents. It works with LangGraph, LangChain and Slack. 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 and json).
From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
langchain-ai.github.ioblog.langchain.comFrom 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.
Designed for Claude Code
From compatibility in the SKILL.md frontmatter.
Langchain Langgraph Human In Loop loads about 4k tokens when it runs, and up to ~14k if it reads all its reference files. Until then it costs about 132 tokens; SKILL.md has 1,413 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,413 words, ~3,993 tokens.
.claude/skills/langchain-langgraph-human-in-loop/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.A team adds interrupt_before=["send_email"] to require a human approval
before the email goes out. First integration test crashes at the interrupt
boundary with:
TypeError: Object of type datetime is not JSON serializableThe culprit is two nodes upstream: a classify node stashed
"received_at": datetime.utcnow() into state. Every node-level unit test
passed because node completion does not serialize state — only the
checkpointer does, and only at supersteps that include an interrupt. The
failure is invisible until interrupt time (P17).
A week later the resume path ships. The human reviews the draft, clicks "approve with edits," and the backend runs:
graph.invoke(Command(update={"messages": [corrected_msg]}, resume="approved"), config)The prior 47 messages vanish. messages was typed as plain
list[AnyMessage] with no reducer, so update replaces the field instead of
appending (P18).
This skill covers: three interrupt styles (interrupt_before,
interrupt_after, inline interrupt()), the JSON-only state invariant with
a pre-interrupt scanner, the Command(resume=...) /
Command(update=..., resume=...) contract, an approval UI wire format
(GET pending / POST decision with optimistic concurrency), safe-cancellation
routing to END, and the tradeoff between native interrupts and a separate
approval service. Pin: langgraph 1.0.x, langgraph-checkpoint 2.0.x.
Pain-catalog anchors: P17, P18 (adjacent: P16, P20).
langgraph >= 1.0, < 2.0MemorySaver (dev), PostgresSaver (prod), or SqliteSaver (single-box)thread_id contract at the app boundary (see langchain-langgraph-checkpointing)langchain-langgraph-basics — nodes, edges, TypedDict state with reducersLangGraph 1.0 exposes three interrupt mechanisms. They are not interchangeable.
| Style | Syntax | Use when |
|---|---|---|
interrupt_before=[node] | compile(interrupt_before=["send_email"]) | Review inputs before an irreversible tool. Graph pauses before node runs. State shown is the input. |
interrupt_after=[node] | compile(interrupt_after=["draft_email"]) | Review output of a node (e.g., an LLM draft). Graph pauses after node completes. |
Inline interrupt() | Inside a node: decision = interrupt({"kind": "..."}) | Structured prompt mid-node with custom payload. Most flexible; lives in node code. |
Rule of thumb: prefer interrupt_before for hard gates (tool must not run
without approval). Use interrupt_after for review loops (draft → approve →
send). Use inline interrupt() when the prompt varies on intermediate
computation.
Typical interrupt round-trip latency in production is 50-300 ms from
pause to checkpoint write (local Postgres) plus UI time; budget 1-5 s
total for a Slack-based approval. Checkpoint row sizes average 2-20 KB on
small graphs and cap at ~1 MB on PostgresSaver before historical
checkpoints need pruning.
See Interrupt Decision Tree for full criteria, multiple-interrupt-per-graph patterns, and the interrupt-vs-tool comparison.
Checkpointers serialize state to JSON on every superstep. Any non-JSON type
raises TypeError at the interrupt boundary — not at the offending node.
Canonical offenders:
| Type | Fix |
|---|---|
datetime / date | dt.isoformat() — ISO 8601 string |
bytes | base64.b64encode(b).decode() |
set | sorted(s) |
Pydantic BaseModel with non-primitive fields | .model_dump(mode="json") |
| Custom classes | dataclasses.asdict(obj) or vars(obj) |
numpy.ndarray | .tolist() |
decimal.Decimal | str(d) or float(d) (lossy) |
float("nan") / float("inf") | None (JSON forbids them; some savers crash on allow_nan=False) |
Ship a pre-interrupt scanner in dev and CI:
import json
from typing import Any
class NonSerializableStateError(TypeError):
"""Raised when state contains values the checkpointer cannot serialize."""
def assert_state_is_json_serializable(state: dict[str, Any], *, path: str = "state") -> None:
"""Walk state depth-first and raise a typed error naming the offending key path."""
_walk(state, path)
def _walk(v: Any, path: str) -> None:
if v is None or isinstance(v, (bool, int, float, str)):
return
if isinstance(v, list):
for i, item in enumerate(v):
_walk(item, f"{path}[{i}]")
return
if isinstance(v, dict):
for k, val in v.items():
_walk(val, f"{path}.{k}")
return
raise NonSerializableStateError(
f"{path} is {type(v).__name__}, not JSON-serializable. "
f"Convert at node boundary."
)Call assert_state_is_json_serializable(state) at the end of every node
preceding an interrupt-flagged node, or attach as LangGraph middleware. In
CI, run the full graph to interrupt against a fixture that exercises every
branch — the only way to catch P17 before prod.
See State Serialization for Interrupts for the full forbidden-types list, the Pydantic-in-state pattern, and the integration-test harness.
Two shapes. They are not equivalent.
from langgraph.types import Command
# Shape A — resume only: human approved as-is
graph.invoke(Command(resume="approved"), config)
# Shape B — update + resume: human edited state mid-graph
graph.invoke(
Command(update={"recipient": "new@example.com"}, resume="approved"),
config,
)resume="..." is the value returned from inline interrupt() inside the
node (if any). For interrupt_before / interrupt_after, no node reads
resume, but the checkpoint records it for audit.
update={...} merges into state via the reducer declared in the TypedDict.
Without a reducer, update replaces the field (P18). Always annotate
list and dict state:
from typing import Annotated, TypedDict
from langchain_core.messages import AnyMessage
from langgraph.graph.message import add_messages
class AgentState(TypedDict):
messages: Annotated[list[AnyMessage], add_messages] # append, not replace
approvals: Annotated[list[dict], lambda l, r: l + r] # custom append reducer
draft: Annotated[dict, lambda l, r: {**l, **r}] # dict merge reducer
last_decision: str # scalar: replace is fineSee Resume Patterns for the five canonical
resume shapes (plain approve, approve with edits, reject to END, partial
approval, inline-interrupt structured return), the reducer cookbook, and the
audit-log write order.
Two HTTP endpoints. Keep them boring.
GET /approvals/pending lists paused threads:
[
{
"thread_id": "conv-abc123",
"checkpoint_id": "01JABC...",
"interrupted_at": "2026-04-21T15:32:11Z",
"node": "send_email",
"state_diff": {"draft": {"to": "user@example.com", "subject": "Welcome"}}
}
]POST /approvals/<thread-id>/decision applies the decision:
{
"decision": "approve" | "reject" | "edit",
"edits": {"recipient": "corrected@example.com"},
"approver": "jeremy@intentsolutions.io",
"reason": "Verified against ticket INT-4821",
"expected_checkpoint_id": "01JABC...",
"idempotency_key": "c2f5e8a0-..."
}Optimistic concurrency (the expected_checkpoint_id check) matters the
moment two approvers open the same thread in two browser tabs. Without it,
the second click silently overwrites the first. Return 409 Conflict on
mismatch; UI refreshes.
Server-side flow: authz → idempotency dedupe → checkpoint check → audit-log
write (BEFORE mutation) → build Command → graph.ainvoke(cmd, config) →
audit-log finalize.
See Approval UI Wiring for the full HTTP contract with status codes, FastAPI implementation, Slack Block Kit mapping, state-diff redaction, and an audit-log schema compatible with SOC2 evidence requirements.
END on rejectWhen the human rejects, the gated node must NOT execute. Two clean patterns:
Pattern A — conditional edge after the interrupted node (preferred):
from langgraph.graph import END
def route_after_approval(state: AgentState) -> str:
if state.get("last_decision") == "rejected":
return END
return "send_email"
builder.add_conditional_edges("await_approval", route_after_approval, {
"send_email": "send_email",
END: END,
})Pattern B — Command(goto=END) at resume:
graph.invoke(Command(resume="rejected", goto=END), config)Prefer Pattern A in production: graph topology stays the source of truth,
audit replays work without the UI. Always log the rejection to the checkpoint
via Command(update={"last_decision": "rejected", "reject_reason": ...})
BEFORE routing to END — otherwise the audit trail lives only in the UI DB.
| Dimension | LangGraph interrupts | Separate approval service |
|---|---|---|
| Latency | 50-300 ms pause + human time | Human time + queue latency |
| State coherence | Single source of truth (checkpoint) | Two systems to reconcile |
| Concurrency | Checkpoint-based optimistic locking | Whatever the queue provides |
| Multi-graph | Per-graph, per-thread | Centralized policy engine |
| Observability | get_state() + checkpoint history | Separate audit system |
| Failure mode | JSON-serialization at interrupt (P17) | Network partition between services |
| Best for | Single LangGraph app, 1-10 approval types, <1k/day | Multi-app enterprise, complex RBAC, 10k+/day |
Single LangGraph app with fewer than a dozen approval types: native interrupts are simpler and more reliable. Cross-app approval platform with escalations, delegations, and SLAs: run a dedicated service and call it from a tool, not from an interrupt.
interrupt_before / interrupt_after lists, or inline interrupt() calls where payload structure mattersdatetime → ISO strings, bytes → base64, Pydantic → .model_dump(mode="json"), custom classes → dictsTypedDict state with explicit reducers on every list and dict fieldNonSerializableStateError with a key pathexpected_checkpoint_id optimistic-concurrency check and idempotency_key dedupeEND via conditional edge (Pattern A) with last_decision recorded in state for auditapprover, reason, thread_id, checkpoint_id_before, checkpoint_id_after| Error | Cause | Fix |
|---|---|---|
TypeError: Object of type datetime is not JSON serializable at interrupt | Non-JSON value in state (P17) | Convert at node boundary; add pre-interrupt scanner in CI |
Resume with Command(update={"messages": [new]}) loses history | messages field missing reducer (P18) | Annotate as Annotated[list[AnyMessage], add_messages] |
ValueError: Thread ... has no interrupted nodes on resume | Graph already ran to completion, or thread_id mismatch | Call graph.get_state(config) first; assert snapshot.next is non-empty |
| Human clicks approve, nothing happens | Missing checkpointer on compile() — interrupts require persistence | graph.compile(checkpointer=MemorySaver() or PostgresSaver(...)) |
| Two approvers both click approve, second one's edits win silently | No optimistic concurrency | Include expected_checkpoint_id in POST body; return 409 on mismatch |
KeyError: 'configurable' at resume | config dict missing thread_id | config = {"configurable": {"thread_id": tid}} — required by every checkpointer |
| Approval UI shows stale state after another approver acted | Cached GET /pending response | Cache-Control: no-store on the pending endpoint |
| Graph halts silently after reject | Conditional edge router returned value not in path_map | Include END in path_map; assert router output in keyset |
Email-sending agent that must not send without approval. State carries
draft: {to, subject, body}, graph compiles with
interrupt_before=["send_email"], resume either invokes the send tool or
routes to END on reject. See
Resume Patterns for the full worked example
including audit-log write order.
Human accepts the recipient but rewrites the subject. Resume is
Command(update={"draft": {**state["draft"], "subject": new_subject}}, resume="approved").
Note the spread — without it the draft is replaced. Scalar dicts replace by
default; declare a dict reducer to merge partials cleanly. See
Resume Patterns.
interrupt() with a custom payloadInside a validate_purchase node, the model has decided to buy three items
at USD 450 total. The node calls
decision = interrupt({"kind": "confirm_purchase", "items": items, "total": 450})
and the UI reads the payload to render a rich confirmation dialog. On resume,
decision is whatever the UI sent via
Command(resume={"approved": True, "notes": "..."}). See
Interrupt Decision Tree.
GET /pending feeds a cron that posts Block Kit messages with approve/reject
buttons. Button callback POSTs to /decision. Slack's interaction payload
carries user.id, which becomes approver in the audit log. See
Approval UI Wiring for the Block Kit
template and signing-secret validation.
Command type referenceinterrupt function referencedocs/pain-catalog.md (entries P16, P17, P18, P20)langchain-langgraph-basics, langchain-langgraph-checkpointing, langchain-middleware-patterns© 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-langgraph-human-in-loop of jeremylongshore/tons-of-skills-marketplace.
Open the folder on GitHubat commit cfae287
Langchain Langgraph Human In Loop 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 Langgraph Human In Loop this skilljeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~4k | Automated safety check: Pass | MIT | |
| Mem0 Platform SDKmem0ai/mem0 | 67k | 1 repos | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| LangSmith Trace DebuggingComposioHQ/awesome-claude-skills | 77k | 8 repos | ~2.7k | Automated safety check: Pass | None | |
| Add Example AgentGetBindu/Bindu | 10k | — | ~1.1k | Automated safety check: Notes | Custom licence | |
| Failproof AI SDK IntegrationFailproofAI/failproofai | 5.3k | — | ~6k | Automated safety check: Pass | Custom licence | |
| Edgeone Makers MigrationTencentEdgeOne/edgeone-makers-tools | 1.9k | 1 repos | ~4.1k | Automated safety check: Pass | MIT |
mem0ai/mem0
Adds persistent memory to AI apps with the Mem0 Python and TypeScript SDKs: store, search, update and delete user memories, with framework integrations.
ComposioHQ/awesome-claude-skills
Debugs LangChain and LangGraph agents by pulling recent execution traces with the langsmith-fetch CLI and reporting errors, tool calls, timings and token use.
GetBindu/Bindu
Add a new self-contained example agent under examples/. An agent skill from GetBindu/Bindu.
FailproofAI/failproofai
Helps instrument a custom Python or TypeScript agent to record events for Failproof AI, verify what gets written, and run an evaluator worker that scores the runs.
TencentEdgeOne/edgeone-makers-tools
Migrate existing AI agent projects (LangChain, LangGraph, OpenAI Agents SDK, Claude Agent SDK, CrewAI) to EdgeOne Makers platform conventions.
omnigent-ai/omnigent
Scans Python agent code for framework imports and recommends the matching Omnigent executor type, or says when the framework is not natively supported yet.
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.
Categories
Build LangGraph 1.0 human-in-the-loop approval flows with interruptbefore / interruptafter and Command(resume=...) — JSON-serializable state, clean resume semantics, and UI wiring for approval…. Langchain Langgraph Human In Loop is an agent skill from jeremylongshore/tons-of-skills-marketplace.) — JSON-serializable state, clean resume semantics, and UI wiring for approval decisions.
Langchain Langgraph Human In Loop fits situations like: adding an approval gate before an expensive tool call; wiring a Slack/web UI for agent approvals; debugging a graph that crashes on interrupt; with langgraph human in loop.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-langgraph-human-in-loop -a claude-code`. Or copy the skill folder (skills/.curated/langchain-langgraph-human-in-loop in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/langchain-langgraph-human-in-loop in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-langgraph-human-in-loop -a codex`. Or copy the skill folder (skills/.curated/langchain-langgraph-human-in-loop in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/langchain-langgraph-human-in-loop 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-langgraph-human-in-loop -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-langgraph-human-in-loop, .gemini/skills/langchain-langgraph-human-in-loop, .github/skills/langchain-langgraph-human-in-loop and .opencode/skills/langchain-langgraph-human-in-loop in your project.
SKILL.md names no scripts, command-line tools or credentials: Langchain Langgraph Human In Loop is instructions for the agent only. Our summary lists: Python 3. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash(python:*). Compatibility (from SKILL.md): Designed for Claude Code.
SKILL.md names 2 domains. As links in the text: langchain-ai.github.io and blog.langchain.com. 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 Langgraph Human In Loop is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 4k 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 9.7k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Langchain Langgraph Human In Loop: Mem0 Platform SDK (mem0ai/mem0, 67k stars), LangSmith Trace Debugging (ComposioHQ/awesome-claude-skills, 77k stars), Add Example Agent (GetBindu/Bindu, 10k stars) and Failproof AI SDK Integration (FailproofAI/failproofai, 5.3k 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.