Add Example Agent
GetBindu/Bindu
Add a new self-contained example agent under examples/. An agent skill from GetBindu/Bindu.
Works correctly with LangChain 1.0's typed content blocks on AIMessage.content — text, tooluse, image, thinking, document — across Claude, GPT-4o, and Gemini, including multi-modal composition and…
$ npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-content-blocks -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-content-blocks --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-content-blocks .claude/skills/langchain-content-blocks && 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-content-blocks" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-content-blocks into .claude/skills/langchain-content-blocks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-content-blocks", 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-content-blocksType 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-content-blocks -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-content-blocks --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-content-blocks .agents/skills/langchain-content-blocks && 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-content-blocks" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-content-blocks into .agents/skills/langchain-content-blocks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-content-blocks", 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-content-blocks -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-content-blocks --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-content-blocks .cursor/skills/langchain-content-blocks && 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-content-blocks" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-content-blocks into .cursor/skills/langchain-content-blocks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-content-blocks", 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-content-blocks--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-content-blocks -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jeremylongshore/tons-of-skills-marketplace langchain-content-blocks --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-content-blocks .gemini/skills/langchain-content-blocks && 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-content-blocks" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-content-blocks into .gemini/skills/langchain-content-blocks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-content-blocks", 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-content-blocksInstalls 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-content-blocks -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-content-blocks .github/skills/langchain-content-blocks && 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-content-blocks" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-content-blocks into .github/skills/langchain-content-blocks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-content-blocks", 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-content-blocks -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-content-blocks --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-content-blocks .opencode/skills/langchain-content-blocks && 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-content-blocks" agent skill from https://github.com/jeremylongshore/tons-of-skills-marketplace/tree/main/skills/.curated/langchain-content-blocks into .opencode/skills/langchain-content-blocks/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "langchain-content-blocks", 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-content-blocksWorks correctly with LangChain 1.0's typed content blocks on AIMessage.content — text, tooluse, image, thinking, document — across Claude, GPT-4o, and Gemini, including multi-modal composition and…
Langchain Content Blocks is an agent skill from jeremylongshore/tons-of-skills-marketplace. Works correctly with LangChain 1.0's typed content blocks on AIMessage.content — text, tooluse, image, thinking, document — across Claude, GPT-4o, and Gemini, including multi-modal composition and tool-call iteration. Use when composing multi-modal messages, iterating tooluse blocks, handling Claude's thinking content, or unifying image inputs across providers. Trigger with "langchain content blocks", "AIMessage.content", "tooluse block", "claude image input", "langchain multimodal", "thinking block replay"…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including reference files (for example `references/block-type-matrix.md`, `references/multimodal-composition.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 LangChain and OpenAI. 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.
Shell commands in SKILL.md call:
pipFrom 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.complatform.claude.complatform.openai.comai.google.devFrom 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 Content Blocks loads about 3.6k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 140 tokens; SKILL.md has 1,029 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,029 words, ~3,587 tokens.
.claude/skills/langchain-content-blocks/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.On Claude, AIMessage.content is list[dict] even for pure text — so any
code from an OpenAI-first tutorial that calls message.content.lower() or
message.content.split() crashes with AttributeError: 'list' object has no attribute 'lower' on the first production Claude call (P02).
Multi-modal code that works on GPT-4o breaks on Claude because pre-1.0
image-block shapes differed across providers (P64). Multi-turn Claude
replay with extended thinking fails with
anthropic.BadRequestError: missing signature when prior thinking
blocks are stripped. Forced tool_choice prevents
stop_reason="end_turn" and loops forever (P63).
This is the deep-dive companion to langchain-model-inference. That
skill's references/content-blocks.md covers the str vs list[dict]
divergence and a safe text extractor. This skill goes further:
tool_use block iteration mechanics — IDs, args as dict vs JSON string, streaming deltasthinking blocks — signature, redaction, multi-turn replay semanticsdocument blocks — Claude citations API, source types, citation extractionimage shape, per-provider adapter behaviorPin: langchain-core 1.0.x, langchain-anthropic >= 1.0,
langchain-openai >= 1.0, anthropic >= 0.40. Pain-catalog anchors:
P02, P58, P63, P64.
langchain-core >= 1.0, < 2.0pip install langchain-anthropic langchain-openailangchain-anthropic >= 1.0 and Claude Sonnet 4+ / Opus 4+anthropic >= 0.40 and Claude Sonnet 4+langchain-model-inference (reads references/content-blocks.md first)LangChain 1.0 defines six typed content blocks on AIMessage.content
(and on chunks during streaming):
| Block type | Produced by | Notes |
|---|---|---|
text | All providers | On Claude, always wrapped as [{"type":"text","text":"..."}] |
tool_use | Claude, GPT-4o, Gemini | Always round-trip via msg.tool_calls, not hand-parsed |
tool_result | You (via ToolMessage) | One per tool_use; tool_call_id must match byte-for-byte |
image | Claude vision, GPT-4o, Gemini | Universal 1.0 shape; adapter handles wire format per provider |
thinking | Claude extended thinking only | Must preserve signature for replay |
document | Claude citations API (Sonnet 4+) | Input-side only; citations attach to output text blocks |
See Block-Type Matrix for the full table with streaming behavior and per-type gotchas.
For most code, use the helpers:
text = msg.text() # concatenated text across all text blocks
tool_calls = msg.tool_calls # normalized list[ToolCall]
usage = msg.usage_metadata # input_tokens, output_tokens, cache_*Hand-roll block iteration only when you need to (a) preserve order,
(b) extract thinking blocks for replay, or (c) read citations
metadata from text blocks. Order-preserving iteration:
from langchain_core.messages import AIMessage
def iter_blocks(msg: AIMessage):
if isinstance(msg.content, str):
yield "text", {"type": "text", "text": msg.content}
return
for block in msg.content:
if isinstance(block, dict):
yield block.get("type", "unknown"), block
else:
yield getattr(block, "type", "unknown"), blockimage blockimport base64
from pathlib import Path
from langchain_core.messages import HumanMessage
def image_block(path: str) -> dict:
data = base64.standard_b64encode(Path(path).read_bytes()).decode("ascii")
mime = {"png": "image/png", "jpg": "image/jpeg",
"jpeg": "image/jpeg", "webp": "image/webp"}[
Path(path).suffix.lstrip(".").lower()]
return {
"type": "image",
"source_type": "base64", # or "url"
"data": data,
"mime_type": mime,
}
msg = HumanMessage(content=[
image_block("screenshot.png"), # put image FIRST
{"type": "text", "text": "What is broken here?"}, # instruction LAST
])
response = claude.invoke([msg])Three invariants:
content must be list[dict] when including non-text blocks.LangChain's adapter translates the universal shape to each provider's
wire format. See Multi-Modal Composition
for the full adapter table, MIME-type compatibility, and the
document/citations pattern.
tool_use correctly across stream deltasCanonical non-streaming:
for tc in msg.tool_calls:
output = tools[tc["name"]](**tc["args"])
history.append(ToolMessage(content=str(output), tool_call_id=tc["id"]))tc["args"] is already a parsed dict — do not json.loads it.
tc["id"] is provider-shaped (toolu_* on Anthropic, call_* on
OpenAI, 24+ chars) and must be copied verbatim to the ToolMessage.
Streaming is different. tool_use.input arrives as partial JSON
fragments across on_chat_model_stream events. Buffer with
tool_call_chunks, parse once at on_chat_model_end:
from collections import defaultdict
import json
partial = defaultdict(str) # index -> accumulated JSON fragment
meta = {} # index -> {name, id}
async for event in model.astream_events({"messages": [...]}, version="v2"):
if event["event"] != "on_chat_model_stream":
continue
for tc_chunk in getattr(event["data"]["chunk"], "tool_call_chunks", []) or []:
idx = tc_chunk["index"]
if tc_chunk.get("name"):
meta[idx] = {"name": tc_chunk["name"], "id": tc_chunk["id"]}
if tc_chunk.get("args"):
partial[idx] += tc_chunk["args"]
completed = [{**meta[i], "args": json.loads(partial[i])} for i in meta]See Tool-Use Iteration for
multi-tool-per-turn handling, ToolMessage ordering, and the forced-
tool_choice infinite-loop trap (P63).
thinking blocks for replayClaude extended thinking (Sonnet 4+, Opus 4+) returns thinking blocks
carrying a cryptographic signature. The next turn must round-trip
those blocks intact or Anthropic rejects the request:
anthropic.BadRequestError: messages.1.content.0: missing signatureThe foot-gun: msg.text() strips thinking blocks. Never do:
# WRONG — thinking blocks lost, replay fails
history.append(AIMessage(content=ai_1.text()))Correct — pass the AIMessage back verbatim:
history.append(ai_1) # preserves full content list + signaturesFor persistence across sessions, serialize with
messages_to_dict(...) (not custom JSON), which preserves block
structure:
import json
from langchain_core.messages import messages_to_dict, messages_from_dict
serialized = json.dumps(messages_to_dict([ai_1]))
restored = messages_from_dict(json.loads(serialized))See Thinking Blocks for redaction handling, the budget-tokens rule, and the interaction with tool calls.
Before sending any multi-modal or tool-using message:
content a list[dict] when it contains non-text blocks?source_type, data, mime_type)?tool_use is involved, am I passing msg.tool_calls — not parsed content?AIMessage — not msg.text()?HumanMessage in the universal 1.0 image shape, portable across Claude/GPT-4o/Geminitool_use stream-delta accumulator that buffers partial input JSON and parses once at endthinking blocks intact (no missing signature errors)document/citations extractor that reads citations metadata from text blocks| Error | Cause | Fix |
|---|---|---|
AttributeError: 'list' object has no attribute 'lower' | Treating AIMessage.content as str on Claude (P02) | Use msg.text() or iterate blocks |
anthropic.BadRequestError: messages.N.content.M: missing signature | Stripped thinking block on replay | Pass AIMessage object back verbatim; never rebuild from text() |
anthropic.BadRequestError: tool_use_id not found in corresponding tool_result | Typo / case mismatch in ToolMessage.tool_call_id | Copy tc["id"] verbatim |
anthropic.BadRequestError: tool_use ids were found without tool_result blocks | Skipped a tool call | Emit one ToolMessage per tool_call (use status="error" on failure) |
anthropic.BadRequestError: image exceeds 5 MB limit | Un-resized screenshot | Pre-resize to < 5 MB (1024x1024 JPEG 85 is ~500 KB) |
openai.BadRequestError: Invalid image data | Hand-rolled image_url with wrong prefix | Use the universal block; adapter emits the data:image/...;base64, prefix |
| Infinite agent loop | Forced tool_choice inside a loop (P63) | Use tool_choice="auto" for agents; forced-choice only for single-call extraction |
json.JSONDecodeError inside stream loop | Parsing partial tool_use.input fragment | Buffer in a defaultdict(str); parse once at on_chat_model_end |
| Citations silently missing | Read via msg.text() which strips metadata | Iterate msg.content and read block["citations"] on text blocks |
msg = HumanMessage(content=[
image_block("ui.png"),
{"type": "text", "text": "Identify the broken UI element."},
])
# Same message works on both providers via adapter translation
claude_resp = claude.invoke([msg])
gpt4o_resp = gpt4o.invoke([msg])claude = ChatAnthropic(
model="claude-sonnet-4-6",
max_tokens=8192,
thinking={"type": "enabled", "budget_tokens": 4096},
)
ai_1 = claude.invoke([HumanMessage(content="What is the capital of France?")])
# ai_1.content == [{"type":"thinking",...,"signature":"..."}, {"type":"text",...}]
# Turn 2 — pass ai_1 VERBATIM
ai_2 = claude.invoke([
HumanMessage(content="What is the capital of France?"),
ai_1, # thinking preserved
HumanMessage(content="And the population?"),
])See Thinking Blocks for the full replay invariants and persistence pattern.
document inputdoc_block = {
"type": "document",
"source": {"type": "base64", "media_type": "application/pdf", "data": pdf_b64},
"title": "Q3 Earnings Report",
"citations": {"enabled": True},
}
resp = claude.invoke([HumanMessage(content=[
doc_block,
{"type": "text", "text": "What drove revenue this quarter?"},
])])
for block in resp.content:
if block.get("type") != "text":
continue
print(block["text"])
for c in block.get("citations", []):
print(f" -> {c['document_title']}: {c['cited_text']!r}")msg.text() flattens this — you lose citations. See
Multi-Modal Composition for the
full document block reference including supported source types.
tool_use with live argument renderingSee Tool-Use Iteration for the
complete tool_call_chunks accumulator including multi-tool-per-turn
handling and the ToolMessage ordering invariant.
AIMessage API referencelangchain-model-inference (read its references/content-blocks.md for the str vs list[dict] fundamentals)docs/pain-catalog.md (entries P02, P58, P63, P64)© 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-content-blocks of jeremylongshore/tons-of-skills-marketplace.
Open the folder on GitHubat commit cfae287
Langchain Content Blocks 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 Content Blocks this skilljeremylongshore/tons-of-skills-marketplace | 2.8k | — | ~3.6k | Automated safety check: Pass | MIT | |
| Add Example AgentGetBindu/Bindu | 10k | — | ~1.1k | Automated safety check: Notes | Custom licence | |
| Upgrade Stripekanchengw/cnllm | 173 | 3 repos | ~1.4k | Automated safety check: Pass | Apache-2.0 | |
| Agent Prompt Engineeringagentailor/fullstack-langgraph-nextjs-agent | 132 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Awesome Chatgpt Searchtaishi-i/awesome-ChatGPT-repositories | 3.3k | — | ~3.8k | Automated safety check: Pass | CC0-1.0 | |
| Llmobs IntegrationDataDog/dd-trace-js | 837 | — | ~1.4k | Automated safety check: Pass | Custom licence |
GetBindu/Bindu
Add a new self-contained example agent under examples/. An agent skill from GetBindu/Bindu.
kanchengw/cnllm
Guide for upgrading Stripe API versions and SDKs. An agent skill from kanchengw/cnllm.
agentailor/fullstack-langgraph-nextjs-agent
Comprehensive guide for designing, refining, and auditing system prompts for autonomous AI agents based on Anthropic's production practices.
taishi-i/awesome-ChatGPT-repositories
Search 2500+ curated ChatGPT and LLM open-source repositories.
DataDog/dd-trace-js
A skill your agent uses when adding, debugging, or modifying LLMObs plugins for an LLM library in dd-trace-js.
rajudandigam/agent-inspect
Local evidence debugger and trajectory-test toolkit for TypeScript AI agents.
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
Works correctly with LangChain 1.0's typed content blocks on AIMessage.content — text, tooluse, image, thinking, document — across Claude, GPT-4o, and Gemini, including multi-modal composition and…. Langchain Content Blocks is an agent skill from jeremylongshore/tons-of-skills-marketplace.content — text, tooluse, image, thinking, document — across Claude, GPT-4o, and Gemini, including multi-modal composition and tool-call iteration.
Langchain Content Blocks fits situations like: composing multi-modal messages; iterating tooluse blocks; handling Claudes thinking content; unifying image inputs across providers.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-content-blocks -a claude-code`. Or copy the skill folder (skills/.curated/langchain-content-blocks in jeremylongshore/tons-of-skills-marketplace) into .claude/skills/langchain-content-blocks in your project. Claude Code loads it when a task matches its description.
Run `npx skills add jeremylongshore/tons-of-skills-marketplace --skill langchain-content-blocks -a codex`. Or copy the skill folder (skills/.curated/langchain-content-blocks in jeremylongshore/tons-of-skills-marketplace) into .agents/skills/langchain-content-blocks 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-content-blocks -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-content-blocks, .gemini/skills/langchain-content-blocks, .github/skills/langchain-content-blocks and .opencode/skills/langchain-content-blocks in your project.
Going by SKILL.md and its folder, Langchain Content Blocks needs the command-line tools its instructions call (pip). 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 4 domains. As links in the text: python.langchain.com, platform.claude.com, platform.openai.com and ai.google.dev. 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 Content Blocks 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.6k tokens (SKILL.md is roughly 14k 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 7.6k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Langchain Content Blocks: Add Example Agent (GetBindu/Bindu, 10k stars), Upgrade Stripe (kanchengw/cnllm, 173 stars), Agent Prompt Engineering (agentailor/fullstack-langgraph-nextjs-agent, 132 stars) and Awesome Chatgpt Search (taishi-i/awesome-ChatGPT-repositories, 3.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.