| name | agentcpm-report |
| title | AgentCPM-Report: Interleaving Drafting and Deepening for Deep Research |
| version | 0.0.2 |
| engine | skillxiv-v0.0.2-claude-opus-4.6 |
| license | MIT |
| url | https://arxiv.org/abs/2602.06540 |
| keywords | ["Agent Planning","Research Automation","Iterative Refinement","Report Generation","Multi-Stage Training"] |
| description | Enable research agents to interleave evidence-based drafting with reasoning-driven deepening, automatically expanding outlines based on discovered gaps, using trajectory pruning for efficient RL training. |
AgentCPM-Report: Interleaving Drafting and Deepening for Deep Research
Problem Context
Existing deep research systems separate planning from writing, limiting adaptive discovery. Agents that rigidly follow pre-planned outlines miss opportunities to refine understanding as evidence emerges. The "insight ceiling" arises from static structure: agents execute plans without evaluating draft quality or identifying knowledge gaps mid-process.
Core Concept
WARP (Writing As Reasoning Policy) interleaves evidence-based drafting with reasoning-driven deepening. Rather than plan-then-write, the agent autonomously:
- Generates search queries from accumulated narrative context
- Drafts evidence-grounded content
- Analyzes drafts for logical gaps
- Decides whether to expand sections or terminate
- Updates outlines based on discoveries
This mirrors human knowledge-transforming processes where writing reveals what you don't know.
Architecture Overview
- Sparse Level-1 Outline: Initial high-level structure from query
- Evidence-Based Drafting: Per-section search, retrieval, synthesis
- Gap Analysis: Logical consistency checking on drafted content
- Adaptive Expansion: Outline evolution based on insufficiencies
- Multi-Stage Training: Cold-start SFT → atomic skill RL → holistic pipeline RL
Implementation
Core cycle (Plan-Draft-Deepen-Decide):
class ResearchAgent:
def __init__(self, query):
self.outline = create_sparse_outline(query)
self.draft = ""
def evidence_based_draft(self):
for section in self.outline:
search_query = contextual_query(self.draft, section)
docs = retrieve_documents(search_query)
section_content = synthesize(docs)
self.draft += section_content
():
gaps = identify_gaps(.draft)
confidence = analyze_coverage(.draft)
gaps confidence < threshold:
section = gaps[]
.outline = expand_section(.outline, section)
: