no more dead cursor after typing a follow-up — the working
spinner with rotating messages starts instantly on every turn,
including the first one and after resume.
fork() doesn't survive tsx exit. use spawn() with process.execPath
and process.execArgv to preserve the tsx loader. pass args via temp
file (system prompts are too large for argv).
- always show agent selection (no auto-skip), default to last-used
- detect firecrawl MCP tools and WebSearch/WebFetch in TUI display
- stronger system prompt: must use firecrawl CLI via Bash only,
no MCP tools, no WebSearch, no WebFetch, no curl
categorize tool calls by title in addition to rawInput.command.
catches mcp__firecrawl__firecrawl_scrape, WebSearch, WebFetch,
and all other tool invocation patterns the agent might use.
agent now saves raw scraped markdown alongside the output file,
organized by hostname/path like firecrawl download does. session
folder becomes a self-contained package of output + sources.
tool calls now show · label... when starting and ✓ label when
done. background work still shows animated spinner. deduped so
each operation only shows start/done once.
tell the agent to run firecrawl --help first, show practical
command examples with useful flags (--only-main-content,
--wait-for, --limit, -o), and save to temp files for parsing.
firecrawl agent "prompt" now uses ACP locally instead of the
firecrawl API. prints session path as JSON so other agents can
poll for results. use --api flag to opt into the old API path.
output: { sessionId, sessionDir, output, agent, status }
track whether last stdout text ended with \n. if not, write a
newline before any tool call results, phase headers, or status
lines to prevent them from overwriting partial agent text.
simple requests (pricing from one site) go straight to scrape +
output without asking "shall I proceed?" — just do it. only stop
for confirmation on multi-source research tasks.
system prompt now tells the agent its session directory path and
output file path. agent can write intermediate files, build data
incrementally, and preserve progress if interrupted.
- display output file path (dimmed) above each → prompt
- add "follow-up suggestions" instruction to system prompt:
agent proposes 2-3 specific next steps after completing output,
like perplexity's suggested questions
replace FIRECRAWL_TOOLS_BLOCK with explicit command list that
excludes browser/interact tools. agent should use scrape with
--wait-for for JS-rendered pages instead of browser sessions.
when the agent is doing non-firecrawl work (reading files,
running scripts, spawning subagents), show a dim "..." on the
current line. clears when agent text arrives or a firecrawl
operation completes. prevents the dead cursor stare.
ACP agents handle their own billing — don't show dollar amounts.
status line now shows: "25k tokens · 12 credits · 47s"
also stop printing status before every → prompt — only at session end.
removes the doubled-up · start / ✓ done lines. now each
operation prints once when it finishes — clean single line.
the agent's own text provides context for what's in progress.
the main agent thread should only orchestrate — all heavy
scraping and parsing is delegated to subagents that return
just structured JSON records. keeps the main context window
clean for planning and consolidation.
after the conversation ends, show a menu with all session output
files (with sizes) plus the session folder. selecting one opens
it with the system default handler (open/xdg-open/start).
two modes for running the agent:
- ACP: structured protocol with progress tracking and session mgmt
- Pipe: inject directly into Claude Code/Codex (full terminal, interactive)
user picks mode after selecting the agent. pipe mode falls back
to the original launchAgent() subprocess approach.
also rewrites system prompt to:
- work in clear phases (plan → discover → extract → write)
- stop after plan phase and wait for user confirmation
- report progress with numbers (found 4 sources, extracted 50 records)
- use bullet points not tables (renders better in terminals)
- keep user informed at every step
- deduplicate by URL: scraping the same URL 5x shows one start
line and one done line, not ten
- hide background operations entirely (agent text provides context)
- visual spacing between agent text and tool call blocks
- reset dedup between conversation turns
- status line at each turn boundary with credits + elapsed