π°
Research Digest LangGraph
blueprint Β· 3 agents Β· 2 MCP servers
690β
stars
88forks
4.5rating
What it does
A pipeline that turns a topic into a short cited brief. A sweeper gathers sources, a deduper removes overlapping coverage, and a synthesizer writes the brief and saves it to a file. Runs well on a schedule.
The cast Β· 3 agents
Deduperdeduperreasoning
Remove overlapping and duplicate coverage, keeping the strongest source for each point.
no tools Β· reasoning only
Sweepersweeperfast
Gather sources on the topic from a broad web search.
search.web
Synthesizersynthesizerreasoning
Write a short brief with citations and save it to a report file.
fs.write_file
Flow
β Sweeper β sources
β Deduper β unique
β Synthesizer β brief
Interface
Inputs
topicstring
The research topic.
Outputs
briefstring
The cited brief.
Depends on Β· 2 MCP servers
πio.github.brave/brave-search-mcpnot in the registry yetsearch
πio.github.modelcontextprotocol/filesystemnot in the registry yetfs
β€ Export runnable code
# Generated by @socketcat/compiler for target: langgraph
# blueprint: com.socketcat/research-digest v1.0.0 schema: socketcat.dev/blueprint/v0
# This code is yours. Edit it freely. The socketcat_runtime helper is optional and can be vendored.
from typing import TypedDict
from langgraph.graph import StateGraph, START, END
import socketcat_runtime as _rt
class State(TypedDict, total=False):
topic: object
brief: object
sources: object
unique: object
def node_AgentInvoke_0(state):
return _rt.run_agent("sweeper", state, {"topic":"topic"}, "sources")
def node_AgentInvoke_1(state):
return _rt.run_agent("deduper", state, {"sources":"sources"}, "unique")
def node_AgentInvoke_2(state):
return _rt.run_agent("synthesizer", state, {"unique":"unique"}, "brief")
def build():
b = StateGraph(State)
b.add_node("AgentInvoke_0", node_AgentInvoke_0)
b.add_node("AgentInvoke_1", node_AgentInvoke_1)
b.add_node("AgentInvoke_2", node_AgentInvoke_2)
b.add_edge(START, "AgentInvoke_0")
b.add_edge("AgentInvoke_0", "AgentInvoke_1")
b.add_edge("AgentInvoke_1", "AgentInvoke_2")
b.add_edge("AgentInvoke_2", END)
return b.compile()
INPUTS = ["topic"]
OUTPUTS = ["brief"]
if __name__ == "__main__":
_rt.main(build, INPUTS, OUTPUTS)
βΈblueprint.json (the portable format)
{
"id": "com.socketcat/research-digest",
"flow": {
"type": "sequence",
"blocks": [
{
"in": {
"topic": "topic"
},
"out": "sources",
"use": "sweeper",
"type": "agent"
},
{
"in": {
"sources": "sources"
},
"out": "unique",
"use": "deduper",
"type": "agent"
},
{
"in": {
"unique": "unique"
},
"out": "brief",
"use": "synthesizer",
"type": "agent"
}
]
},
"tags": [
"research",
"synthesis",
"scheduled"
],
"title": "Research Digest",
"agents": {
"deduper": {
"model": {
"hint": "reasoning"
},
"title": "Deduper",
"instructions": "Remove overlapping and duplicate coverage, keeping the strongest source for each point."
},
"sweeper": {
"model": {
"hint": "fast"
},
"title": "Sweeper",
"tools": [
"search.web"
],
"instructions": "Gather sources on the topic from a broad web search."
},
"synthesizer": {
"model": {
"hint": "reasoning"
},
"title": "Synthesizer",
"tools": [
"fs.write_file"
],
"instructions": "Write a short brief with citations and save it to a report file."
}
},
"estate": {
"brief": {
"type": "string",
"description": "The cited brief the synthesizer wrote."
},
"unique": {
"type": "object",
"description": "The sources left after the deduper removed overlap."
},
"sources": {
"type": "object",
"description": "The raw sources the sweeper gathered."
}
},
"$schema": "socketcat.dev/blueprint/v0",
"authors": [
{
"url": "https://socketcat.com",
"name": "SocketCat"
}
],
"license": "MIT",
"servers": [
{
"ref": "io.github.brave/brave-search-mcp",
"alias": "search"
},
{
"ref": "io.github.modelcontextprotocol/filesystem",
"alias": "fs"
}
],
"summary": "Sweeps multiple sources, removes overlap, and writes a cited brief to a file.",
"targets": [
"langgraph",
"crewai",
"*"
],
"version": "1.0.0",
"interface": {
"inputs": {
"topic": {
"type": "string",
"description": "The research topic."
}
},
"outputs": {
"brief": {
"type": "string",
"description": "The cited brief."
}
}
},
"description": "A pipeline that turns a topic into a short cited brief. A sweeper gathers sources, a deduper removes overlapping coverage, and a synthesizer writes the brief and saves it to a file. Runs well on a schedule."
}