Roadmap
Where tallow is headed. These are concrete features in design, not vague aspirations. Each one has a detailed design document in the repository.
Teams Live Dashboard
Medium complexityShippedThe teams extension now includes a live dashboard
with teammate cards, task board status icons, and a rolling activity feed.
Toggle with /team-dashboard [on|off|status]. Wide terminals show tasks and
teammates side-by-side; narrow terminals stack vertically. The dashboard
auto-updates as team state changes and disappears on team_shutdown.
Parallel Plan Execution via Git Worktrees
High complexityDraftOne plan, N worktrees, N models. Give tallow a task, pick three models, and it spins up isolated git worktrees, one per model, all running the same plan in parallel. When they finish, compare approaches side-by-side: diffs, test results, token costs, wall-clock time.
This is real model evaluation on your actual codebase. Not synthetic benchmarks, your code, your constraints, your judgment on what “better” means.
The system uses two extensions: worktree-arena for orchestration (worktree lifecycle, agent spawning, cleanup) and an optional terminal pane provider (WezTerm, tmux, Zellij) for visual multi-pane display. Without a display extension, agents run in the background with log files.
Unified Plugin System (Claude Code + pi compatible)
High complexityMostly shippedOne plugin system that understands both ecosystems. tallow
reads from .claude/ (Claude Code convention) and .tallow/
(pi convention) at every level: project-local, user-global,
and system. Both directory trees are scanned, merged at
runtime, and project-local always wins.
Claude Code users bring their existing setup. pi users get
the additional structure pi expects: extensions, prompts,
skills, agents. No migration, no duplication. Drop a command
in .claude/commands/ or .tallow/commands/ and it works.
Claude Code compatibility maps CC config locations
(~/.claude/.claude.json, .claude/commands/, CLAUDE.md)
into tallow’s runtime. Lifecycle hook behavior is supported,
but hook config keys use tallow event names (tool_call,
tool_result, etc.) rather than automatic PreToolUse/
PostToolUse key translation. MCP servers declared in tallow
settings register through the mcp-adapter. Slash commands merge
into tallow’s command system.
pi-native paths add what CC doesn’t have: extensions, typed prompts with subcommands, skills, and agents at the project level.
Scopes:
- Commands. .tallow/commands/ and .claude/commands/ at project and user levels, via command-prompt extension. Also scans commands/ in local paths listed in settings.json packages.
- Prompts. .tallow/prompts/ and ~/.tallow/prompts/ natively discovered by pi. Registered as /name slash commands.
- CC Hooks. hooks.json from packages, extensions, and project/global paths all merged additively. Extension-level hooks.json scanning in ~/.tallow/extensions//hooks.json and .tallow/extensions//hooks.json. Runtime hooks via hooks:merge event bus.
- CC Context. CLAUDE.md and AGENTS.md loaded natively by pi from cwd, ancestor directories, and ~/.tallow/. Injected into system prompt automatically. The context-files extension supplements this by loading both files when they coexist (pi picks only one) and scanning subdirectories.
- Settings. .tallow/settings.json deep-merges with ~/.tallow/settings.json via SettingsManager. Project overrides user defaults.
- Hooks. .tallow/hooks.json and .tallow/settings.json (hooks key) merge with global hooks. Supports standalone files, settings-embedded hooks, and extension-level hooks.json scanning.
- Skills. .tallow/skills/ discovered natively by pi at project level, layered on top of ~/.tallow/skills/.
- Agents. .tallow/agents/ discovered at project level by agent-commands and subagent extensions, layered on top of ~/.tallow/agents/.
- Extensions. .tallow/extensions/ discovered natively by pi at project level, alongside ~/.tallow/extensions/.
Remaining: .claude.json settings passthrough.
Complexity Tiers
Medium complexityMostly shippedBasic model resolution already shipped via the context-fork
extension — model: sonnet resolves to the right Anthropic model ID. What’s
next: intent-based tiers that work across providers.
Shipped: routing keywords and auto-routing. Agent frontmatter now supports
model: auto-cheap, auto-balanced, and auto-premium — intent-based routing
that picks the best model from available providers based on cost preference. The
task classifier determines type (code/vision/text) and complexity (1-5), then the
model matrix ranks candidates. Per-call hints (costPreference, taskType,
complexity) let the parent LLM override routing for individual invocations.
The bundled explore agent uses auto-cheap for economical codebase discovery.
See subagent-tool, routing keywords.
Remaining: user-facing tier mapping in settings (let users define which of
their models map to light/medium/heavy tiers independently of the matrix).
Plugin Source Caching & Git Support
Medium complexityPlannedThe plugin system re-scans all local sources from disk on every session start.
Git sources (git:github.com/user/plugin@v1.0.0) warn and skip entirely.
The fix: mtime-based caching for local sources (skip re-scan if unchanged), immutable caching for pinned git sources (clone once), and TTL-based refresh for unpinned git sources (1-hour TTL, re-clone when stale).
Prompt Stash (Ctrl+S)
Low complexityPlannedCtrl+S stashes the current input. Ctrl+S again pops it back
(toggle behavior based on whether input is empty). Stack semantics
with last-in-first-out. In-memory only. Not yet implemented.
Modular Project Rules (.tallow/rules/)
Medium complexityMostly shippedShipped: unconditional rules. The context-files
extension scans three directories: ~/.tallow/rules/ (user global),
.tallow/rules/ (project), and .claude/rules/ (CC compatibility). All .md
and .txt files are discovered and injected into the system prompt at session
start, alongside AGENTS.md / CLAUDE.md content.
Shipped: path-scoped rules. Rules with paths: (multi-pattern) or
path: (single-pattern shorthand, Claude-compatible) YAML frontmatter only
inject when the agent reads, edits, or writes matching files. This keeps context lean:
API conventions don’t pollute frontend work and vice versa.
---paths: - "src/api/**/*.ts" - "src/middleware/**/*.ts"---# API Rules- Validate input with Zod- Use standard error envelope- Include OpenAPI JSDoc on every handlerStill planned: /rules command to list loaded rules with scope and path
filters, and /rules:add to create new rule files.