Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/features.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ headline differentiators, see the top-level [README](../README.md).
- **Prompts system**: switch between system prompt modes at runtime (`code`, `plan`, `review`, `debug`, etc.). See [prompts.md](prompts.md).
- **Per-prompt tool restrictions**: each prompt (`prompts/<name>.md`) can declare a `deny_tools` frontmatter list. The permission checker refuses those tools while the prompt is active — a real security boundary, not a prose gate. `plan`, `review`, and `review-security` ship with `edit`, `write`, `apply_patch`, `bash`, and `webfetch` denied. See [prompts.md](prompts.md).
- **Subagent support**: `task` tool spawns a subagent for research or general analysis subtasks.
- **Background shells**: the `bash` tool accepts `background: true` to run a command detached — it returns immediately with a shell id and the output is delivered automatically when the command finishes (the same completion-notification channel background subagents use; `task_status` can poll a shell id too). Useful for long-running builds, servers, and watchers that shouldn't block the turn. Tracked in the shared background registry and capped per kind. The status bar shows live counts when any are running: `agents:N` (background subagents) and `shells:N` (background shells).
- **Memory & self-improvement**: persistent per-project memory at `.dirge/memory/` (`MEMORY.md` facts + `PITFALLS.md`), injected into the system prompt as a frozen snapshot. The agent edits it via the `memory` tool. After an idle session, a unified post-session orchestrator runs (in order, fire-and-forget): a background review that extracts learnings into memory + skills, a skills curator and a memory curator (stale-detection + lifecycle + LLM consolidation, with audit reports under each store's `.curator_reports/`), and a cross-session pass that promotes sub-threshold patterns recurring across past sessions.
- **MCP support**: connect MCP servers for extended tooling (optional compile-time feature).
- **Git worktrees**: `/worktree` to create branch-per-task worktrees, `/wt-merge`, `/wt-exit`.
Expand Down
5 changes: 4 additions & 1 deletion src/agent/agent_loop/integration.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1058,7 +1058,10 @@ mod tests {
use crate::agent::tools::background::{BackgroundStore, TaskState};

let store = BackgroundStore::new();
store.insert("sub-1".into());
store.insert(
"sub-1".into(),
crate::agent::tools::background::TaskKind::Subagent,
);

let saw_reminder = Arc::new(Mutex::new(false));
let saw_clone = saw_reminder.clone();
Expand Down
18 changes: 11 additions & 7 deletions src/agent/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -369,12 +369,15 @@ pub async fn build_agent_inner<M: CompletionModel + 'static>(
#[cfg(feature = "lsp")]
lsp_manager.clone(),
)),
Box::new(tools::BashTool::with_cache(
permission.clone(),
ask_tx.clone(),
sandbox.clone(),
cache.clone(),
)),
Box::new(
tools::BashTool::with_cache(
permission.clone(),
ask_tx.clone(),
sandbox.clone(),
cache.clone(),
)
.with_bg_store(bg_store.clone()),
),
Box::new(tools::GrepTool::with_cache(
permission.clone(),
ask_tx.clone(),
Expand Down Expand Up @@ -755,7 +758,8 @@ pub async fn build_loop_tools(
ask_tx.clone(),
sandbox.clone(),
cache.clone(),
),
)
.with_bg_store(bg_store.clone()),
Some(ToolExecutionMode::Sequential),
)
.await,
Expand Down
Loading
Loading