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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ crash-recoverable and inspectable from the CLI the whole way.
| `read_file` | One path for files (hashline `line#hash` anchors), directories (sorted listings), and http(s) URLs (streamed cap; refused when the sandbox denies network) |
| `write_file` / `edit_file` | Writes under sandbox confinement; edits by exact string or by anchored hashline patch with stale-anchor recovery |
| `grep` / `glob` | Regex content search and path patterns, `.gitignore`-aware |
| `ast_grep` / `ast_edit` | Structural search and rewrite over the syntax tree via [ast-grep](https://ast-grep.github.io) (when installed); rewrites preview by default and write only on `apply: true` |
| `github` | GitHub CLI operations with your own `gh` login (when installed) — reads run in parallel, mutations stay serial |
| `agent` | The pen: delegate to durable child agents (above) |
| `job` | The coordination plane: list children with live state, wait for a result, cancel a background child |
| `todo` | A durable session plan in the store — survives crashes and resumes; one item in progress at a time, enforced by the runtime |
Expand Down
3 changes: 3 additions & 0 deletions crates/cli/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -598,6 +598,9 @@ async fn run(
Store::default_path(),
&session.id,
)));
// GitHub, with the user's own gh login. Top-level runs only — pen
// children keep to the workspace unless the coordinator acts itself.
registry.register(std::sync::Arc::new(bullpen_tools::GitHub::new()));
// Follow-up questions reach the terminal only when someone is on it;
// otherwise the detached variant answers with the reason instead.
let interactive = !json && std::io::IsTerminal::is_terminal(&std::io::stdin());
Expand Down
3 changes: 2 additions & 1 deletion crates/harness/src/pen.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ use std::time::Duration;
use bullpen_agent::{Agent, AgentConfig};
use bullpen_llm::{Provider, Role, ToolSpec};
use bullpen_store::{Session, SessionWorker, Store};
use bullpen_tools::{Glob, Grep, ReadFile, Registry, Tool, ToolCtx, ToolError};
use bullpen_tools::{AstGrep, Glob, Grep, ReadFile, Registry, Tool, ToolCtx, ToolError};
use serde_json::{Value, json};

use crate::{StoreJournal, prepare_session, worktree};
Expand Down Expand Up @@ -187,6 +187,7 @@ fn registry_for_mode(mode: &str) -> Result<Registry, ToolError> {
r.register(Arc::new(ReadFile));
r.register(Arc::new(Grep));
r.register(Arc::new(Glob));
r.register(Arc::new(AstGrep::new()));
Ok(r)
}
// Full workspace tools — still no nested pen.
Expand Down
Loading