daily-focus 1.2.0-dev.10 → 1.2.0-dev.12
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/README.md +5 -3
- package/SETUP.md +61 -18
- package/dist/{audit-7ZCLKF46.js → audit-JVDLHD3B.js} +3 -3
- package/dist/{chunk-RZNQJ6UG.js → chunk-D3JAWEF7.js} +1 -1
- package/dist/{chunk-J7ZYVUG6.js → chunk-DPMHC72S.js} +8 -2
- package/dist/{chunk-ODJGQCM3.js → chunk-FPBY3TAW.js} +22 -5
- package/dist/{chunk-Z4SFMMRQ.js → chunk-HEP46XRX.js} +2 -2
- package/dist/{chunk-64XB7UDN.js → chunk-TUZHZ3NP.js} +1 -1
- package/dist/cli.js +6 -6
- package/dist/{demo-BYLLMKSQ.js → demo-UKILSZYF.js} +4 -4
- package/dist/{init-EMZDG2I7.js → init-BZSCAS3L.js} +1 -1
- package/dist/{seed-JU4LQ33D.js → seed-WQEXDK2L.js} +3 -3
- package/dist/{server-WQYUOKB3.js → server-RKEB6FDK.js} +1723 -209
- package/dist/{service-PUJ3YDH5.js → service-RRHZ7BJN.js} +1 -1
- package/package.json +1 -1
- package/prompts/README.md +13 -4
- package/prompts/morning-brief-personal.md +10 -0
- package/prompts/morning-brief-work.md +10 -0
- package/prompts/onboarding.md +41 -0
- package/public/app.js +611 -273
- package/public/style.css +573 -75
package/package.json
CHANGED
package/prompts/README.md
CHANGED
|
@@ -5,12 +5,13 @@
|
|
|
5
5
|
| [`morning-brief-work.md`](./morning-brief-work.md) | The prompt for the work briefing agent, run once every workday morning. |
|
|
6
6
|
| [`morning-brief-personal.md`](./morning-brief-personal.md) | The prompt for the personal briefing agent: email, family calendars, Apple Reminders, Apple Messages, e-Boks and the user's own GitHub projects. |
|
|
7
7
|
| [`assistant.md`](./assistant.md) | The instructions for the on-demand assistant, which the server runs headless when the user presses Ask on a row. One file for both profiles. Linked into the store as `assistant.md`. |
|
|
8
|
+
| [`onboarding.md`](./onboarding.md) | The instructions for the setup screen's CLI sessions, one per question, which propose the answer a new user most likely wants. Not linked into the store: the server reads it from the running copy and inlines it, as it does the assistant's. |
|
|
8
9
|
|
|
9
|
-
All
|
|
10
|
+
All four are **nothing but prompt** — each is read verbatim by its agent, so anything
|
|
10
11
|
else in there is either noise the agent has to skip or, worse, an instruction it
|
|
11
12
|
might try to act on. Notes about the prompts belong in this file instead.
|
|
12
13
|
|
|
13
|
-
The assistant's file differs from the
|
|
14
|
+
The assistant's file differs from the briefing prompts in one way: the server does read it.
|
|
14
15
|
It is the server that starts the assistant, so it is the server that inlines these
|
|
15
16
|
instructions ahead of the row and the request on the first turn of a session. The
|
|
16
17
|
quick actions the panel offers are sentences in `src/assistant.ts`, not in the
|
|
@@ -32,14 +33,16 @@ alongside `items.schema.json`, so a run only ever names a path inside the store:
|
|
|
32
33
|
~/.daily-focus/
|
|
33
34
|
prompt.md → prompts/morning-brief-work.md (symlink, made by the dashboard at start)
|
|
34
35
|
items.schema.json → schema/items.schema.json (symlink, made by the dashboard at start)
|
|
35
|
-
focus.md you write it, in the dashboard or by hand
|
|
36
|
-
sources.md you write it, in the dashboard or by hand
|
|
36
|
+
focus.md you write it, on the setup screen, in the dashboard or by hand
|
|
37
|
+
sources.md you write it, on the setup screen, in the dashboard or by hand
|
|
37
38
|
settings.json the dashboard writes: what you set on its settings page
|
|
39
|
+
agent-settings.json the dashboard writes before every run: the settings the agent reads
|
|
38
40
|
items.json the agent writes it
|
|
39
41
|
actions.jsonl the dashboard appends
|
|
40
42
|
agent.jsonl the dashboard appends: every run, its report, and the questions asked of it
|
|
41
43
|
archive/ the dashboard writes
|
|
42
44
|
prs.json the dashboard writes: its last fetch of the user's open pull requests
|
|
45
|
+
onboarding.json the dashboard writes: the setup screen's answers, and what was proposed for them
|
|
43
46
|
```
|
|
44
47
|
|
|
45
48
|
That boundary is the point, and it is worth being strict about. A prompt that reaches
|
|
@@ -69,6 +72,12 @@ it. Nothing else is handed over: no extra instructions, no checkout, no copy of
|
|
|
69
72
|
prompt. Everything that evolves lives in the prompt, in git, where a change to it is
|
|
70
73
|
reviewable, and the wrapper should never need editing.
|
|
71
74
|
|
|
75
|
+
A setting that changes how the agent gathers, such as searching deleted mail, reaches
|
|
76
|
+
it the same way everything else does: through the store. Before each run the dashboard
|
|
77
|
+
writes `agent-settings.json` with the values it is running with, whether they were
|
|
78
|
+
saved on the settings page or set in `.env`, and both prompts say what each key means.
|
|
79
|
+
The wrapper stays the same whatever the settings are.
|
|
80
|
+
|
|
72
81
|
Which days it runs is `DAILY_FOCUS_AGENT_DAYS` — cron-numbered, so `1-5` is Mon–Fri
|
|
73
82
|
and `0-4` is the Sun–Thu week — and Mon–Fri when unset. The same schedule drives the
|
|
74
83
|
staleness banner, which turns red once the brief is more than 24 *working* hours old,
|
|
@@ -24,6 +24,10 @@ not for you.
|
|
|
24
24
|
gather and how to judge it; that file says *who* and *where*.
|
|
25
25
|
- `items.schema.json` — **you only ever read this.** The machine-readable shape of
|
|
26
26
|
`items.json`. Validate against it in step 5 if you can.
|
|
27
|
+
- `agent-settings.json` — **you only ever read this.** The choices the user made on
|
|
28
|
+
the dashboard's settings page about how you gather, rewritten by the dashboard
|
|
29
|
+
before every run. Each key is explained where it applies below; a missing file or
|
|
30
|
+
key means that key's default.
|
|
27
31
|
- `prs.json` — **you only ever read this.** The dashboard's own cache of the pull
|
|
28
32
|
requests the user has open, refreshed while the dashboard is in use. Facts only —
|
|
29
33
|
reviews, checks, who last acted — with no judgement attached; use it if it helps,
|
|
@@ -148,6 +152,12 @@ and anything filters moved out of the inbox, included. Mail the user filed is no
|
|
|
148
152
|
mail they finished with. **Do not limit the search to unread mail**: the things that
|
|
149
153
|
rot are the ones the user opened, meant to deal with, and didn't.
|
|
150
154
|
|
|
155
|
+
Mail the user deleted is mail they finished with, so leave Trash out unless
|
|
156
|
+
`searchTrash` in `agent-settings.json` is `true` (default `false`). A search with no
|
|
157
|
+
`in:` operator already covers archived mail and skips Trash and Spam; when the
|
|
158
|
+
setting is off, don't widen it with `in:anywhere` or a trash option. When it is on,
|
|
159
|
+
search Trash as well, and still never Spam.
|
|
160
|
+
|
|
151
161
|
**On a first run, search the last 90 days.** The point of that run is to find what
|
|
152
162
|
fell through the cracks: a reply the user owes, a bill, a form, a booking to confirm,
|
|
153
163
|
a promise they made in a thread. Afterwards, use the normal window from step 1.
|
|
@@ -22,6 +22,10 @@ not for you.
|
|
|
22
22
|
how to judge it; that file says *who* and *where*.
|
|
23
23
|
- `items.schema.json` — **you only ever read this.** The machine-readable shape of
|
|
24
24
|
`items.json`. Validate against it in step 5 if you can.
|
|
25
|
+
- `agent-settings.json` — **you only ever read this.** The choices the user made on
|
|
26
|
+
the dashboard's settings page about how you gather, rewritten by the dashboard
|
|
27
|
+
before every run. Each key is explained where it applies below; a missing file or
|
|
28
|
+
key means that key's default.
|
|
25
29
|
|
|
26
30
|
There is also an `archive/` directory of dated past briefs. The dashboard maintains
|
|
27
31
|
it; you never write to it. Read it if you want history — it is how the dashboard
|
|
@@ -167,6 +171,12 @@ the user's filters moved out of the inbox, included. Mail they filed is not mail
|
|
|
167
171
|
finished with, and a label records how they sorted something, not whether they dealt
|
|
168
172
|
with it.
|
|
169
173
|
|
|
174
|
+
Mail the user deleted is mail they finished with, so leave Trash out unless
|
|
175
|
+
`searchTrash` in `agent-settings.json` is `true` (default `false`). A search with no
|
|
176
|
+
`in:` operator already covers archived mail and skips Trash and Spam; when the
|
|
177
|
+
setting is off, don't widen it with `in:anywhere` or a trash option. When it is on,
|
|
178
|
+
search Trash as well, and still never Spam.
|
|
179
|
+
|
|
170
180
|
Prioritise direct requests, deadlines, decisions, travel and logistics,
|
|
171
181
|
finance/legal/security, and anyone plausibly waiting on a reply. **Do not limit
|
|
172
182
|
continuity-sensitive searches to unread mail** — the things that rot are usually the
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Setting up Daily Focus
|
|
2
|
+
|
|
3
|
+
You are helping someone set up Daily Focus, a dashboard that has a coding-agent CLI
|
|
4
|
+
write them a short brief each morning: what needs to get done today, from their
|
|
5
|
+
mail, calendar, pull requests, tickets and documents.
|
|
6
|
+
|
|
7
|
+
They are on the setup screen now. It asks them one question at a time, and each
|
|
8
|
+
question comes with the answer they most likely want already ticked, so most of
|
|
9
|
+
the time all they do is confirm. Your job in this session is that one question,
|
|
10
|
+
named below: find out enough to propose the answer, and say why in a sentence.
|
|
11
|
+
|
|
12
|
+
## How to work
|
|
13
|
+
|
|
14
|
+
- **Only read.** Never send, post, create, edit, move or delete anything,
|
|
15
|
+
anywhere: no mail, no drafts, no calendar changes, no comments, no files.
|
|
16
|
+
- **Be quick.** Someone is waiting on this. A few well-chosen lookups, then
|
|
17
|
+
answer. If something would take long to find out, make the likely guess and
|
|
18
|
+
say it is a guess.
|
|
19
|
+
- **Nobody can answer you mid-turn.** Never ask a question; the screen does the
|
|
20
|
+
asking. If a tool or account isn't reachable, work with what is and say what
|
|
21
|
+
you couldn't check.
|
|
22
|
+
- **Guess well.** A question for the *work* profile wants work accounts,
|
|
23
|
+
calendars and projects; for *personal*, everything else. Lean towards what the
|
|
24
|
+
morning brief needs and away from noise.
|
|
25
|
+
- **Say why in one or two short sentences**, under 40 words, in the first
|
|
26
|
+
person and plain text, no Markdown: "These are on your northwind.dev account,
|
|
27
|
+
where most of this week's meetings are." Cite what you saw, never invent it.
|
|
28
|
+
Say what you guessed, but not every lookup that failed. Never quote private
|
|
29
|
+
content such as mail subjects or meeting titles; counts and account names are
|
|
30
|
+
fine.
|
|
31
|
+
- **Answer with the JSON the schema asks for**, and nothing else. Use an empty
|
|
32
|
+
string, not null, for anything unknown.
|
|
33
|
+
- **Your why describes the answer you give, and nothing more.** The screen
|
|
34
|
+
shows the two side by side. Never say you included something the answer
|
|
35
|
+
doesn't hold; if the user asks for something it has no place for, say so.
|
|
36
|
+
|
|
37
|
+
## When the user writes back
|
|
38
|
+
|
|
39
|
+
They may tell you what to change ("also the on-call rota", "that's my old
|
|
40
|
+
address"). Do what they ask, check what you need to, and answer with the whole
|
|
41
|
+
proposal again, in the same JSON.
|