Requests for Discussion
RFDs are short design documents that describe a significant change before implementation begins. See RFD 001 for the full process.
- Design — feature proposals and architectural changes
- Decision — recording a specific choice: a technology, convention, or standard
- Guide — how-tos and reference material for contributors
- Process — how the project operates: workflows, policies, values
| RFD ▲ | Title | Category | Status |
|---|---|---|---|
| 001 | The JP RFD Process Establishes lightweight Request for Discussion process for proposing and tracking design decisions with clear lifecycle states. | Process | Implemented |
| 002 | Using LLMs in the JP Project LLMs are tools; you own your output and bear responsibility for its quality regardless of how it was produced. | Process | Implemented |
| 003 | JP-Assisted RFD Writing Propose an `rfd` skill configuration enabling JP to assist RFD writing through research, structure, and collaborative editing—not authorship. | Process | Implemented |
| 004 | Streaming Markdown Parser and Terminal Renderer in `jp_md` Custom Buffer segments streaming markdown blocks; TerminalRenderer applies ANSI-aware formatting for terminal output. | Decision | Implemented |
| 005 | First-Class Inquiry Events Record inquiry events in conversation stream with centralized filtering to keep them hidden from LLM providers. | Design | Implemented |
| 006 | Turn-Scoped Stream Mutations Restrict stream mutations to turn-scoped accessors, preventing invalid event sequences through compile-time guarantees. | Design | Implemented |
| 007 | Llamacpp Reasoning Support Llamacpp provider will drop the openai crate to properly extract reasoning content from all three llama.cpp reasoning formats. | Design | Implemented |
| 008 | Ordered Tool Directives Make CLI tool flags order-sensitive, processing `--tool` and `--no-tools` left-to-right instead of in fixed order. | Design | Implemented |
| 009 | Stateful Tool Protocol Unifies one-shot and long-running tool execution under a stateful protocol enabling multi-step interactive workflows. | Design | Discussion |
| 010 | PTY Infrastructure and Interactive Tool SDK Proposes jp_pty crate and interactive SDK for building stateful tools that wrap interactive CLI programs. | Design | Discussion |
| 011 | System Notification Queue System notification queue delivers asynchronous subsystem notifications to the assistant by embedding them in existing conversation messages. | Design | Discussion |
| 012 | Typed LLM Streaming Events Decouple streaming transport from persistence by replacing ConversationEvent in Event::Part with a purpose-built EventPart enum. | Design | Implemented |
| 013 | Named Query Templates Add reusable, config-defined query templates with interactive prompts for collecting variables before rendering. | Design | Discussion |
| 014 | Attachment Handler Guide JP attachment handlers fetch context via URL schemes, supporting both opaque and hierarchical formats with add/remove/list/get trait methods. | Guide | Superseded |
| 015 | Simplified Attachment Handler Trait Simplify attachment handlers from stateful (five methods) to stateless (three methods), moving URL tracking to the host. | Design | Discussion |
| 016 | Wasm Plugin Architecture Sandboxed Wasm plugin system with WIT interfaces, dynamic capability discovery, and per-plugin sandbox configuration for extensibility. | Design | Discussion |
| 017 | Wasm Attachment Handlers Wasm plugins export an attachment interface, wrapped in a native Handler adapter for transparent integration. | Design | Discussion |
| 018 | Typed Prompt Routing Enum Codify prompt types as `Prompt` enum variants for unified routing, config, and extensibility. | Design | Discussion |
| 019 | Non-Interactive Mode Abandoned RFD split into RFD 048 and RFD 049; preserved for historical context on non-interactive mode design. | Design | Abandoned |
| 020 | Parallel Conversations Replace global active conversation with per-session tracking and add conversation locks for parallel terminal work. | Design | Implemented |
| 021 | Printer Live Redirection Adds runtime output redirection to Printer via SwapWriters command, enabling mid-stream destination changes without replacing instances. | Design | Discussion |
| 022 | Detached Conversations Detached conversation execution via background processes and attachment—abandoned, split into RFD 023 and 027. | Design | Abandoned |
| 023 | Resumable Conversation Turns Persist tool results incrementally, split incomplete turns from stream, resume with interactive prompt or --continue-turn flag. | Design | Discussion |
| 024 | Detached Query Execution Detached query execution with process registry and queue policy for background conversations; superseded by RFD 027. | Design | Abandoned |
| 025 | Live Re-Attachment to Detached Queries Abandoned design for live re-attachment to detached query processes via Unix domain sockets; superseded by RFD 027. | Design | Abandoned |
| 026 | Agent Loop Extraction Extract the agent turn loop from jp_cli into a new jp_agent crate with trait-based I/O hooks. | Design | Discussion |
| 027 | Client-Server Query Architecture Client-server architecture unifying foreground, detached, and reattached query execution with IPC-based output streaming and inquiry routing. | Design | Discussion |
| 028 | Structured Inquiry System for Tool Questions Replace tool re-invocation with async inquiries to avoid token waste and latency when tools need LLM answers. | Design | Implemented |
| 029 | Scriptable Structured Output Make JP scriptable with concise schema DSL and inferred clean JSON output when piping or with --schema flag. | Design | Discussion |
| 030 | Schema DSL JP's concise DSL syntax for defining JSON Schema objects via command-line flags with types, descriptions, and nested structures. | Guide | Implemented |
| 031 | Durable Conversation Storage with Workspace Projection Make user-local storage the durable source; workspace copies become optional projections for git visibility. | Design | Discussion |
| 032 | Grizzly Semantic Search Add FTS5 full-text search, typo tolerance, and local semantic vector search to grizzly's note_search tool. | Design | Accepted |
| 033 | Cache-Preserving Inquiry via Tool Use Replace structured output with a tool-use-based inquiry system to preserve prompt cache and reduce LLM costs. | Design | Superseded |
| 034 | Inquiry-Specific Assistant Configuration Route inquiries to cheaper models with stable schemas for 5-25x cost reduction via configurable assistant overrides. | Design | Implemented |
| 035 | Multi-Root Config Load Path Resolution Extend `--cfg` path resolution to search user-global, workspace, and user-workspace config roots, merging matches. | Design | Implemented |
| 036 | Conversation Compaction Composable conversation compaction via mechanical strategies, tool-aware deduplication, LLM summarization, and protocol extensions for declarative compaction hints. | Design | Superseded |
| 037 | Await Tool for Stateful Handle Synchronization Introduces `await` built-in tool to synchronize on parallel stateful tool handles with `any`/`all` completion modes. | Design | Discussion |
| 038 | Config Inheritance for Conversations Extends --cfg with UPPERCASE keywords (NONE, WORKSPACE) and conversation IDs for config inheritance. | Design | Discussion |
| 039 | Conversation Trees Add parent-child conversation relationships via metadata field, enabling fork lineage and hierarchical organization without nested directories. | Design | Discussion |
| 040 | Hidden Conversations and Tool Context Hide conversations from default listings and expose conversation_id to tools for sub-agent workflows. | Design | Discussion |
| 041 | RFD Lifecycle Enhancements Defer RFD numbering to Discussion, auto-create tracking issues, add Extends/Extended by metadata. | Process | Implemented |
| 042 | Tool Options Introduces per-tool options field for static user-defined configuration passed to tools at runtime. | Design | Implemented |
| 043 | Incremental Tool Call Argument Streaming Extend EventBuilder to incrementally parse and emit tool call arguments as typed fragments during streaming. | Design | Discussion |
| 044 | Workspace Initialization Redesign `jp init` to generate schema-driven config with interactive model/mode selection and curated commented fields. | Design | Discussion |
| 045 | Layered Interrupt Handler Stack Replace JP's ad-hoc interrupt handling with a layered LIFO handler stack, routing OS signals through scoped notification channels. | Design | Discussion |
| 046 | Nested Workspace Projection for Conversation Trees Nested workspace directories project conversation trees visually; user-local storage stays flat for durability. | Design | Discussion |
| 047 | Editor and Path Access for Conversations Add `jp conversation edit` (opens directory in $EDITOR) and `jp conversation path` (prints conversation filesystem path). | Design | Implemented |
| 048 | Four-Channel Output Model Separate JP output into four channels: stdout for responses, stderr for chrome, /dev/tty for prompts, log file for tracing. | Design | Implemented |
| 049 | Non-Interactive Mode and Detached Prompt Policy Configurable detached prompt policy controls JP behavior when no interactive client is available; defaults to safe 'deny' mode. | Design | Discussion |
| 050 | Scripting Ergonomics for Conversation Management Adds scripting ergonomics: shared config structs, `conversation new` command, `--no-activate` flag, and `--root-id` ancestry constraint. | Design | Discussion |
| 051 | Sub-Agent Workflows with Local Tools Guide for building sub-agent workflows using local tools, config overlays, and conversation trees to delegate scoped tasks cheaply. | Guide | Discussion |
| 052 | Workspace Data Store Sanitization Workspace sanitization validates and repairs corrupted conversations, trashing broken data with recovery explanations. | Design | Discussion |
| 053 | Auto-Refresh Conversation Titles Auto-refresh stale conversation titles periodically by re-running LLM generation when accumulated turns exceed a configured threshold. | Design | Discussion |
| 054 | Split Conversation Config and Events Split conversation storage: extract immutable base config snapshot into separate base_config.json file from events.json. | Design | Implemented |
| 055 | Tool Groups Named tool groups enable CLI shortcuts and exhaustive validation ensuring every tool is classified relative to a group. | Design | Discussion |
| 056 | Group Configuration Defaults Groups can declare default tool configuration, allowing tool inheritance without per-tool repetition. | Design | Discussion |
| 057 | Group Configuration Overrides Adds group `overrides` section to enforce tool configuration that outlasts tool-level settings but yields to CLI flags. | Design | Discussion |
| 058 | Typed Content Blocks for Tool Responses Replace opaque tool output strings with typed content blocks (text, resource, question) mirroring MCP's CallToolResult model. | Design | Discussion |
| 059 | Shell Completions and Man Pages Add `jp completions` and `jp manpage` subcommands using clap_complete and clap_mangen for shell integration. | Design | Discussion |
| 060 | Config Explain Global `--explain` flag traces config resolution through 9 layers, showing where each field value originates. | Design | Discussion |
| 061 | Interactive Config Bare `--cfg` flag triggers interactive configuration browser for searching, inspecting, and editing config fields with type-appropriate prompts. | Design | Discussion |
| 062 | CLI Usage Tracking Adds local-only CLI usage tracking to record command invocations and argument patterns per workspace for adaptive features. | Design | Discussion |
| 063 | Usage-Based Wizard Field Ordering Extend config wizard with frecency-based field ordering using CLI usage tracking data. | Design | Discussion |
| 064 | Non-Destructive Conversation Compaction Non-destructive conversation compaction through overlay events that project reduced views without mutating stored data. | Design | Discussion |
| 065 | Typed Resource Model for Attachments Replace opaque attachments with typed MCP-aligned resources on ChatRequest at attachment turn, enabling deduplication and preventing cache invalidation. | Design | Discussion |
| 066 | Content-Addressable Blob Store Content-addressable blob store externalizes resource payloads from events.json, enabling deduplication and faster parsing. | Design | Discussion |
| 067 | Resource Deduplication for Token Efficiency Detects redundant resource deliveries to LLM via URI and checksum matching, replacing duplicates with brief references. | Design | Discussion |
| 068 | Forced tool retry without reasoning Automatically retry forced tool calls with reasoning disabled if the model ignores soft-force directives. | Design | Discussion |
| 069 | Guard-Scoped Persistence for Conversations Conversation data auto-persists when ConversationMut drops via Arc<RwLock>, ensuring atomicity with file locks. | Design | Implemented |
| 070 | Negative Config Deltas Introduces `-C` flag to selectively revert previously applied config sources using provenance tracking via claims maps. | Design | Accepted |
| 071 | Conversation Archiving Adds conversation archiving to JP, moving inactive conversations to a hidden partition while preserving them. | Design | Implemented |
| 072 | Command Plugin System JSON-lines protocol enabling standalone binaries to extend JP with new subcommands in any language. | Design | Discussion |
| 073 | Layered Storage Backend for Workspaces Replace Workspace's optional Storage with four focused trait objects (Persist, Load, Lock, Session) for cleaner polymorphism. | Design | Implemented |