You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 885fab7
Browse filesBrowse the repository at this point in the historyBrowse files
feat(control): command API for external agents, covering every feature
Agents no longer probe and click the UI. They call commands
(GET /commands, POST /commands/<name>) and the UI shows what each
command changed: the tab or panel comes to the front and flashes, the
status bar names the step, the activity log keeps it (docs/adr/0007).
230 commands across app, menu, workspace, ssh, tabs, files, editor,
search, preview, browser, mini apps, csv, hex, embed, settings, lua,
macro, terminal, tasks, pm2, git, ai, goal and schedule. A decision a
user would make in a dialog is an argument; without it the command
answers 409 with `needs`. Skill v4 carries recipes for each domain and
a command reference generated from the registry.
Bugs found by driving every domain live and fixed:
- A dialog the app opened during a command (the reload prompt that a
CSV preview save raises in the file's text editor) held the answer
until the user closed it. ControlApi::execute now cancels a modal or
popup opened while the handler is on the stack and reports it as
`dismissedDialogs`.
- app.quit counted only modified buffers, so an editor whose file was
deleted still raised the save prompt after "discard"; the file watch
also learns of a deletion late. It now refreshes file state, uses the
window's own rule, and pre-answers the window's prompt for that close
only.
- preview.open fell back to any non-editor tab (a terminal); git.diff
with nothing tracked changed failed instead of answering an empty
diff; agent edits bypassed the macro recorder; settings.list was
empty (moc ignores `public slots:` inside a macro); terminal.read
counted blank rows; git commands answered with stale status.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,7 +14,7 @@ In a chat, a finished turn folds into a single "Worked for 2m14s" row; click it
14
14
15
15
There is also a Goal Agent: pick an ACP judge (Claude Code, Codex, Opencode) or a Custom API endpoint that speaks Anthropic's Messages API. You set success criteria and it drives the working agent until those criteria hold, or attach a goal to an existing conversation. Criteria presets can be saved globally, or into the current project's `.agents/.goals` folder so they travel with the repo; files already in that folder show up in the load list. A judge that needs a human action, or that hits the iteration cap with the criterion still unmet, stops and hands the criterion back instead of marking the goal done. With Prefix /goal checked, the first criterion is sent immediately when the agent supports `/goal`. If a reply is still running and the agent does not support `/goal`, that goal waits in the send queue so the current reply is not stopped. Later criteria wait until the previous is achieved. Send with Goal defaults to the agent's own `/goal` command instead: each criterion goes out on its own, with no separate judge. A `/goal` typed in the composer is sent while a turn is still running only when the agent supports that command; otherwise it waits in the queue. A goal is not judged, and auto compact does not run, while the agent still has background tasks running or a wake-up turn pending. When a goal is achieved, the session can compact automatically. Prompts sent while an agent is still working are queued and delivered when it finishes. AI chats group by project, with a session strip to switch conversations in the same dock. Open chats come back after a restart and resume their agent session on the first prompt. A local Claude Code chat can be moved to another agent from the agent button in the dock's title bar, keeping its transcript. The composer can ask the agent to work in a new git worktree. When you commit, AI can write the commit message from your staged diff. That generator (and other LLM calls) can talk to an OpenAI-compatible endpoint or Anthropic's Messages API. Leave the commit box empty (when not amending) and Commit lets you pick an ACP agent to do the commit. Protocol details and how to wire up a custom ACP agent are in [doc/AcpAgents.md](doc/AcpAgents.md).
16
16
17
-
An outside AI agent can also drive NotepadAI itself. AI ▸ Connect External Agent turns on a local HTTP API (off by default, token-protected) and gives you a prompt to hand to the agent; it fetches a skill from the app describing how to use it. The agent works only through the controls you see: menus, buttons, fields, tabs, editors, terminals and chats, each step highlighted on screen and listed in an activity log, with a Stop button in the status bar. Workspaces, terminals and tasks, AI sessions, goals, git, settings and pane sizes are all reachable this way.
17
+
An outside AI agent can also drive NotepadAI itself. AI ▸ Connect External Agent turns on a local HTTP API (off by default, token-protected) and gives you a prompt to hand to the agent; it fetches a skill from the app describing how to use it. The agent gives NotepadAI commands (open a file, edit it, run a command in a terminal, send a prompt to an AI session and answer its questions, commit and push, change a setting) and the UI shows each one as it happens: what it changed comes to the front and flashes, the status bar names the step, and an activity log lists every step, with a Stop button in the status bar. Workspaces, files and editors, search, terminals and tasks, pm2 processes, git, AI sessions, goals, scheduled tasks, the browser and settings all have commands; the app lists them with their arguments, so the skill's reference is always current.
0 commit comments