agent-lookout 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -0
- package/PRIVACY.md +145 -20
- package/README.md +46 -43
- package/SECURITY.md +24 -9
- package/dist/assets/{HistoryPanel-oSXRXEdv.js → HistoryPanel-CQ7zovsM.js} +1 -1
- package/dist/assets/{SessionPanel-DcJvw0F8.js → SessionPanel-DS29Z04P.js} +1 -1
- package/dist/assets/index-BWFkRW4g.js +3 -0
- package/dist/assets/motion-DlYOyClL.js +9 -0
- package/dist/cli/agent-lookout.js +2 -2
- package/dist/cli/{mcpServer-HJSH3WIS.js → mcpServer-BMSF2TXC.js} +2 -2
- package/dist/cli/{startCommand-3LYUYPG4.js → startCommand-ANC7NVAO.js} +2420 -459
- package/dist/index.html +2 -2
- package/docs/API.md +99 -44
- package/docs/GUIDE.md +242 -92
- package/docs/INSTALL.md +8 -6
- package/package.json +5 -1
- package/dist/assets/index-DLPmOXDe.js +0 -3
- package/dist/assets/motion-BAhdRuCw.js +0 -9
package/docs/GUIDE.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Requirements
|
|
4
4
|
|
|
5
|
-
Node.js 22.12 or newer, or the Mac app, which needs none, and Claude Code, Codex or
|
|
5
|
+
Node.js 22.12 or newer, or the Mac app, which needs none, and Claude Code, Codex or the Antigravity CLI. [INSTALL.md](INSTALL.md) has the versions each needs, how to check them, and the steps to install and start Agent Lookout.
|
|
6
6
|
|
|
7
7
|
## The screen
|
|
8
8
|
|
|
9
|
-

|
|
10
10
|
|
|
11
11
|
A rail down the left edge moves between three views: Overview, Sources and Settings. The mark at the top of the rail lights up while any session needs you, so you can see it from every view. The browser tab's title gives the number that need you, as in `(2) Agent Lookout`.
|
|
12
12
|
|
|
@@ -39,7 +39,7 @@ Click Working or Idle to open a chart of how many sessions had that status over
|
|
|
39
39
|
|
|
40
40
|
When nothing needs you, the panel says Nothing needs you and shows the last wait that ended in the last hour: how long it lasted, the session, and when it was answered or ended. If none did, it says so. The bars of earlier waits and the counts stay under it.
|
|
41
41
|
|
|
42
|
-

|
|
43
43
|
|
|
44
44
|
#### Last hour
|
|
45
45
|
|
|
@@ -113,15 +113,16 @@ A session that needs you is in the Needs you panel rather than the list. There,
|
|
|
113
113
|
|
|
114
114
|
#### Quiet for
|
|
115
115
|
|
|
116
|
-
A session can say it is working while nothing is happening. A Codex session that is waiting for your approval shows as working, because Codex does not record those waits, and any agent can hang. So when a working session's agent has not written to its session file for 5 minutes or more, its row says how long, under its status and time: `quiet for 12m`. Hover over it, or move to it with Tab, to read when the agent last wrote. In a narrow window it has a line of its own under the status and its time.
|
|
116
|
+
A session can say it is working while nothing is happening. A Codex session that is waiting for your approval shows as working, because Codex does not record those waits where Agent Lookout reads, so does an Antigravity CLI session waiting for an answer to a question, and any agent can hang. So when a working session's agent has not written to its session file for 5 minutes or more, its row says how long, under its status and time: `quiet for 12m`. Hover over it, or move to it with Tab, to read when the agent last wrote. In a narrow window it has a line of its own under the status and its time.
|
|
117
117
|
|
|
118
118
|
It is a measurement, not a status. The session is still listed as working, with the same mark and word, and it does not move to the Needs you panel or send a notification or an email. A long quiet stretch is the sign to go and look: the session may be waiting for you, or may have stopped. Some work is quiet too, such as a long build or test run the agent is waiting on, so it does not say which.
|
|
119
119
|
|
|
120
|
-
| Agent
|
|
121
|
-
|
|
|
122
|
-
| Codex
|
|
123
|
-
|
|
|
124
|
-
|
|
|
120
|
+
| Agent | What the time is |
|
|
121
|
+
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
122
|
+
| Codex | When Codex last wrote to the session's file in `~/.codex/sessions`, or to the file of a subagent the session started. Codex adds a line to each as it works. A subagent's own subagents are not counted |
|
|
123
|
+
| Antigravity CLI | When agy last wrote to the conversation's transcript, or to its database or the database's log in `~/.gemini/antigravity-cli/conversations`, which are looked at and never opened |
|
|
124
|
+
| Status files | When the status file was last written. An agent that wants this should write its file now and then while it works |
|
|
125
|
+
| Claude Code | None, so nothing is shown. The file Agent Lookout reads for a Claude Code session is not rewritten as the session works: it can stay hours old while the session is busy |
|
|
125
126
|
|
|
126
127
|
For Claude Code, the time its file was written would make a session busy on one long task look quiet for as long as the task lasts. The transcripts would say when it last did anything, and Agent Lookout reads one only while its session is waiting, for what it is asking. For every agent, Agent Lookout reads only when the file was last changed, from the file system, and nothing more of the file than it already reads.
|
|
127
128
|
|
|
@@ -194,17 +195,17 @@ The Timeline draws each session's status over the last hour, one row for each se
|
|
|
194
195
|
|
|
195
196
|
Waits says how long sessions waited on you today and over the last 7 days, which are today and the six days before it, so you can see whether waiting on you is getting better or worse, and which sessions wait the longest. Each figure gives how many waits it took. By day has a bar for each of the 7 days, oldest first, with how long sessions waited that day and how much of it Agent Lookout measured. A day it did not measure at all is hatched, with a dash. Longest waits lists the five sessions that waited longest, with how many times each waited and whether it is waiting now, today or over the 7 days, by the switch beside it.
|
|
196
197
|
|
|
197
|
-
Waits counts only the time Agent Lookout was running, from the [history](#history) it keeps, and the line under the figures says how much of today and of the 7 days that was. Time it was stopped, the computer was asleep, or a source did not answer is left out, and a wait that went on across it counts for the time either side and is still one wait. A wait already under way when Agent Lookout started counts from when it started, so it can be shorter here than in the Needs you panel, which shows how long the session has waited in all. When two sessions wait at once, each one's wait counts, so two waiting for a minute is two minutes. With `AGENT_LOOKOUT_HISTORY=off` it covers only the time since Agent Lookout started, and says so.
|
|
198
|
+
Waits counts only the time Agent Lookout was running, from the [history](#history) it keeps, and the line under the figures says how much of today and of the 7 days that was. Time it was stopped, the computer was asleep, or a source did not answer is left out, and a wait that went on across it counts for the time either side and is still one wait. A wait already under way when Agent Lookout started counts from when it started, so it can be shorter here than in the Needs you panel, which shows how long the session has waited in all. When two sessions wait at once, each one's wait counts, so two waiting for a minute is two minutes. With `AGENT_LOOKOUT_HISTORY=off` it covers only the time since Agent Lookout started, and says so. A Codex session is never seen waiting, so it never counts, and an Antigravity CLI session counts only while agy asks you to approve a tool. A wait that is still open is amber at the end of today's bar, as in the Last hour chart, and goes on second by second. The page asks for the totals every 30 seconds, and at once when a wait opens or ends or you come back to the page, and they are worked out on this computer and sent nowhere.
|
|
198
199
|
|
|
199
200
|
### Sources
|
|
200
201
|
|
|
201
|
-

|
|
202
203
|
|
|
203
|
-
Sources has a card for Claude Code, one for Codex and one for status files, and under them a table of [what each agent can report](#what-each-agent-can-report). Each card says whether the agent was found: Watching, Searching, Not found or Not working. Under that, a short note says how its sessions are being read right now, then rows give what Agent Lookout reads and runs.
|
|
204
|
+
Sources has a card for Claude Code, one for Codex, one for the Antigravity CLI and one for status files, and under them a table of [what each agent can report](#what-each-agent-can-report). Each card says whether the agent was found: Watching, Searching, Not found or Not working. Under that, a short note says how its sessions are being read right now, then rows give what Agent Lookout reads and runs.
|
|
204
205
|
|
|
205
|
-
For Claude Code the rows give the folder of session files it reads, normally `~/.claude/sessions`, how often it reads that folder, the Claude Code command it runs to list sessions, how often it runs it, or "not run", and Transcript read: the last message of a waiting session, or "Off" with `AGENT_LOOKOUT_WAITING_TEXT=off`. For Codex they give the folder where Codex saves its sessions, normally `~/.codex/sessions`, how often it reads them, the folder where Codex marks the sessions it has open, normally `~/.codex/thread-writer-locks`, and the file where Codex keeps the names you give sessions, normally `~/.codex/session_index.jsonl`.
|
|
206
|
+
For Claude Code the rows give the folder of session files it reads, normally `~/.claude/sessions`, how often it reads that folder, the Claude Code command it runs to list sessions, how often it runs it, or "not run", and Transcript read: the last message of a waiting session, or "Off" with `AGENT_LOOKOUT_WAITING_TEXT=off`. For Codex they give the folder where Codex saves its sessions, normally `~/.codex/sessions`, how often it reads them, the folder where Codex marks the sessions it has open, normally `~/.codex/thread-writer-locks`, and the file where Codex keeps the names you give sessions, normally `~/.codex/session_index.jsonl`. For the Antigravity CLI they give the folder where agy keeps its conversations, normally `~/.gemini/antigravity-cli/brain`, how often it reads them, the `ps` command that tells which agy programs are running, and how often it runs it. Each of these cards ends with Sessions found and Last checked.
|
|
206
207
|
|
|
207
|
-
The
|
|
208
|
+
The notes on Codex's card and the Antigravity CLI's also give the limits of what their files can show, which are described under [What it does not do yet](#what-it-does-not-do-yet).
|
|
208
209
|
|
|
209
210
|
The card for status files gives the folder it reads, normally `~/.agent-lookout/sessions`, how often it reads it, and how many files it read and skipped. Until that folder exists, the card says Not set up, with one sentence on how to start, and nothing else on the screen mentions it. [Your own agents](#your-own-agents) has the rest.
|
|
210
211
|
|
|
@@ -216,11 +217,12 @@ Each [other machine](#another-machine-over-ssh) named in `AGENT_LOOKOUT_REMOTES`
|
|
|
216
217
|
|
|
217
218
|
Under the cards, What each agent can report has a row for each agent and a column for each thing Agent Lookout can show of its sessions, and for [Stop](#stop-a-session) and [Answer](#answer-a-permission-prompt), what it can do to one, with Yes, No or Partly in each. Point at No or Partly, or move to it with Tab, to read why. In a narrow window each agent has a block of its own, with the reason under each No and Partly. A No means Agent Lookout cannot show it for that agent's sessions, so not seeing it is not good news. The [branch](#branches) is not in the table, because it is read the same way for every agent.
|
|
218
219
|
|
|
219
|
-
| Agent
|
|
220
|
-
|
|
|
221
|
-
| Claude Code
|
|
222
|
-
| Codex
|
|
223
|
-
|
|
|
220
|
+
| Agent | Working and idle | Needs you | Finished | Failed | Names | Jump | Quiet for | Stop | Answer |
|
|
221
|
+
| --------------- | ---------------- | --------- | -------- | ------ | ------ | ------ | --------- | ------ | ------ |
|
|
222
|
+
| Claude Code | Yes | Yes | Partly | Partly | Yes | Partly | No | Partly | Partly |
|
|
223
|
+
| Codex | Yes | No | Partly | No | Partly | No | Yes | No | No |
|
|
224
|
+
| Antigravity CLI | Yes | Partly | Partly | Partly | Partly | No | Yes | No | No |
|
|
225
|
+
| Status files | Partly | Partly | Partly | Partly | Partly | No | Partly | No | No |
|
|
224
226
|
|
|
225
227
|
Why, for each No and Partly:
|
|
226
228
|
|
|
@@ -237,6 +239,13 @@ Why, for each No and Partly:
|
|
|
237
239
|
- Codex, Jump: Codex's files name no process to find, and Codex documents no link to a session.
|
|
238
240
|
- Codex, Stop: Codex's files name no process that Agent Lookout could confirm and stop.
|
|
239
241
|
- Codex, Answer: Codex records no approval waits, so there is nothing to answer from here, by hand or by a permission rule.
|
|
242
|
+
- Antigravity CLI, Needs you: While agy asks you to approve a tool, from its own log. A question it asks you shows as working.
|
|
243
|
+
- Antigravity CLI, Finished: Once ps shows no agy program running that could have the conversation open. Not on Windows.
|
|
244
|
+
- Antigravity CLI, Failed: Only when agy records an error of its own or a failed reply. A tool that fails shows as working.
|
|
245
|
+
- Antigravity CLI, Names: The title agy gives a conversation once it has one, and the folder its program's log names. Until then, its conversation ID.
|
|
246
|
+
- Antigravity CLI, Jump: The transcripts name no terminal, and agy documents no link that opens a conversation.
|
|
247
|
+
- Antigravity CLI, Stop: No agy program is tied to one conversation surely enough for Agent Lookout to confirm it and stop it.
|
|
248
|
+
- Antigravity CLI, Answer: Its approval prompt takes an answer only in the terminal agy runs in.
|
|
240
249
|
- Status files, Working and idle: If the agent writes working and idle.
|
|
241
250
|
- Status files, Needs you: If the agent writes waiting.
|
|
242
251
|
- Status files, Finished: If the agent writes finished.
|
|
@@ -251,7 +260,7 @@ Each [other machine](#another-machine-over-ssh) adds a row for each agent found
|
|
|
251
260
|
|
|
252
261
|
### Settings
|
|
253
262
|
|
|
254
|
-
Settings has
|
|
263
|
+
Settings has twelve cards, and in the Mac app two more, [Menu bar](#menu-bar) and [Updates](#updates). Theme chooses Night, which is the default, Day, or System, which follows your computer's setting. Notifications turns notifications on and off, for the dashboard page and for Agent Lookout itself, and chooses what sends one. [Time rules](#time-rules) reminds you of a long wait, sets how long a session is idle before it is stale, and holds everything back during quiet hours. History says where the Events log and the charts are kept, how much they hold and since when, and clears them. Email says whether Agent Lookout emails you, and for what, Webhook whether it posts to a webhook, such as a Slack channel's, and for what, and [ntfy](#ntfy) and [Pushover](#pushover) whether it pushes to your phone through either, and for what, with Send a test to try it. Pull requests says whether each session's [pull request](#pull-requests) is shown, and whether `gh` can be asked for them. All five are set up when you start it, not here. Permission prompts says whether Allow and Deny are offered, and whether the [plugin](#install-the-plugin)'s requests reach Agent Lookout, and [Permission rules](#permission-rules), under it, keeps the rules that answer a permission prompt for you, and lists what they answered. This copy shows the version you are running and where Agent Lookout sends your data: nowhere, or only in the emails, webhook posts and pushes you set up, and with pull requests on, the names of repositories and branches to GitHub, through `gh`, unless `gh` was not found or is not signed in, when nothing goes to GitHub.
|
|
255
264
|
|
|
256
265
|
#### Notifications
|
|
257
266
|
|
|
@@ -272,7 +281,7 @@ While notifications are on, the card lists four events under the button, each wi
|
|
|
272
281
|
|
|
273
282
|
Needs you is on and the other three are off until you change them, so if you never touch the switches you are told of waits alone. A switch takes effect at once and asks your browser nothing. The list is hidden while notifications are off, and your choice is kept for when you turn them on again. Like the button's, it belongs to one browser at one address, and two tabs at the same address share it.
|
|
274
283
|
|
|
275
|
-
A session shows as finished or failed when its agent says so: a Claude Code background job, a [status file](#your-own-agents) that says `finished` or `failed`,
|
|
284
|
+
A session shows as finished or failed when its agent says so: a Claude Code background job, a [status file](#your-own-agents) that says `finished` or `failed`, a Codex session, which is finished once no Codex program has it open, and an Antigravity CLI session, finished once no agy program could have it open and failed when agy reports an error. Other Claude Code sessions do not say how they ended, so when one is closed it leaves the list and sends Ended. A session that leaves the list after it finished or failed sends nothing more.
|
|
276
285
|
|
|
277
286
|
Each of these notifications has the session's name as its title. One that says Finished, Failed or Ended stays until you clear it. A session has one notification at a time, so a later one for the same session takes the place of the earlier: when a session that was waiting finishes, the notification of its wait is cleared and Finished takes its place.
|
|
278
287
|
|
|
@@ -314,15 +323,15 @@ The browser gives its permission to the address, not to Agent Lookout. Another p
|
|
|
314
323
|
|
|
315
324
|
The Time rules card has three rules, each with an Off and On switch, and all three are off until you turn them on. Agent Lookout keeps them in `~/.agent-lookout/settings.json`, so they hold with no dashboard tab open and after a restart. A change takes effect at once. The card shows what Agent Lookout saved: if a change could not be saved, a note says why and the switch stays as it was. A field is read when you leave it or press Enter, and Escape puts back what it held.
|
|
316
325
|
|
|
317
|
-
Remind me of a long wait sends a reminder once a session has waited the minutes you set: 10 unless you change them, from 1 to 1,440. It goes once for each wait, the way the wait's first notice went: as a notification while Needs you is switched on, as an email
|
|
326
|
+
Remind me of a long wait sends a reminder once a session has waited the minutes you set: 10 unless you change them, from 1 to 1,440. It goes once for each wait, the way the wait's first notice went: as a notification while Needs you is switched on, as an email, a webhook post or a push while `needs-you` is among the events those send. Remind again, below, sends it again while the wait goes on. It says how long the session has waited. The notification reads "Has waited 10 minutes for permission" under the session's name, takes the place of the wait's own, and is cleared when the session moves on. The email's subject, the post's line and the push's title say "checkout-flow has waited 10 minutes for permission", and the post has `reminder: true`. A wait that had already gone on longer when the page opened, or when Agent Lookout started, is not reminded of at those minutes, and nor is one whose first email, post or push went only once it had waited that long, since that one says how long already. Set more minutes while a session waits, and it is reminded of again once it has waited those.
|
|
318
327
|
|
|
319
328
|
Under it, Remind again while it waits sends the reminder again while the session still waits: every 30 minutes unless you change them, from 5 to 1,440. It is off until you turn it on. With a reminder after 10 minutes and again every 30, a session that keeps waiting is reminded of at 10 minutes, 40 minutes, 1 hour 10 minutes and so on, each time by the same channels as the first, saying how long it has waited by then, as in "checkout-flow has waited 40 minutes for permission". On the page each notification takes the place of the last. The ones Agent Lookout shows itself, with no dashboard tab open, cannot be taken down, so each stays in Notification Centre until you clear it: with Remind again set to 5 minutes, that can be 12 an hour for one wait. The email's subject is worded as the first reminder's, and the post has `reminder: true` and `repeat`, which counts the intervals since the first reminder's time: 1 at 40 minutes, 2 at 1 hour 10 minutes. After a sleep it can skip numbers. No reminder comes once the wait is answered, from the session itself, with Allow or Deny or by a permission rule, or once the session ends. The times go by how long the wait has lasted, so each channel, and a dashboard tab opened later, reminds at the same moments. A wait has one reminder at a time: after the computer has slept, or when quiet hours end, one comes, saying how long the session has waited by then, and none for the moments missed, and a moment that falls less than half the interval after it is skipped. A wait that had already passed its minutes when Agent Lookout started has its next reminder at the next of its moments, not at once.
|
|
320
329
|
|
|
321
330
|
Mark idle sessions stale sets how long a session is idle before it is stale, in hours or days, from an hour to 30 days: 2 days unless you change them. A stale session is counted under Stale rather than Idle, its idle line in the Timeline turns to dots where it became stale, and a Claude Code session among them whose process still runs is listed under [Left running](#sessions-left-running), where it can be ended. With the rule off, a session is stale after a day.
|
|
322
331
|
|
|
323
|
-
Quiet hours hold back every notification, email and
|
|
332
|
+
Quiet hours hold back every notification, email, post and push between two times on your computer's clock: 22:00 to 08:00 unless you change them. When the end comes before the start, they run past midnight, and the days you tick are the days they begin on: with Monday to Friday ticked, Friday night is quiet until Saturday morning, and Saturday night is not. With no day ticked they never begin. When they end, a session still waiting is notified as usual, or reminded of if it was told of before they began and its reminder came due in them, and everything else held comes as one summary on each channel, such as "While quiet: checkout-flow waited 25 minutes, docs-site waited 1 hour 5 minutes over 2 waits and billing-webhooks finished": one notification headed While quiet, which stays until you clear it, one email, one webhook post and one push each through ntfy and Pushover. A session that waited and then finished, failed or ended is one item, as in "checkout-flow waited 25 minutes then ended". A wait whose reminders came due in quiet hours and that was answered before they ended is one item too, however many came due. Each summary holds what its channel would have sent, so a wait answered before the email's delay was up is in no email. Turn on Leave answered waits out of the summary and it names only the sessions that finished, failed or ended. With nothing to say, there is no summary. Turning quiet hours off while they hold ends them at once. While they hold, a line under the times says so: "Quiet now, until 08:00. Notifications, emails, posts and pushes are held." In the Mac app, the notice of a new version waits for them to end too.
|
|
324
333
|
|
|
325
|
-
The rules apply on top of the switches under Notifications, and of the settings for [email](#email)
|
|
334
|
+
The rules apply on top of the switches under Notifications, and of the settings for [email](#email), the [webhook](#webhook), [ntfy](#ntfy) and [Pushover](#pushover), which still choose what goes where. Quiet hours go by the clock and time zone of the computer Agent Lookout runs on, and a dashboard tab follows what Agent Lookout says, so a tab in another time zone holds and sums up at the same moments. A dashboard tab opened during quiet hours sums up what happened after it opened. With no tab open, Agent Lookout shows its own summary on a Mac, and it covers all of the quiet hours. The rules set here cover the sessions of [another machine](#another-machine-over-ssh) too, as they cover this computer's.
|
|
326
335
|
|
|
327
336
|
What quiet hours hold is kept in memory only. If Agent Lookout is stopped or restarted while they hold, what it held so far is forgotten: no summary comes of those hours, and a session that began waiting before the restart and still waits is not notified when they end. With the long wait reminder on, it is still reminded of, if it had not yet waited the reminder's minutes at the restart, or with Remind again on, at its next moment.
|
|
328
337
|
|
|
@@ -436,7 +445,7 @@ The Email card then says "Emails for a wait say what the session is asking." und
|
|
|
436
445
|
- Nothing is sent for what was already true when Agent Lookout starts, such as a session already waiting or one that had already finished, so starting it again does not send again.
|
|
437
446
|
- At most 20 emails are tried in any hour, whatever they are for, and a try that fails counts. Past that, none goes until the hour has passed, and the card says when the next can. Then a finish, failure or end that was held back goes first, oldest first, and after those the waits still open.
|
|
438
447
|
- An email that could not be sent is not tried again. The card says why, and the next wait sends its own.
|
|
439
|
-
- A Codex session never sends one for a wait, because
|
|
448
|
+
- A Codex session never sends one for a wait, because it never shows as needing you, and an Antigravity CLI session sends one only for a wait for approval of a tool. With `finished` or `ended` set, each sends one when it finishes or leaves the list, and an Antigravity CLI session with `failed` set when it fails.
|
|
440
449
|
|
|
441
450
|
If `AGENT_LOOKOUT_EMAIL_EVENTS` holds anything other than those four names, email stays off, and the card and the terminal name the setting, as for any other setting that cannot be read.
|
|
442
451
|
|
|
@@ -498,6 +507,104 @@ Posts follow the rules emails do. One goes for a wait that has lasted the delay
|
|
|
498
507
|
|
|
499
508
|
To turn the webhook off, start Agent Lookout again without `AGENT_LOOKOUT_WEBHOOK_URL`: start it without reading the file in, or, if you read the file in without the brackets, run `unset AGENT_LOOKOUT_WEBHOOK_URL` or open a new terminal first. To make the address useless to anyone who has it, remove the webhook in Slack's app settings, or in the Discord channel's.
|
|
500
509
|
|
|
510
|
+
#### ntfy
|
|
511
|
+
|
|
512
|
+
Agent Lookout can also push to your phone through [ntfy](https://ntfy.sh), a free service you can use without an account, or run on a server of your own. It pushes for the same events email and the webhook can, one short push for each, and a wait goes at a high priority, which the app shows with a long vibration. It is off unless you set it up. With it off, which is the default, Agent Lookout pushes nothing and opens no connection for it.
|
|
513
|
+
|
|
514
|
+
It is set up with a setting in the environment when you start Agent Lookout, not on this page, and turned off by leaving that setting out. The button for notifications does not turn pushes on or off.
|
|
515
|
+
|
|
516
|
+
| Setting | What it holds |
|
|
517
|
+
| ------------------------ | --------------------------------------------------------------------------------- |
|
|
518
|
+
| `AGENT_LOOKOUT_NTFY_URL` | The address of one topic, such as `https://ntfy.sh/` followed by the topic's name |
|
|
519
|
+
|
|
520
|
+
Four more can be left out. `AGENT_LOOKOUT_NTFY_TOKEN` is an access token for the topic, which Agent Lookout sends in a header, never in the address. `AGENT_LOOKOUT_NTFY_EVENTS`, `AGENT_LOOKOUT_NTFY_AFTER` and `AGENT_LOOKOUT_NTFY_ASKING` are what is pushed, how many seconds a wait lasts before it is pushed and whether the push for a wait says what the session is asking, written as the webhook's are and with the same defaults: `needs-you`, 60 and `off`.
|
|
521
|
+
|
|
522
|
+
The topic's name is a secret. On ntfy.sh anyone who knows or guesses a topic's name can read every push sent to it, so do not use a word or your own name: make one no one can guess. Keep it out of screenshots, issues and shared files, as you would a password. Agent Lookout never shows it: Settings shows the server's host alone.
|
|
523
|
+
|
|
524
|
+
1. Make a topic name no one can guess, in a terminal:
|
|
525
|
+
|
|
526
|
+
```sh
|
|
527
|
+
echo "agent-lookout-$(openssl rand -hex 16)"
|
|
528
|
+
```
|
|
529
|
+
|
|
530
|
+
2. Install the ntfy app on your phone, from its app store or from F-Droid, and subscribe to that topic in it. On a server of your own, choose that server in the app.
|
|
531
|
+
3. Keep the address in a file that only you can read, so it stays out of your shell's history:
|
|
532
|
+
|
|
533
|
+
```sh
|
|
534
|
+
touch ~/.agent-lookout-ntfy && chmod 600 ~/.agent-lookout-ntfy
|
|
535
|
+
```
|
|
536
|
+
|
|
537
|
+
In an editor, put this line in that file, with your topic's name:
|
|
538
|
+
|
|
539
|
+
```sh
|
|
540
|
+
export AGENT_LOOKOUT_NTFY_URL='https://ntfy.sh/YOUR-TOPIC'
|
|
541
|
+
```
|
|
542
|
+
|
|
543
|
+
4. Start Agent Lookout with it, brackets included:
|
|
544
|
+
|
|
545
|
+
```sh
|
|
546
|
+
(source ~/.agent-lookout-ntfy && npx agent-lookout)
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
In a clone, use `npm start` or `npm run dev` in place of `npx agent-lookout`, inside the same brackets. To use email or the webhook as well, read their files in too, as under [Webhook](#webhook).
|
|
550
|
+
|
|
551
|
+
5. Open Settings and press Send a test on the ntfy card. Your phone shows "Agent Lookout test", and the card says "Test sent at 14:02."
|
|
552
|
+
|
|
553
|
+
An access token keeps a topic to you on a server that guards its topics, however its name is found. On a server of your own with access control, run `ntfy token add` for your user there and give that user the topic with `ntfy access`. On ntfy.sh, only a topic reserved for your account is guarded, and reserving topics needs one of its paid plans, as its pricing says: reserve the topic and make the token on its account pages. On ntfy.sh's free plan nothing guards a topic but its name, so keep that name secret. Put the token in the same file, and sign in to the app with the same account so it can still read the topic:
|
|
554
|
+
|
|
555
|
+
```sh
|
|
556
|
+
export AGENT_LOOKOUT_NTFY_TOKEN='tk_YOUR_TOKEN'
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
For a server of your own, the address is its own followed by the topic, such as `https://ntfy.example.com/YOUR-TOPIC`. It must begin `https://`, unless the server is on this computer, at `127.0.0.1` or `localhost`. It may hold no user name, password, `?` or `#`: an access token goes in `AGENT_LOOKOUT_NTFY_TOKEN`. For the iPhone app, set `upstream-base-url: "https://ntfy.sh"` in your server's config: without it, ntfy's documentation says, a push can take hours to reach an iPhone. With it, your server tells ntfy.sh only that a push is waiting, by its ID and a checksum of the topic's address, never its words.
|
|
560
|
+
|
|
561
|
+
To check that it is set up, open Settings. The ntfy card says where pushes go and when, naming the host alone, such as "Pushes go to ntfy.sh after a wait of 1 minute.", then whether the push for a wait says what the session is asking, and whether an access token is set: "No access token is set, so the topic alone guards the pushes: keep it secret." Once a push has been tried, the line under those says when the last one went, such as "Last sent at 14:02.", or, in a note headed "The last push failed", why it did not, such as "The ntfy server refused the access token or the topic (status 403)." If a setting cannot be read, ntfy stays off: the card says "ntfy is off.", and a note headed "ntfy is not set up correctly" names the setting, and the terminal you started Agent Lookout in prints one line that says the same. Neither ever shows the topic or the token.
|
|
562
|
+
|
|
563
|
+
A push's title names the session and what happened, such as "checkout-flow is waiting for permission" or "billing-webhooks finished", and its line under that says how long it has waited, or when it was seen to finish, then the name of its project folder, its app and its agent: "4m 12s · storefront · VS Code · Claude Code". A reminder says how long it has waited in its title, as "checkout-flow has waited 10 minutes for permission", and the summary when quiet hours end is headed "While quiet". It holds no path, no prompt, no link and, unless you set `AGENT_LOOKOUT_NTFY_ASKING=on`, nothing of what a waiting session is asking. With it on, the push for a wait and each reminder of it begins with one more line, such as "Asking: Run: npm test", which everyone who can read the topic sees. [PRIVACY.md](../PRIVACY.md#ntfy) lists all a push holds, and what ntfy.sh and the phone apps do with it.
|
|
564
|
+
|
|
565
|
+
Pushes follow the rules emails and posts do: one for a wait that has lasted the delay and is still open, reminders and their repeats with the [time rules](#time-rules), a finish, a failure or an end at once when its event is set, nothing for what was already true when Agent Lookout starts, nothing during quiet hours but the summary, and at most 20 tried in any hour, counted apart from the others, a test among them. A push that could not be sent is not tried again, and a redirect is never followed. Send a test goes during quiet hours too, since you asked for it.
|
|
566
|
+
|
|
567
|
+
To turn ntfy off, start Agent Lookout again without `AGENT_LOOKOUT_NTFY_URL`: start it without reading the file in, or, if you read the file in without the brackets, run `unset AGENT_LOOKOUT_NTFY_URL AGENT_LOOKOUT_NTFY_TOKEN` or open a new terminal first. To stop a topic's pushes reaching your phone, unsubscribe from it in the app.
|
|
568
|
+
|
|
569
|
+
#### Pushover
|
|
570
|
+
|
|
571
|
+
Agent Lookout can also push to your phone through [Pushover](https://pushover.net), a paid app with a free trial, which delivers to every device you sign in to it. It pushes what ntfy pushes, by the same rules, and is off unless you set it up.
|
|
572
|
+
|
|
573
|
+
| Setting | What it holds |
|
|
574
|
+
| ------------------------------ | ------------------------------------------------------------------ |
|
|
575
|
+
| `AGENT_LOOKOUT_PUSHOVER_TOKEN` | The API token of a Pushover application you make for Agent Lookout |
|
|
576
|
+
| `AGENT_LOOKOUT_PUSHOVER_USER` | Your user key, or a group key, which the pushes go to |
|
|
577
|
+
|
|
578
|
+
Both are needed: with one alone, Pushover stays off and Settings names the other. `AGENT_LOOKOUT_PUSHOVER_EVENTS`, `AGENT_LOOKOUT_PUSHOVER_AFTER` and `AGENT_LOOKOUT_PUSHOVER_ASKING` work as ntfy's do, with the same defaults. A wait, a reminder and the test sound as your device is set to, and the rest arrive without a sound. None sounds through the quiet hours you set in Pushover's own app.
|
|
579
|
+
|
|
580
|
+
1. Install the Pushover app on your phone, from its app store, and sign in to it, or make your account there. Pushover delivers only to a device signed in to it, and that starts its free trial of 30 days.
|
|
581
|
+
2. Sign in at <https://pushover.net>. Your user key is on the first page you see.
|
|
582
|
+
3. Make an application at <https://pushover.net/apps/build>. Name it, for example Agent Lookout, and copy the API token it shows.
|
|
583
|
+
4. Keep the two in a file that only you can read:
|
|
584
|
+
|
|
585
|
+
```sh
|
|
586
|
+
touch ~/.agent-lookout-pushover && chmod 600 ~/.agent-lookout-pushover
|
|
587
|
+
```
|
|
588
|
+
|
|
589
|
+
In an editor, put these two lines in that file:
|
|
590
|
+
|
|
591
|
+
```sh
|
|
592
|
+
export AGENT_LOOKOUT_PUSHOVER_TOKEN='YOUR_APPLICATION_TOKEN'
|
|
593
|
+
export AGENT_LOOKOUT_PUSHOVER_USER='YOUR_USER_KEY'
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
5. Start Agent Lookout with it, brackets included:
|
|
597
|
+
|
|
598
|
+
```sh
|
|
599
|
+
(source ~/.agent-lookout-pushover && npx agent-lookout)
|
|
600
|
+
```
|
|
601
|
+
|
|
602
|
+
6. Open Settings and press Send a test on the Pushover card.
|
|
603
|
+
|
|
604
|
+
The Pushover card says "Pushes go to Pushover after a wait of 1 minute." and the lines the ntfy card has but the one on a token. Neither the token nor the key is ever shown. Your Pushover account can send 10,000 pushes a month for free, shared by all its applications: past that, Pushover refuses them, and the card says "Pushover's monthly limit for your account was reached (status 429)". [PRIVACY.md](../PRIVACY.md#pushover) lists all a push holds.
|
|
605
|
+
|
|
606
|
+
To turn Pushover off, start Agent Lookout again without `AGENT_LOOKOUT_PUSHOVER_TOKEN` and `AGENT_LOOKOUT_PUSHOVER_USER`. To make the token useless to anyone who has it, delete the application on Pushover's site.
|
|
607
|
+
|
|
501
608
|
## Jump
|
|
502
609
|
|
|
503
610
|
A Jump button takes you to a session. A Claude Code session has one when it runs in VS Code, when its process runs inside a tmux pane, or when it runs in a tab of Terminal or iTerm2 on a Mac. The button is in the Needs you panel and in the Sessions list, or on the session's card when the list is shown as a board. No other session has one.
|
|
@@ -640,7 +747,7 @@ Paste it in a terminal and run it. It goes to the session's folder first, becaus
|
|
|
640
747
|
|
|
641
748
|
## Answer a permission prompt
|
|
642
749
|
|
|
643
|
-
With the Agent Lookout plugin installed in Claude Code, a Claude Code session that waits for your permission shows Deny and Allow in the [Needs you](#needs-you) panel and at the top of its [details](#a-sessions-details). Above them is the whole of what it asks: for a shell command, every line of the command, in the mono, with any other input such as `run_in_background` and then the description Claude gave it, and for any other tool, its name and each of its inputs. While Allow is offered, all of it is drawn, however many lines it has. Press Allow to let that one request go ahead, or Deny to refuse it. Deny comes first, so it is in the same place whether Allow is offered or not. Neither button has focus until you move to it, and neither takes a press in the first second a request is shown, so a click meant for what was there before is not taken as an answer. A line then says what came of it, and the Events log says the session had a request allowed or denied from Agent Lookout. From that moment the wait is over: no reminder, email
|
|
750
|
+
With the Agent Lookout plugin installed in Claude Code, a Claude Code session that waits for your permission shows Deny and Allow in the [Needs you](#needs-you) panel and at the top of its [details](#a-sessions-details). Above them is the whole of what it asks: for a shell command, every line of the command, in the mono, with any other input such as `run_in_background` and then the description Claude gave it, and for any other tool, its name and each of its inputs. While Allow is offered, all of it is drawn, however many lines it has. Press Allow to let that one request go ahead, or Deny to refuse it. Deny comes first, so it is in the same place whether Allow is offered or not. Neither button has focus until you move to it, and neither takes a press in the first second a request is shown, so a click meant for what was there before is not taken as an answer. A line then says what came of it, and the Events log says the session had a request allowed or denied from Agent Lookout. From that moment the wait is over: no reminder, email, webhook post or push follows for it. Claude Code can take a second or two to say the session is working again, but the session leaves Needs you at once, and until then is listed with the working sessions as Answered. If its file still says it waits 10 seconds after the answer, Agent Lookout takes it that the session needs you again, and tells you so. When the session asks again, its next request is shown under that line.
|
|
644
751
|
|
|
645
752
|
The prompt in the session is still there, and still works: whichever you answer first wins. Answered in the session, the request leaves the dashboard within a few seconds. A Deny from the dashboard lets Claude carry on without the tool, and tells it that you denied it from Agent Lookout, while No in the terminal stops the turn.
|
|
646
753
|
|
|
@@ -648,14 +755,32 @@ Allow is offered only when the whole of what it allows is shown. Deny alone is o
|
|
|
648
755
|
|
|
649
756
|
A request waits for an answer for 5 minutes, or `AGENT_LOOKOUT_ANSWER_WAIT` seconds, and then leaves the dashboard, and the prompt in the session decides. It also leaves when the session stops waiting, or ends. With Agent Lookout not running, the plugin does nothing and Claude Code asks as usual.
|
|
650
757
|
|
|
651
|
-
| What it says | Why
|
|
652
|
-
| ----------------------------------------------------------------------------- |
|
|
653
|
-
| Allowed from Agent Lookout. | Claude Code was told to allow it.
|
|
654
|
-
| Denied from Agent Lookout. Claude carries on without it. | Claude Code was told to deny it.
|
|
655
|
-
| It was answered in the session, or is no longer waiting, so nothing was sent. | You answered in the session first, or it stopped waiting before the answer reached it.
|
|
656
|
-
| That request is no longer held, so nothing was sent. | It waited longer than Agent Lookout holds a request, or a newer one replaced it.
|
|
657
|
-
| Agent Lookout did not answer in time. The session shows whether it went on. | Agent Lookout gave no answer within 10 seconds. The answer may have reached it all the same.
|
|
658
|
-
| The answer could not be handed to the session. | Something went wrong in Agent Lookout. Nothing more is known of it.
|
|
758
|
+
| What it says | Why |
|
|
759
|
+
| ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
|
|
760
|
+
| Allowed from Agent Lookout. | Claude Code was told to allow it. |
|
|
761
|
+
| Denied from Agent Lookout. Claude carries on without it. | Claude Code was told to deny it. |
|
|
762
|
+
| It was answered in the session, or is no longer waiting, so nothing was sent. | You answered in the session first, or it stopped waiting before the answer reached it. |
|
|
763
|
+
| That request is no longer held, so nothing was sent. | It was answered in the session or stopped waiting, waited longer than Agent Lookout holds a request, or a newer one replaced it. |
|
|
764
|
+
| Agent Lookout did not answer in time. The session shows whether it went on. | Agent Lookout gave no answer within 10 seconds. The answer may have reached it all the same. |
|
|
765
|
+
| The answer could not be handed to the session. | Something went wrong in Agent Lookout. Nothing more is known of it. |
|
|
766
|
+
|
|
767
|
+
### In the Mac app
|
|
768
|
+
|
|
769
|
+
The [Mac app](#desktop-app) offers Deny and Allow outside its window too: on its own notification of a wait, and in its [menu bar](#menu-bar). A press there is answered as a press on the dashboard is, with every check it makes, and the Events log says the request was allowed or denied from Agent Lookout. As on the page, neither takes a press in the first second what it answers is shown, and Allow is offered only for what is shown there whole, as it is written, and never for an edit, a new file, a plan or a question.
|
|
770
|
+
|
|
771
|
+
- **The notification.** These come only while [notifications](#notifications) are on in Settings, with Needs you switched on: the notification of a wait, and of a reminder of one while Remind me of a long wait is on, in [Time rules](#time-rules). While Agent Lookout holds the request of a session it tells you of, the notification has Deny, and Allow too for one shell command with no other input, on one line of at most 40 characters, with only plain spaces, no tab, no two spaces in a row and no space at either end, when the notification can hold all of it with the session's name: its text is then the whole command, under "Asks to run", or, for a reminder, under how long it has waited, "Has waited 40 minutes. Asks to run". For anything else it has Deny alone, and its text says why, or to open Agent Lookout to see it whole, then, on a line of its own, the start of what it asks: its first line, ending in "…" when more follows or it is not shown as written. macOS shows the buttons as it shows any notification's, which depends on the style chosen for Agent Lookout in System Settings, under Notifications. Click the notification itself to open the session's details. Once a button is pressed, the notification is taken down, and a press that sent nothing is followed by a notification that says why: click that one to answer in the session's details. The app shows these only while its window is closed, or the page in it is not checking the sessions: with the window open, the page shows its own notifications, which have no buttons.
|
|
772
|
+
- **The menu bar.** A session whose request is held opens a submenu instead of its details: Open Details, then what it asks, each line of the command on a line of its own, then, after a separator, each other input as its name and value, then Deny and Allow. Allow is there only when every line, and the line over them, is at most 80 characters, with only plain spaces, no tab, no two spaces in a row and no space at either end, in 20 lines at most, no input's name has a `:` in it, and the menu draws each line as it is written, which rules out a line with `...` or `(&)` in it. Otherwise Deny is there alone, with a line that says why. What a press came to is the menu's second line for a minute, and a press that sent nothing opens the menu again to say why.
|
|
773
|
+
|
|
774
|
+
Nothing is answered while the Mac is locked, should macOS let a notification's buttons be pressed on the lock screen. With `AGENT_LOOKOUT_ANSWER=off`, or when Agent Lookout cannot listen for the plugin, neither has Deny or Allow, and the dashboard in a browser and `npx agent-lookout` have neither of these.
|
|
775
|
+
|
|
776
|
+
A notification that offers Allow shows the whole command, and one that offers Deny alone the start of it, over other apps, in Notification Centre and, unless you change it, on the lock screen. To keep them off the lock screen, open System Settings, then Notifications, choose Agent Lookout, and turn off its notifications on the lock screen, or set Show previews to When Unlocked or Never.
|
|
777
|
+
|
|
778
|
+
| What it says | Why |
|
|
779
|
+
| ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
780
|
+
| It was pressed within a second of being shown, so nothing was sent. Click to answer it in Agent Lookout. | A notification's button was pressed less than a second after it was shown. Its buttons are gone, so click this one to open the session's details and answer there. |
|
|
781
|
+
| It was pressed within a second of being shown, so nothing was sent. Press again. | Deny or Allow in the menu was pressed less than a second after the menu, or the submenu, was shown. The menu is open again. |
|
|
782
|
+
| Nothing is answered while this Mac is locked, so nothing was sent. Click to answer it once it is unlocked. | A notification's button was pressed while the Mac was locked. |
|
|
783
|
+
| Agent Lookout is not answering permission prompts now, so nothing was sent. | Answering is off, or Agent Lookout could not listen for the plugin. |
|
|
659
784
|
|
|
660
785
|
### Install the plugin
|
|
661
786
|
|
|
@@ -715,7 +840,7 @@ A deny or an ask rule only holds a request back, so it matches more loosely. A r
|
|
|
715
840
|
|
|
716
841
|
It still goes by the words as written, in the first 4,000 characters, which is what the dashboard shows. A command that a program not in that list runs, such as `npm exec rm`, or that a script, an alias or a git setting runs, is not caught, and neither is a letter that only looks like another. A deny rule here is a convenience, not a fence. Claude Code's own deny rules and its sandbox are the places to fence a command off.
|
|
717
842
|
|
|
718
|
-
A rule answers by the same path as Allow and Deny. Agent Lookout waits for the session's file to say it waits for permission, reads it again, answers only in that same wait, and hands the plugin one of the same two answers. It never rewrites a command and never saves a rule in Claude Code. The prompt in the session may show for the moment that takes, and Claude Code's file can say the session waits for a second or two after the answer. Agent Lookout knows it answered, or that a rule is about to, so it takes that wait as over: no notification, email, webhook post or reminder says the session needs you, the Events log shows no wait, only the answer, and [Waits](#waits) does not count it. Only a read of the file in the instant before the plugin's request reaches Agent Lookout can still see the wait begin. Nor does the session light the lamp or come into the Needs you panel, its count, the tab's title, or the Dock icon and menu bar of the Mac app, and the history, its charts and the Timeline show no wait. For that second or two it is listed with the working sessions as Answered, and [`agent-lookout status`](#in-the-terminal) and [`agent-lookout mcp`](#for-your-agents) count it as working too. With `AGENT_LOOKOUT_ANSWER=off`, no rule answers anything, and the card says so.
|
|
843
|
+
A rule answers by the same path as Allow and Deny. Agent Lookout waits for the session's file to say it waits for permission, reads it again, answers only in that same wait, and hands the plugin one of the same two answers. It never rewrites a command and never saves a rule in Claude Code. The prompt in the session may show for the moment that takes, and Claude Code's file can say the session waits for a second or two after the answer. Agent Lookout knows it answered, or that a rule is about to, so it takes that wait as over: no notification, email, webhook post, push or reminder says the session needs you, the Events log shows no wait, only the answer, and [Waits](#waits) does not count it. Only a read of the file in the instant before the plugin's request reaches Agent Lookout can still see the wait begin. Nor does the session light the lamp or come into the Needs you panel, its count, the tab's title, or the Dock icon and menu bar of the Mac app, and the history, its charts and the Timeline show no wait. For that second or two it is listed with the working sessions as Answered, and [`agent-lookout status`](#in-the-terminal) and [`agent-lookout mcp`](#for-your-agents) count it as working too. With `AGENT_LOOKOUT_ANSWER=off`, no rule answers anything, and the card says so.
|
|
719
844
|
|
|
720
845
|
Each answer a rule gives is an event in the Events log, such as "checkout-flow had Bash allowed by the rule Bash(npm test:*)", and the card lists the last 100 since Agent Lookout started, under Recent automatic answers, with the session, the time, the tool, the decision and the rule. Neither holds the command or anything else of what was asked. The Events log is kept in the [history](#history), so its rule answers are kept for 8 days, as every event is. [PRIVACY.md](../PRIVACY.md#the-settings-file) says what the rules file holds.
|
|
721
846
|
|
|
@@ -1188,11 +1313,11 @@ A session on another machine is read as that machine's Agent Lookout reads it, s
|
|
|
1188
1313
|
|
|
1189
1314
|
## On Linux
|
|
1190
1315
|
|
|
1191
|
-
Agent Lookout is installed and started on Linux as on a Mac, and reads the same folders: `~/.claude/sessions`, `~/.codex` and `~/.agent-lookout/sessions`. CI runs every test on Ubuntu, and there it also starts the built app with `npm start` and checks that it lists a Claude Code session, Codex sessions and a session from a status file, each with the right status. No one has yet used it on a Linux desktop.
|
|
1316
|
+
Agent Lookout is installed and started on Linux as on a Mac, and reads the same folders: `~/.claude/sessions`, `~/.codex`, `~/.gemini/antigravity-cli` and `~/.agent-lookout/sessions`. CI runs every test on Ubuntu, and there it also starts the built app with `npm start` and checks that it lists a Claude Code session, Codex sessions and a session from a status file, each with the right status. No one has yet used it on a Linux desktop.
|
|
1192
1317
|
|
|
1193
1318
|
These are the same as on a Mac:
|
|
1194
1319
|
|
|
1195
|
-
- The dashboard, its notifications while a dashboard tab is open, [email](#email), the [webhook](#webhook), `agent-lookout status` and `agent-lookout mcp`.
|
|
1320
|
+
- The dashboard, its notifications while a dashboard tab is open, [email](#email), the [webhook](#webhook), pushes through [ntfy](#ntfy) and [Pushover](#pushover), `agent-lookout status` and `agent-lookout mcp`.
|
|
1196
1321
|
- [Jump](#a-session-in-tmux) for a session in tmux. tmux is looked for on your `PATH`, then in the same places as on a Mac, `/usr/local/bin` and `/usr/bin` among them.
|
|
1197
1322
|
- Jump for a session in VS Code, which is a `vscode://` link, where VS Code has registered itself to open those links.
|
|
1198
1323
|
|
|
@@ -1209,11 +1334,11 @@ Agent Lookout runs `ps` from `/usr/bin` or `/bin`. Where it is not there, as on
|
|
|
1209
1334
|
|
|
1210
1335
|
## On Windows
|
|
1211
1336
|
|
|
1212
|
-
Agent Lookout is installed and started on Windows as on a Mac, with `npx agent-lookout` in PowerShell or the Command Prompt, and reads the same folders in your user folder, `%USERPROFILE%`: `.claude\sessions`, `.codex` and `.agent-lookout\sessions`. It keeps its history and its settings in `.agent-lookout` there too. A path in your user folder is shown with `/`, as `~/.claude/sessions`. CI runs the tests on Windows, less those of what Windows does not have, such as the POSIX signals and the Unix socket below, and there it also starts the built app with `npm start` and checks that it lists a Claude Code session, Codex sessions and a session from a status file, each with the right status. No one has yet used it on a Windows desktop.
|
|
1337
|
+
Agent Lookout is installed and started on Windows as on a Mac, with `npx agent-lookout` in PowerShell or the Command Prompt, and reads the same folders in your user folder, `%USERPROFILE%`: `.claude\sessions`, `.codex`, `.gemini\antigravity-cli` and `.agent-lookout\sessions`. Windows has no `ps`, so there no Antigravity CLI conversation is shown as finished. It keeps its history and its settings in `.agent-lookout` there too. A path in your user folder is shown with `/`, as `~/.claude/sessions`. CI runs the tests on Windows, less those of what Windows does not have, such as the POSIX signals and the Unix socket below, and there it also starts the built app with `npm start` and checks that it lists a Claude Code session, Codex sessions and a session from a status file, each with the right status. No one has yet used it on a Windows desktop.
|
|
1213
1338
|
|
|
1214
1339
|
These are the same as on a Mac:
|
|
1215
1340
|
|
|
1216
|
-
- The dashboard, its notifications while a dashboard tab is open, [email](#email), the [webhook](#webhook), `agent-lookout status` and `agent-lookout mcp`.
|
|
1341
|
+
- The dashboard, its notifications while a dashboard tab is open, [email](#email), the [webhook](#webhook), pushes through [ntfy](#ntfy) and [Pushover](#pushover), `agent-lookout status` and `agent-lookout mcp`.
|
|
1217
1342
|
- The `claude agents --json --all` command, run every 30 seconds, which lists the background jobs that have finished or failed.
|
|
1218
1343
|
- Jump for a session in VS Code, which is a `vscode://` link, where VS Code has registered itself to open those links.
|
|
1219
1344
|
- `--open`, which hands the address to Windows' own `rundll32.exe` to open in your default browser.
|
|
@@ -1238,17 +1363,19 @@ The settings in this guide are written for a shell such as zsh or bash. In Power
|
|
|
1238
1363
|
|
|
1239
1364
|
## What it does not do yet
|
|
1240
1365
|
|
|
1241
|
-
It does not resume a session itself: for a Claude Code session that has ended, [Resume](#resume-a-session) copies the command that does, and you run it, on macOS and Linux. It cannot send a session a message. It [stops](#stop-a-session) a Claude Code session only when you press Stop and confirm, and not one in the desktop app, a Codex session, a session from a status file or any session on Windows. It [answers a permission prompt](#answer-a-permission-prompt) only for a Claude Code session with the plugin installed, and not on Windows, when you press Allow or Deny or a [permission rule](#permission-rules) you added matches, allows or denies that one request only, and offers Deny alone for an edit, a plan or a question, and for a request it cannot show whole and as it is. An allow rule never allows what you could not allow by hand, or a Bash line of more than one plain command. An agent through [`agent-lookout mcp`](#for-your-agents), whose tools only read, can do none of these. It covers Claude Code and Codex, and any agent that writes a [status file](#your-own-agents), on this computer and on [another machine](#another-machine-over-ssh) running Agent Lookout that you reach over SSH. Cloud sessions, Codex cloud tasks and browser chats do not appear. [What each agent can report](#what-each-agent-can-report) has a table of what each agent can and cannot show.
|
|
1366
|
+
It does not resume a session itself: for a Claude Code session that has ended, [Resume](#resume-a-session) copies the command that does, and you run it, on macOS and Linux. It cannot send a session a message. It [stops](#stop-a-session) a Claude Code session only when you press Stop and confirm, and not one in the desktop app, a Codex session, an Antigravity CLI session, a session from a status file or any session on Windows. It [answers a permission prompt](#answer-a-permission-prompt) only for a Claude Code session with the plugin installed, and not on Windows, when you press Allow or Deny or a [permission rule](#permission-rules) you added matches, allows or denies that one request only, and offers Deny alone for an edit, a plan or a question, and for a request it cannot show whole and as it is. An allow rule never allows what you could not allow by hand, or a Bash line of more than one plain command. An agent through [`agent-lookout mcp`](#for-your-agents), whose tools only read, can do none of these. It covers Claude Code and Codex, and any agent that writes a [status file](#your-own-agents), on this computer and on [another machine](#another-machine-over-ssh) running Agent Lookout that you reach over SSH. Cloud sessions, Codex cloud tasks and browser chats do not appear. [What each agent can report](#what-each-agent-can-report) has a table of what each agent can and cannot show.
|
|
1242
1367
|
|
|
1243
|
-
A notification, an email or a post is sent for four events: a session starting to wait, finishing, failing or ending, and, with the [time rules](#time-rules) on, also a reminder of a long wait and a summary of quiet hours.
|
|
1368
|
+
A notification, an email or a post is sent for four events: a session starting to wait, finishing, failing or ending, and, with the [time rules](#time-rules) on, also a reminder of a long wait and a summary of quiet hours. A Codex session is never seen waiting, and an Antigravity CLI session only while agy asks you to approve a tool. A Claude Code session that is not a background job does not say how it ended, so it sends Ended, never Finished or Failed. A Claude Code background job that starts and ends between two runs of the `claude` command, which is run every 30 seconds, leaves the list before the command lists it as finished, so it too sends Ended. A session from a Codex older than 0.155 is never shown as finished, so it sends Ended when it leaves the list, a day after it was last used. With no dashboard tab open, notifications are shown on a Mac only. Those come from Script Editor, unless Agent Lookout runs as the [desktop app](#desktop-app), cannot open the session, and are not cleared when the session moves on.
|
|
1244
1369
|
|
|
1245
1370
|
A Codex session never shows as needing you. Codex's session files do not record when it is waiting for your approval, so a Codex session that is waiting for you shows as working. Once it has written nothing for 5 minutes, its row says how long it has been [quiet](#quiet-for), which is the sign to look. A Claude Code session never says how long it has been quiet. A Codex session also appears only once its first prompt is sent, because Codex creates its file then. Past sessions the Codex desktop app imports from another agent appear only once you use them in Codex. A session from the Codex desktop app is named after its folder, because the app does not keep the titles it shows in the names file Agent Lookout reads.
|
|
1246
1371
|
|
|
1247
|
-
|
|
1372
|
+
An Antigravity CLI session needs you while agy asks you to approve a tool, which agy's own log records, but shows as working while it waits for an answer to a question, and its row says how long it has been [quiet](#quiet-for) after 5 minutes. A session is named by the title agy gives the conversation, once it has one, and its folder, so its branch, is the one its agy program's log names; until agy gives a title it is named by its folder, and once its program has ended, by its conversation ID, the one `agy --conversation` takes. A conversation is shown as finished only once no agy program running could have it open: one agy left open all day keeps every conversation it wrote to since it started open until it ends, and while an agy program runs that has written to no conversation yet and whose log names none, none is shown as finished. On Windows, which has no `ps`, none is. A tool that fails shows as working, since the agent usually goes on; only an error agy reports as a step of its own, or a failed reply, shows as failed. Conversations in the Antigravity desktop app do not appear. All of this was built from agy 1.3.1's documentation and program and checked against one conversation, so a step it does not expect shows as Unknown.
|
|
1248
1373
|
|
|
1249
|
-
|
|
1374
|
+
A Claude Code background job is shown as finished or failed, and its row stays for 24 hours. A Codex session is shown as finished once no Codex program has it open, and its row stays until 24 hours after Codex last wrote to it, and an Antigravity CLI session the same, once no agy program could have it open. A session started by a Codex older than 0.155 is never shown as finished. Any other session that ends leaves the list. The Events log records that it ended, without saying whether it finished or failed.
|
|
1250
1375
|
|
|
1251
|
-
|
|
1376
|
+
Codex sessions, Antigravity CLI sessions and sessions from status files have no Jump button. Nor do Claude Code sessions in the desktop app, or in a terminal other than Terminal and iTerm2 that is not running tmux. A session from a status file shows its app only when its file names one in `app`. For a session in tmux, Jump selects its pane and leaves you to switch to your terminal. For a session in a tab of Terminal or iTerm2, it brings the tab forward, after macOS has asked you once. For a VS Code session, Jump finds the session only when its folder is open in the VS Code window that has focus. [Jump](#jump) has the rest.
|
|
1377
|
+
|
|
1378
|
+
Email, a webhook and a push through ntfy or Pushover are the ways it can tell you of a session away from this computer, and each sends to one address, topic or user. A post or a push is a few words, with no buttons, and nothing can be answered from it. An email, a post or a push that could not be sent is not tried again. The events are chosen when Agent Lookout starts, with `AGENT_LOOKOUT_EMAIL_EVENTS`, `AGENT_LOOKOUT_WEBHOOK_EVENTS`, `AGENT_LOOKOUT_NTFY_EVENTS` and `AGENT_LOOKOUT_PUSHOVER_EVENTS`, and not in Settings.
|
|
1252
1379
|
|
|
1253
1380
|
The history is kept for 8 days, but the charts show at most the last six hours of it, the Events log its newest 200 events, and Waits the last 7 days.
|
|
1254
1381
|
|
|
@@ -1264,45 +1391,56 @@ Put a setting in front of the command that starts Agent Lookout:
|
|
|
1264
1391
|
AGENT_LOOKOUT_CLAUDE_FEED=off npx agent-lookout
|
|
1265
1392
|
```
|
|
1266
1393
|
|
|
1267
|
-
| Setting
|
|
1268
|
-
|
|
|
1269
|
-
| `AGENT_LOOKOUT_PORT`
|
|
1270
|
-
| `AGENT_LOOKOUT_HOST`
|
|
1271
|
-
| `AGENT_LOOKOUT_CLAUDE_BIN`
|
|
1272
|
-
| `AGENT_LOOKOUT_CLAUDE_HOME`
|
|
1273
|
-
| `AGENT_LOOKOUT_CLAUDE_FEED`
|
|
1274
|
-
| `AGENT_LOOKOUT_WAITING_TEXT`
|
|
1275
|
-
| `AGENT_LOOKOUT_CODEX_HOME`
|
|
1276
|
-
| `CODEX_HOME`
|
|
1277
|
-
| `
|
|
1278
|
-
| `
|
|
1279
|
-
| `
|
|
1280
|
-
| `
|
|
1281
|
-
| `
|
|
1282
|
-
| `
|
|
1283
|
-
| `
|
|
1284
|
-
| `
|
|
1285
|
-
| `
|
|
1286
|
-
| `
|
|
1287
|
-
| `
|
|
1288
|
-
| `
|
|
1289
|
-
| `
|
|
1290
|
-
| `
|
|
1291
|
-
| `
|
|
1292
|
-
| `
|
|
1293
|
-
| `
|
|
1294
|
-
| `
|
|
1295
|
-
| `
|
|
1296
|
-
| `
|
|
1297
|
-
| `
|
|
1298
|
-
| `
|
|
1299
|
-
| `
|
|
1300
|
-
| `
|
|
1301
|
-
| `
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1394
|
+
| Setting | What it does |
|
|
1395
|
+
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
1396
|
+
| `AGENT_LOOKOUT_PORT` | The port `npx agent-lookout`, `agent-lookout` and `npm start` listen on. The default is 4777. |
|
|
1397
|
+
| `AGENT_LOOKOUT_HOST` | The address `npx agent-lookout`, `agent-lookout` and `npm start` listen on: `127.0.0.1`, which is the default, `localhost` or `::1`. Anything else is refused, so other computers cannot reach it. |
|
|
1398
|
+
| `AGENT_LOOKOUT_CLAUDE_BIN` | The full path of the `claude` program. When set, it is the only place Agent Lookout looks. |
|
|
1399
|
+
| `AGENT_LOOKOUT_CLAUDE_HOME` | A folder to read in place of `~/.claude`. When set, the `claude` command is not run unless `AGENT_LOOKOUT_CLAUDE_BIN` is set too. |
|
|
1400
|
+
| `AGENT_LOOKOUT_CLAUDE_FEED` | Set to `off` and Agent Lookout never runs the `claude` command. Sessions come from the session files alone, and finished or failed background jobs are not listed. |
|
|
1401
|
+
| `AGENT_LOOKOUT_WAITING_TEXT` | Set to `off` and Agent Lookout never opens a Claude Code transcript. A waiting session then shows its reason alone, without what it is asking, and so does one on [another machine](#another-machine-over-ssh). |
|
|
1402
|
+
| `AGENT_LOOKOUT_CODEX_HOME` | A folder to read in place of the Codex folder. A folder with no `sessions` folder in it shows no Codex sessions. |
|
|
1403
|
+
| `CODEX_HOME` | Codex's own setting for where it keeps its files. When it is set, Agent Lookout reads that folder too, unless `AGENT_LOOKOUT_CODEX_HOME` is set. |
|
|
1404
|
+
| `AGENT_LOOKOUT_ANTIGRAVITY_HOME` | A folder to read in place of the Antigravity CLI's, `~/.gemini/antigravity-cli`. A folder with no `brain` folder in it shows no Antigravity CLI sessions. |
|
|
1405
|
+
| `AGENT_LOOKOUT_STATUS_DIR` | A folder of [status files](#your-own-agents) to read in place of `~/.agent-lookout/sessions`. |
|
|
1406
|
+
| `AGENT_LOOKOUT_HISTORY` | Set to `off` and Agent Lookout keeps the Events log and the charts in memory only and writes nothing to disk, so they start empty each time it starts. See [History](#history). |
|
|
1407
|
+
| `AGENT_LOOKOUT_HISTORY_DIR` | A folder to keep the [history](#history) in, in place of `~/.agent-lookout/history`. |
|
|
1408
|
+
| `AGENT_LOOKOUT_SETTINGS_FILE` | A file to keep the [time rules](#time-rules) and the [permission rules](#permission-rules) in, in place of `~/.agent-lookout/settings.json`. |
|
|
1409
|
+
| `AGENT_LOOKOUT_NOTIFICATIONS` | Set to `on` and, on a Mac, Agent Lookout shows notifications of waits itself from the moment it starts. A dashboard page that has notifications off turns them off again. Anywhere else it prints a line saying it shows none itself. |
|
|
1410
|
+
| `AGENT_LOOKOUT_TMUX` | Set to `off` and Agent Lookout never runs `tmux`. Sessions in tmux are still listed, without a Jump button. |
|
|
1411
|
+
| `AGENT_LOOKOUT_TERMINAL_JUMP` | Set to `off` and Agent Lookout never looks for, or brings forward, a tab of Terminal or iTerm2. Sessions there are still listed, without a Jump button. |
|
|
1412
|
+
| `AGENT_LOOKOUT_STOP` | Set to `off` and Agent Lookout never stops a session: no session has a Stop button, Left running has no End all…, and the server answers no request to stop one. |
|
|
1413
|
+
| `AGENT_LOOKOUT_ANSWER` | Set to `off` and Agent Lookout never answers a permission prompt: it opens no socket for the plugin, no session shows Allow or Deny, no [permission rule](#permission-rules) answers one, and the server answers no request to answer one. |
|
|
1414
|
+
| `AGENT_LOOKOUT_ANSWER_SOCKET` | The socket the [plugin](#install-the-plugin) sends permission requests to, in place of `~/.agent-lookout/answer.sock`. Set the same in the environment Claude Code starts with, so its hook finds it. With `AGENT_LOOKOUT_CLAUDE_HOME` set, nothing is answered unless this is set too. |
|
|
1415
|
+
| `AGENT_LOOKOUT_ANSWER_WAIT` | How many seconds a permission request waits for Allow or Deny before the prompt in the session is left to decide, from 5 to 540. The default is 300. |
|
|
1416
|
+
| `AGENT_LOOKOUT_EMAIL_TO` | The one address emails go to. With `AGENT_LOOKOUT_SMTP_URL` set too, it turns [email](#email) on. |
|
|
1417
|
+
| `AGENT_LOOKOUT_SMTP_URL` | The mail server emails go through, with the user name and password: `smtps://name:password@server:port`. |
|
|
1418
|
+
| `AGENT_LOOKOUT_EMAIL_FROM` | The address emails come from. The default is the address they go to. |
|
|
1419
|
+
| `AGENT_LOOKOUT_EMAIL_AFTER` | How many seconds a wait lasts before it is emailed, from 0 to 86400. The default is 60. |
|
|
1420
|
+
| `AGENT_LOOKOUT_EMAIL_EVENTS` | What is emailed: `needs-you`, `finished`, `failed` and `ended`, any of them, separated by commas. The default is `needs-you`. |
|
|
1421
|
+
| `AGENT_LOOKOUT_EMAIL_ASKING` | Set to `on` and the email for a wait says what the session is asking, such as `Run: npm test`, which can hold a command, a web address or a file's full path. The default is `off`. See [Email](#what-a-waiting-session-is-asking-by-email). |
|
|
1422
|
+
| `AGENT_LOOKOUT_WEBHOOK_URL` | The one address [webhook](#webhook) posts go to, beginning with `https://`. It turns the webhook on. |
|
|
1423
|
+
| `AGENT_LOOKOUT_WEBHOOK_EVENTS` | What is posted, as for `AGENT_LOOKOUT_EMAIL_EVENTS`. The default is `needs-you`. |
|
|
1424
|
+
| `AGENT_LOOKOUT_WEBHOOK_AFTER` | How many seconds a wait lasts before it is posted, from 0 to 86400. The default is 60. |
|
|
1425
|
+
| `AGENT_LOOKOUT_WEBHOOK_ASKING` | Set to `on` and the post for a wait says what the session is asking, as `AGENT_LOOKOUT_EMAIL_ASKING` does for email. The default is `off`. See [Webhook](#what-a-waiting-session-is-asking-in-a-post). |
|
|
1426
|
+
| `AGENT_LOOKOUT_NTFY_URL` | The address of the one [ntfy](#ntfy) topic pushes go to, beginning with `https://`. It turns ntfy on. Keep it secret: anyone who has it can read the pushes. |
|
|
1427
|
+
| `AGENT_LOOKOUT_NTFY_TOKEN` | An access token for that topic, sent as `Authorization: Bearer`. Left out, none is sent. |
|
|
1428
|
+
| `AGENT_LOOKOUT_NTFY_EVENTS` | What is pushed through ntfy, as for `AGENT_LOOKOUT_EMAIL_EVENTS`. The default is `needs-you`. |
|
|
1429
|
+
| `AGENT_LOOKOUT_NTFY_AFTER` | How many seconds a wait lasts before it is pushed through ntfy, from 0 to 86400. The default is 60. |
|
|
1430
|
+
| `AGENT_LOOKOUT_NTFY_ASKING` | Set to `on` and the push for a wait says what the session is asking. The default is `off`. |
|
|
1431
|
+
| `AGENT_LOOKOUT_PUSHOVER_TOKEN` | The API token of your [Pushover](#pushover) application. With `AGENT_LOOKOUT_PUSHOVER_USER` set too, it turns Pushover on. |
|
|
1432
|
+
| `AGENT_LOOKOUT_PUSHOVER_USER` | Your Pushover user key, or a group key, which the pushes go to. |
|
|
1433
|
+
| `AGENT_LOOKOUT_PUSHOVER_EVENTS` | What is pushed through Pushover, as for `AGENT_LOOKOUT_EMAIL_EVENTS`. The default is `needs-you`. |
|
|
1434
|
+
| `AGENT_LOOKOUT_PUSHOVER_AFTER` | How many seconds a wait lasts before it is pushed through Pushover, from 0 to 86400. The default is 60. |
|
|
1435
|
+
| `AGENT_LOOKOUT_PUSHOVER_ASKING` | Set to `on` and the push for a wait says what the session is asking. The default is `off`. |
|
|
1436
|
+
| `AGENT_LOOKOUT_PULL_REQUESTS` | Set to `on` and Agent Lookout asks your own `gh` for each session's [pull request](#pull-requests) on github.com and its checks, and shows them. The default is `off`. With it on, the names of the repository and the branch go to GitHub, through `gh`, with `gh`'s own login. Any value but `on` or `off` leaves it off, and the card and the terminal name the setting |
|
|
1437
|
+
| `AGENT_LOOKOUT_REMOTES` | Other machines to read over SSH, as `name=target`, separated by commas, such as `devbox=dev@devbox.local,gpu=gpu-vm:4800`. Unset, none is read. See [Another machine over SSH](#another-machine-over-ssh). |
|
|
1438
|
+
| `AGENT_LOOKOUT_SSH_BIN` | The full path of the `ssh` program used to reach those machines. When set, it is the only place Agent Lookout looks. |
|
|
1439
|
+
| `AGENT_LOOKOUT_URL` | The address `agent-lookout status` and `agent-lookout mcp` ask, such as `http://127.0.0.1:4778`, in place of `http://127.0.0.1:4777` and then `http://localhost:5173`. Only an address on this computer is accepted. Set it where the command runs, not where Agent Lookout starts. |
|
|
1440
|
+
|
|
1441
|
+
To see the empty screen, set `AGENT_LOOKOUT_CLAUDE_HOME`, `AGENT_LOOKOUT_CODEX_HOME`, `AGENT_LOOKOUT_ANTIGRAVITY_HOME`, `AGENT_LOOKOUT_STATUS_DIR` and `AGENT_LOOKOUT_HISTORY_DIR` to an empty folder. With only the first set, Codex and Antigravity CLI sessions and sessions from status files still appear.
|
|
1442
|
+
|
|
1443
|
+
The Claude Code, transcript, Codex, Antigravity CLI, status file, history, settings file, notification, tmux, terminal tab, stop, other machine, email, webhook, ntfy, Pushover and pull request settings work with `npx agent-lookout` and `agent-lookout`, and in a clone with `npm start` and `npm run dev`. The port and address settings apply to `npx agent-lookout`, `agent-lookout` and `npm start`, and `AGENT_LOOKOUT_URL` to `agent-lookout status` and `agent-lookout mcp` only. To choose the port for `npm run dev`, pass it after `--`:
|
|
1306
1444
|
|
|
1307
1445
|
```sh
|
|
1308
1446
|
npm run dev -- --port 5180
|
|
@@ -1318,7 +1456,7 @@ In a clone, `npm run build` and then `npm start` run Agent Lookout from built fi
|
|
|
1318
1456
|
|
|
1319
1457
|
## Desktop app
|
|
1320
1458
|
|
|
1321
|
-
Agent Lookout can also run as a Mac app: the same dashboard in a window of its own, with the collector running inside the app. The app opens no port, so nothing else on this computer can reach it. It keeps its rules in the same [settings file](#time-rules) as `npx agent-lookout`, though, and takes up a change to that file at its next poll, so a program running as you can change them by writing the file. It needs no Node.js.
|
|
1459
|
+
Agent Lookout can also run as a Mac app: the same dashboard in a window of its own, with the collector running inside the app. The app opens no port, so nothing else on this computer can reach it. It keeps its rules in the same [settings file](#time-rules) as `npx agent-lookout`, though, and takes up a change to that file at its next poll, so a program running as you can change them by writing the file. It needs macOS 13 Ventura or later, and no Node.js.
|
|
1322
1460
|
|
|
1323
1461
|
To install it, download it from the [latest release](https://github.com/Olanetsoft/agent-lookout/releases/latest) and drag it to Applications, or build it yourself: [Mac app](INSTALL.md#mac-app) has the steps, and what to do the first time macOS will not open it. Keep it in Applications: the app [updates itself](#updates) only from a folder it can change.
|
|
1324
1462
|
|
|
@@ -1326,9 +1464,9 @@ It behaves as a Mac app does:
|
|
|
1326
1464
|
|
|
1327
1465
|
- One copy runs at a time. Opening it again brings its window forward.
|
|
1328
1466
|
- Closing the window leaves it running, still watching your sessions and showing notifications. Click its icon in the Dock to open the window again. Cmd+Q quits it.
|
|
1329
|
-
- With its window open or closed, its [notifications](#notifications) come from Agent Lookout, not from Script Editor, and clicking one opens the window.
|
|
1467
|
+
- With its window open or closed, its [notifications](#notifications) come from Agent Lookout, not from Script Editor, and clicking one opens the window. A wait's notification that the app shows itself, with the window closed, or a reminder of one, opens the session's details, and can have Deny and Allow: [In the Mac app](#in-the-mac-app) says when.
|
|
1330
1468
|
- Its icon in the Dock shows how many sessions need you, with the window open or closed, and no number when none do.
|
|
1331
|
-
- Its icon in the menu bar shows the same count, and lists those sessions when you click it. Choose one to open its details. [Menu bar](#menu-bar) says more.
|
|
1469
|
+
- Its icon in the menu bar shows the same count, and lists those sessions when you click it. Choose one to open its details, or, while Agent Lookout holds its permission request, to answer it. [Menu bar](#menu-bar) says more.
|
|
1332
1470
|
- Settings… in the Agent Lookout menu, or Cmd+comma, opens the Settings view. The Help menu opens this guide.
|
|
1333
1471
|
- Right-click selected text to copy it, or in the search field to cut, copy and paste.
|
|
1334
1472
|
- [Resume](#resume-a-session) copies its command as it does in a browser. The window may write to the clipboard when you press a button that copies, and never reads it.
|
|
@@ -1342,6 +1480,8 @@ The app puts the Agent Lookout mark in the menu bar, in the menu bar's own colou
|
|
|
1342
1480
|
|
|
1343
1481
|
Click it to list the sessions that need you, the longest wait first, each with how long it has waited, as in `checkout-flow · 4m 12s`. Two sessions with the same name have what tells them apart in brackets, their agent, project, branch or app, as in `checkout-flow (Codex) · 4m 12s`. Under each name are the reason and what the session is asking, when that is known, cut to one line: rest the pointer on a session to read all of it. macOS shows the line under a name from macOS 14.4 on; before that, resting the pointer is the way to read it. Up to 10 sessions are listed, and a line under them counts the rest. Choose a session to open its [details](#a-sessions-details) in the window, which opens if it was closed. With nothing waiting, the menu says Nothing needs you, and before Agent Lookout has read any agent, Looking for agents…. It ends with Open Agent Lookout, Check for Updates…, Settings… and Quit Agent Lookout.
|
|
1344
1482
|
|
|
1483
|
+
A Claude Code session whose permission request Agent Lookout holds, through the plugin, opens a submenu instead: Open Details, then what it asks, a line each, with any other input after a separator, then Deny and, when the whole of it is shown as written, Allow. [In the Mac app](#in-the-mac-app) says when Allow is there. What the last press came to is the line under the first for a minute.
|
|
1484
|
+
|
|
1345
1485
|
The times are those of the moment the pointer comes over the icon, or at most a minute old when you open the menu from the keyboard, and while it is open it stays as it is. A session that starts or stops waiting meanwhile shows the next time you open it, and the count beside the icon follows at once.
|
|
1346
1486
|
|
|
1347
1487
|
To take the icon out of the menu bar, open Settings and, under Menu bar, set Show in menu bar to Off. Set it to On to put it back. The app remembers the choice, and the count on the Dock icon stays either way. If macOS does not let the app put its icon there, the switch reads Off and the app's log, `~/Library/Logs/Agent Lookout/main.log`, says why.
|
|
@@ -1354,7 +1494,7 @@ When a newer version is out, the app downloads it, checks it against the size an
|
|
|
1354
1494
|
|
|
1355
1495
|
The app can replace itself only from a folder it can change, so keep it in Applications. Opened from its disk image or another disk, or opened where it was downloaded, which macOS runs from a read-only copy, it says it cannot update itself there. Drag it to Applications, open it from there and check again, or download the new version from its release page. A copy run with `npm run dev:desktop` checks only when you ask and never installs.
|
|
1356
1496
|
|
|
1357
|
-
What the app cannot show you it writes in its log, `~/Library/Logs/Agent Lookout/main.log`: an error, and the lines `npm start` would print, such as the one that says an email or
|
|
1497
|
+
What the app cannot show you it writes in its log, `~/Library/Logs/Agent Lookout/main.log`: an error, and the lines `npm start` would print, such as the one that says an email, webhook or push setting is wrong. If the app cannot start at all, it says so in a message and quits. The log stays on this computer.
|
|
1358
1498
|
|
|
1359
1499
|
It reads the same [settings](#settings-you-can-change) as `npm start`, from its environment, except the port and address, which it has no use for. An app opened from the Finder or the Dock gets none of your shell's variables, so to give it one, quit it and open it from a terminal:
|
|
1360
1500
|
|
|
@@ -1402,12 +1542,12 @@ netstat -ano | findstr :4777
|
|
|
1402
1542
|
|
|
1403
1543
|
### No sessions appear
|
|
1404
1544
|
|
|
1405
|
-
1. Start a session and wait a few seconds. For Claude Code, run `claude` in a terminal. For Codex, run `codex` and send a prompt: a Codex session appears once its first prompt is sent.
|
|
1545
|
+
1. Start a session and wait a few seconds. For Claude Code, run `claude` in a terminal. For Codex, run `codex` and send a prompt: a Codex session appears once its first prompt is sent. For the Antigravity CLI, run `agy` and send a prompt.
|
|
1406
1546
|
2. If the Sessions list says "No agents are running", Agent Lookout is working and sees no session on this computer. Sessions in the cloud or in a browser tab do not appear.
|
|
1407
|
-
3. Open Sources. It says whether Claude Code and
|
|
1547
|
+
3. Open Sources. It says whether Claude Code, Codex and the Antigravity CLI were found, whether the folder of status files is there, and where Agent Lookout looked.
|
|
1408
1548
|
4. If Claude Code's card says Not found, or says the `claude` command was not found, check that `claude --version` works in a terminal. If `claude` is installed somewhere unusual, set `AGENT_LOOKOUT_CLAUDE_BIN` to its full path.
|
|
1409
1549
|
5. If Codex's card says Not found, check that the folder it names exists. If you keep Codex's files elsewhere with `CODEX_HOME`, set it in the terminal that starts Agent Lookout too.
|
|
1410
|
-
6. Check that `AGENT_LOOKOUT_CLAUDE_HOME`, `AGENT_LOOKOUT_CODEX_HOME` and `AGENT_LOOKOUT_STATUS_DIR` are not set in your shell. When one is, Agent Lookout reads only that folder for that agent, or for status files.
|
|
1550
|
+
6. Check that `AGENT_LOOKOUT_CLAUDE_HOME`, `AGENT_LOOKOUT_CODEX_HOME`, `AGENT_LOOKOUT_ANTIGRAVITY_HOME` and `AGENT_LOOKOUT_STATUS_DIR` are not set in your shell. When one is, Agent Lookout reads only that folder for that agent, or for status files.
|
|
1411
1551
|
|
|
1412
1552
|
To see what Agent Lookout sees without opening a browser:
|
|
1413
1553
|
|
|
@@ -1415,7 +1555,7 @@ To see what Agent Lookout sees without opening a browser:
|
|
|
1415
1555
|
curl -s http://127.0.0.1:4777/api/sessions
|
|
1416
1556
|
```
|
|
1417
1557
|
|
|
1418
|
-
Use `http://localhost:5173` if you started it with `npm run dev`. It prints the sessions it found and, under `sources`, whether Claude Code and
|
|
1558
|
+
Use `http://localhost:5173` if you started it with `npm run dev`. It prints the sessions it found and, under `sources`, whether Claude Code, Codex and the Antigravity CLI could be read. The output holds your session names and folder paths, so check it before you share it.
|
|
1419
1559
|
|
|
1420
1560
|
### No notification appears
|
|
1421
1561
|
|
|
@@ -1443,6 +1583,14 @@ Use `http://localhost:5173` if you started it with `npm run dev`. It prints the
|
|
|
1443
1583
|
4. If it says when the last post went, the service took it. Check the channel the webhook was made for, and that the app is still allowed to post there.
|
|
1444
1584
|
5. Check [Time rules](#time-rules) in Settings. During quiet hours no post goes until they end.
|
|
1445
1585
|
|
|
1586
|
+
### No push arrives
|
|
1587
|
+
|
|
1588
|
+
1. Open Settings. If the ntfy or Pushover card says it is off, it names the setting to correct, or says what to set. Set it in the terminal you start Agent Lookout from, then start it again.
|
|
1589
|
+
2. Press Send a test on its card. If your phone shows "Agent Lookout test", pushes reach it, and the card's other lines say why the last notice did not go, or that none has been due yet.
|
|
1590
|
+
3. If the test was not sent, the note says why. For ntfy, a refused token or topic most often means the token is wrong, or the topic is reserved by another account, or the server lets no one write to it without a token. A server that could not be found, did not answer or had nothing answering is a problem with the network or with the address. For Pushover, a refusal with status 400 means the application's token or the user key is wrong: copy both again. A monthly limit reached waits for the next month.
|
|
1591
|
+
4. If the test was sent and nothing arrived, check the phone: that the ntfy app is subscribed to the same topic on the same server, that Pushover is signed in on it, and that its notifications are allowed for the app. A Pushover push for anything but a wait, a reminder or the test arrives without a sound. On an iPhone with an ntfy server of your own, a push can take hours unless the server sets `upstream-base-url`, as under [ntfy](#ntfy).
|
|
1592
|
+
5. Check [Time rules](#time-rules) in Settings. During quiet hours no push goes until they end, but a test does.
|
|
1593
|
+
|
|
1446
1594
|
### No pull request shows
|
|
1447
1595
|
|
|
1448
1596
|
Pull requests are off unless Agent Lookout was started with `AGENT_LOOKOUT_PULL_REQUESTS=on`. The Pull requests card in Settings says whether they are on, and whether `gh` was found and is signed in: run `gh auth status` in a terminal to check, and `gh auth login` to sign in. A session shows one only when its branch has a pull request on github.com, its repository's remote is on github.com, and the branch is not the default one and is not named with digits alone, such as `51`. A new pull request, or a check that has finished, shows within about 2 minutes. The Mac app opened from the Finder or the Dock gets none of your shell's settings: [Desktop app](#desktop-app) says how to give it one.
|
|
@@ -1483,13 +1631,15 @@ For Claude Code, Agent Lookout reads the small file Claude Code keeps for each r
|
|
|
1483
1631
|
|
|
1484
1632
|
For Codex it runs nothing. Every 2 seconds it reads what Codex has added to the session files under `~/.codex/sessions/` and finds the last line that says a turn started or ended: a session with a turn under way is working, and one whose last turn ended is idle. A session that no Codex program has open is finished. Those files hold your conversations with Codex. Agent Lookout keeps only when each turn started and ended and a few details, such as the session's folder, and when each file was last changed, which says how long a working session has been [quiet](#quiet-for). Codex documents none of these files, so a new Codex version can change them.
|
|
1485
1633
|
|
|
1634
|
+
For the Antigravity CLI, `agy`, it runs no agy program either. Every 2 seconds it looks at the names of the folders in `~/.gemini/antigravity-cli/brain` and `~/.gemini/antigravity-cli/conversations` and when each conversation's files were last changed, and reads the end of the transcript agy keeps for each conversation written in the last day, `brain/<conversation ID>/.system_generated/logs/transcript.jsonl`, for its last step: a prompt, a tool or a reply that asks for a tool is working, a reply that asks for none is idle, and an error agy reports itself is failed. To tell an open conversation from one that has ended, it asks `ps`, at most every 10 seconds, which agy programs are running and when each started, and reads the command lines of those programs alone. A conversation no agy program running could have open is finished. It reads the log each running agy program keeps in `~/.gemini/antigravity-cli/log`, only for the lines that say which folder it works in, which conversation it has open and whether it waits for your approval of a tool, and the title agy gives each conversation, in `annotations/`. Those transcripts and logs hold your conversations with agy and what agy does. Agent Lookout keeps only each last step's kind, status and time, and those few lines' facts. agy documents the transcript's format for its own agents, and not its log, so a new agy version can change either. This was built from agy 1.3.1's documentation and program, and checked against one conversation.
|
|
1635
|
+
|
|
1486
1636
|
For any other agent it reads the folder `~/.agent-lookout/sessions` every 2 seconds, when that folder exists. Each file in it is one session, written by the agent itself, as [Your own agents](#your-own-agents) describes. When each file was last written says how long a working session has been quiet.
|
|
1487
1637
|
|
|
1488
1638
|
While a Claude Code session is running, Agent Lookout also asks tmux, if it is installed, which panes it has, about every 30 seconds. A session whose process runs inside one of them gets a [Jump](#jump) button. On a Mac it also asks `ps`, once for each new Claude Code session, which terminal the session's process has and which programs are its parents. A session in a tab of Terminal or iTerm2 gets a Jump button too.
|
|
1489
1639
|
|
|
1490
1640
|
For every session, whatever its agent, Agent Lookout looks for the git repository the session's folder is in: it looks for `.git` in the folder, then in each folder above it, and stops at the first, or before your home folder. It reads which [branch](#branches) is checked out from the repository's `HEAD` file, following the `.git` file of a worktree or a submodule to the folder that holds it. Which [repository](#repositories) the folder belongs to it works out from where those files are and, for a worktree, from the `commondir` file beside its `HEAD`, which names the repository's own git folder. It reads nothing else in the repository.
|
|
1491
1641
|
|
|
1492
|
-
Agent Lookout never writes to `~/.claude`, `~/.codex`, the folder of status files (`~/.agent-lookout/sessions`) or any git repository. In `~/.agent-lookout` it writes only its own history, `settings.json` and the socket `answer.sock`. [PRIVACY.md](../PRIVACY.md) lists every file it reads and every command it runs, and what it keeps from each. [ARCHITECTURE.md](ARCHITECTURE.md) explains how the files and the command are checked against each other.
|
|
1642
|
+
Agent Lookout never writes to `~/.claude`, `~/.codex`, `~/.gemini`, the folder of status files (`~/.agent-lookout/sessions`) or any git repository. In `~/.agent-lookout` it writes only its own history, `settings.json` and the socket `answer.sock`. [PRIVACY.md](../PRIVACY.md) lists every file it reads and every command it runs, and what it keeps from each. [ARCHITECTURE.md](ARCHITECTURE.md) explains how the files and the command are checked against each other.
|
|
1493
1643
|
|
|
1494
1644
|
## For contributors
|
|
1495
1645
|
|