Skip to content

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 Widget

Medium complexityPlanned

The teams extension spawns persistent teammate sessions with a shared task board and inter-agent messaging, but has no live widget. You see tool output scroll by without an at-a-glance view of which teammates are working, which tasks are claimed or blocked, or what messages are flowing between agents.

The fix: a persistent setWidget dashboard that auto-updates as team state changes. Task board with status icons, teammate list with colored names and working/idle indicators, and a live message feed, all in one responsive panel using the same visual language as the tasks and subagent extensions.

Wide terminals show tasks and teammates side-by-side. Narrow terminals stack vertically. The widget appears on team_create and disappears on team_shutdown.

Extension: teamsAPI: ctx.ui.setWidget()Depends on: pi-tui, Theme API

Parallel Plan Execution via Git Worktrees

High complexityDraft

One 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.

Invocation: tallow plan exec —models claude,gpt-4o,geminiConfig: .tallow/plans/*.yamlSetup: .tallow/worktree.yaml

Unified Plugin System (Claude Code + pi compatible)

High complexityNearly complete

One 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. CC lifecycle hooks (PreToolUse, PostToolUse, Stop) map to tallow events. MCP servers declared in CC config 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/ project-local and ~/.tallow/commands/ global, via commands-folder 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/commands/ directory scanning (currently only .tallow/commands/), .claude.json settings passthrough.

CC paths: .claude/*, CLAUDE.md, .claude.jsonpi paths: .tallow/*, AGENTS.mdDone: commands, prompts, CC hooks, context files, settings, hooks, skills, agents, extensions

Prompt Stash (Ctrl+S)

Low complexityPlanned

Ctrl+S stashes the current input, Ctrl+U restores it. Stack semantics with last-in-first-out. In-memory only. Not yet implemented.

Extension: stash-prompt (planned)Keybinding: Ctrl+S / Ctrl+U

Modular Project Rules (.tallow/rules/)

Medium complexityPlanned

Today you either cram everything into one AGENTS.md or use skills (which are on-demand, not auto-loaded). There’s no way to say “when working in src/api/, follow these API conventions” without a monolithic context file. Claude Code solved this with .claude/rules/, modular markdown files with optional path scoping via YAML frontmatter.

The rules extension brings the same pattern to pi. It scans three directories in priority order: ~/.tallow/rules/ (user global), .tallow/rules/ (project), and .claude/rules/ (CC compatibility). All .md files are discovered recursively, including through subdirectories and symlinks.

Unconditional rules (no frontmatter) load at session start, same as AGENTS.md. Path-scoped rules use a paths: YAML frontmatter field with glob patterns, they only inject when the agent reads or edits a matching file. 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 handler

Commands: /rules lists all loaded rules with scope and path filters, /rules:add creates a new rule file, /rules:edit opens one in the system editor.

Resolved: The before_agent_start event allows extensions to append to the system prompt at runtime, demonstrated by the context-files extension. The rules extension can use the same pattern to inject path-scoped rules without compiling to intermediate files.

Extension: rulesScopes: ~/.tallow/rules/, .tallow/rules/, .claude/rules/Depends on: Context injection API (or compiled fallback)