Installs into .claude/skills of the current project.
Are you the author of Briefings?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/istota-project-briefings)
---
name: briefings
triggers: [briefing, briefings, block, digest, daily briefing, morning briefing, briefing block, briefing source]
description: Manage briefing content blocks and sources (in-tree module)
cli: true
companion_skills: [untrusted_input]
env: [{"var":"BRIEFINGS_USER","from":"user_id"}]
---
# Briefings (content management)
Manage the content model of the user's briefings through the in-tree briefings module. A briefing is an ordered list of **blocks**; each block has a title, an optional synthesis directive, and 1..N **sources** that are gathered and synthesized into one coherent section at generation time. Per-user SQLite; block/source/archive data live there. Scheduling and delivery (cron, target room) are managed separately with `istota briefings schedule …` (operator) or the web settings page — this skill manages *content*.
## CLI
Run `istota-skill briefings --help` for the live list. Output is JSON.
```bash
# Briefing names, block counts, and latest generation timestamps
istota-skill briefings list
# Blocks
istota-skill briefings blocks list --briefing morning
istota-skill briefings blocks add --briefing morning --title "World News" [--directive "3-5 stories, neutral"] [--render-mode synthesis|structured]
istota-skill briefings blocks set --id 3 [--title …] [--directive …] [--render-mode …] [--options '{"tone":"brief"}']
istota-skill briefings blocks reorder --briefing morning --ids 3,1,2
istota-skill briefings blocks remove --id 3
# Sources (kind: rss|email|browse|markets|calendar|todos|reminders|notes|shared_block)
istota-skill briefings sources list --block 3
istota-skill briefings sources add --block 3 --kind email --config '{"mode":"shared","lookback_hours":12}'
istota-skill briefings sources add --block 3 --kind browse --config '{"preset":"ap"}'
istota-skill briefings sources add --block 3 --kind rss --config '{"feed_ref":{"kind":"category","value":4},"limit":10}'
istota-skill briefings sources remove --id 7
# Archive (past rendered briefings)
istota-skill briefings archive list [--briefing morning] [--limit 20]
istota-skill briefings archive show --id 42
```
`blocks list` returns `status: "not_found"` with an `available` name list when the requested briefing does not exist. Briefing names are case-sensitive; run `briefings list` instead of guessing them.
## Source kinds
- **email** — shared/unowned newsletter pool (`{"mode":"shared"}`) or a sender allowlist (`{"mode":"senders","senders":["*@semafor.com"]}`).
- **rss** — recent entries from a Feeds subscription/category (`feed_ref`).
- **browse** — a frontpage URL, by preset (`{"preset":"ap"}`) or custom (`{"url":"https://…"}`).
- **markets** / **calendar** — structured built-ins (rendered verbatim; use `--render-mode structured`).
- **todos** / **reminders** / **notes** — a workspace file named by `{"path":"…"}`. There is **no** default filename: a source with no path reads nothing and contributes a provenance note. The path resolves relative to the user's own folder, so `shared/…` reaches a bot-shared file and `istota/…` the bot workspace.
- **shared_block** — pre-made curated content from the shared store (`{"name":"world-headlines","max_age_hours":6}`). Stale or missing content is omitted rather than failing the briefing.
Blocks are the only content model — the legacy component-based generator is gone. A briefing with no blocks produces nothing and the generation task fails quietly and retries, so give every briefing at least one block.