briefing
Generate Session Briefing ·read-only · non-destructive · non-idempotent · closed-world
Return a single structured briefing covering commitments, blockers, overdue,
stale commitments, recent decisions, and preferences. Collapses the per-section
resource-read sequence (engram://commitments etc.) into one tool call.
Requires an explicit selector: pass exactly one of project, scope, or
all=True. A bare briefing() raises BadRequestError — the legacy
unscoped firehose is now one explicit all=True away (WS1-R4 / #4248). The
selector applies uniformly to every section (commitments, blockers,
overdue, stale, recent decisions, preferences, proposed closures), so a
briefing cannot leak a memory from a scope the selector excludes.
Returns a dict shaped as BriefingResponse:
{project, commitments, blockers, overdue, stale, recent_decisions, preferences}. Each memory list contains MemoryHit objects
(id, topic, content, status, due_date, …).
The structured payload is surfaced verbatim as MCP
structuredContent alongside the human-readable text.
Returns: dict[str, Any] | ToolResult | str
Source: backend/src/engram/mcp/tools/briefing.py
Parameters
Optional project name. Resolved through the scope-defaulting policy (alias resolution +
user_scope_config mapping) so the briefing is scoped to the project’s effective scope, not just a literal project match. The canonical (alias-resolved) project is echoed back in the payload.Optional scope (
personal | work) to bind every section to. Wins over project-derived defaulting. Validated via validate_scope; an invalid value raises BadRequestError.Explicit opt-out of scope defaulting. When
True, restore the legacy unscoped firehose (no scope predicate on any section); combine with project to scope by project across all scopes. all is not a scope string and is never validated as one.If True, return a compact representation — drops
content from every MemoryHit in the structured payload and emits a one-line- per-memory text block instead of serialized JSON. Recommended as the default for agent workflows: the full mode returns ~50KB per call (Claude Code persists tool output over ~20KB to disk), while brief mode typically lands under 10KB. Follow up with get_memories(ids=[...]) when you need the full content of specific items.Optional whitelist of sections to include. Valid values:
commitments, blockers, overdue, stale, recent_decisions. Omitted sections return as empty lists in the structured payload and are skipped from text output. Preferences are always included (cheap). None (default) returns every section.#4801 Work Context candidate-restriction. When a collection (possibly empty), every memory section (commitments, blockers, overdue, stale, decisions, preferences) and the proposed-closures section is narrowed to exactly those memory ids — the native lens that
use_context brief/monitor modes pass. The restriction is intersected with each section’s own visibility predicate, so it can only narrow, never widen. None (default) applies no restriction and preserves the global briefing behaviour. An empty collection resolves every section to zero rows.