render-session-0.3.0 is not a library.
render-session
Single-binary tool (Rust + rmcp + axum) for viewing AI session output. Provides an MCP server for write operations and an HTTP viewer for read-only browsing.
Release notes are tracked in CHANGELOG.md.
Phase status
| Phase | Status | Scope |
|---|---|---|
| 1 (scaffold) | done | Workspace layout, crate skeletons, binary entry points |
| 1 (HTTP serve) | done | serve --port N --dir D; axum router, rust-embed index.html, /api/list + /api/md/{id} |
| 1 (MCP tools) | done | viewer.lease / list / release / report.write / draft.write |
| 2 (config-gen) | done | 3-layer config merger (extends: chains, cycle detection), gen --project D emitting list.json + render-lanes.md |
| 3 (block IF) | done | Item.block_type announce + X-Block-Type HTTP header. Concrete plugins deferred to frontend. |
| 4 (a) source (session) | done | sources/session module + capture subcommand. Legacy render-session.py session / recent modes ported. |
| 4 (b) filter middleware | done | filters module with Filter trait + 4 built-in (HasTable / HasMermaid / KeywordMatch / RegexMatch) + FilterRegistry + FilterChainConfig. capture_recent supports config-driven filter chain via categories.recent.filter yaml field. Legacy has_visual_artifact default preserved when filter is None. |
| 4 (c) viewer watcher | done | serve --watch-tick <secs> and viewer.lease(tick=<secs>) enable a background tokio::spawn watcher loop that calls auto_capture_once every seconds. Idempotent emit (existing files skipped). Hook-based capture (UserPromptSubmit) DEPRECATED in favor of viewer-watcher. |
| 4 (d) config strategy | done | figment-based 3-layer config (user-global โ project โ lane) + env overrides. config::load + LoadedConfig + config show/info/doctor CLI. RENDER_SESSION_CONFIG path override + RENDER_SESSION_<KEY> value overrides with __ path separator. See docs/runbook/config-strategy.md. |
| 5+ | pending | rss / jira / github / linear / slack-export source plugins; SourcePlugin trait concrete impls. Frontend block plugins (markdown-it / mermaid.js), SPA viewer integration. |
Build
Run
# Show available subcommands
# Start MCP server (stdio) โ called by .mcp.json clients
# render-session-mcp reads stdin / writes stdout following MCP protocol
# or via the CLI alias (thin exec wrapper):
# Start HTTP viewer
# Serves GET / (index.html), GET /api/list, GET /api/md/{id}
# Reads markdown from <dir>/render-site/{drafts,reports,session,recent}/
# Write a report file (reads body from stdin)
|
# Generate list.json + render-lanes.md from project config
# Emits: <D>/render-site/list.json and <D>/render-site/rules/render-lanes.md
# Capture Claude Code session output to render-site/
# Reads from ~/.claude/projects/<slug>/*.jsonl (slug derived from project path if omitted)
# session mode: emits <D>/render-site/session/latest.md
# recent mode: emits <D>/render-site/recent/<turn_id>-<ts>.md for last N visual-artifact turns
# both (default): session + recent
# Phase 4 (c): start viewer with built-in watcher (auto-captures every 5 seconds)
# or via MCP: { "tool": "viewer.lease", "args": { "dir": "/path/to/project", "tick": 5 } }
Config
render-session loads configuration from 3 layers + env overrides (Outline rust ยง1-9-1 F-2):
- user-global:
~/.config/render-session/config.yaml(override path withRENDER_SESSION_CONFIG=/path/to/config.yaml) - project:
<project>/.render-session.yaml - lane:
<project>/workspace/render-session/lane.yaml - env override:
RENDER_SESSION_<KEY>with__for nested keys (e.g.RENDER_SESSION_CATEGORIES__RECENT__ENABLED=false)
Later layers override earlier ones. Missing files are silently skipped.
Inspect config
# Show effective merged config
# Show effective config with per-value provenance (which layer set each value)
# List layer paths and active env overrides
# Health check (path existence + env override value validation)
See docs/runbook/config-strategy.md for full details.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.