feat(skills): add schedule, notes, and settings skills - #117
Merged
Merged
Conversation
Sessions can manage pi-web schedules, the project scratchpad, and settings in natural language via /skill:pi-web-* and pi-web-ctl, calling the existing HTTP APIs instead of writing SQLite.
The three new subscriptions (schedules, scratchpad, settings) were byte-identical 57-line modules differing only in the event name, and each opened its own EventSource to /events?id=__all__. A session tab already holds the per-session stream, so a session page took three connections and two tabs hit the browser's six-per-host HTTP/1.1 cap, stalling fetches and saves. createAppEvents takes the event name and shares one EventSource per topic with a listener registry, closing it when the last subscriber leaves. Also skip the textarea write in applyRemote when the content already matches: our own debounced save echoes back over SSE, and reassigning value moves the caret for no reason.
Contributor
Author
|
Review pass on this branch, plus one follow-up commit (5f0af8c). Fixed here
Verified, no change needed
Deferred — translations
Notes, not blocking
|
setkyar
added a commit
that referenced
this pull request
Sep 18, 2026
Regenerate es, fr, de, zh, ja, id, ms, vi, th, fil, my, km, and lo for install, keyboard-shortcuts, llm-debug, and roadmap. This also picks up English drift from #117 that the locale files had missed. build_userdocs.py gains a --docs filter so only changed guides are re-translated, instead of all seven docs plus hero for every language (52 pi calls instead of 104). Hero translation still only runs for a full rebuild.
setkyar
added a commit
that referenced
this pull request
Sep 18, 2026
The 13 locale README and personal-assistant files still predated the skills / pi-web-ctl additions from #117. Regenerate both docs for every locale so the whole translation set matches the English source.
setkyar
added a commit
that referenced
this pull request
Sep 19, 2026
* docs: align guides with the current code and fill gaps
Architecture docs:
- Describe the Svelte SPA as the only live frontend; drop the nonexistent
/login/LoginPage route (auth is the Go-rendered token prompt) and add
/schedules everywhere routes are listed.
- backend.md: add internal/chatqueue + chat_queue*.go/request.go to the
package layout, list all eleven SQLite tables, add /api/chat/queue, and
sync the Server/Manager struct snapshots.
- CSS is inlined into the SPA shell; pwa.go no longer serves /theme.css,
/index.css, /menu.css, /palette.css. Only /custom-themes.css is routed.
- Running-status recent-activity window is 800 ms, not 3 s.
- Tailscale Serve only runs when PI_WEB_TOKEN is set; server startup also
launches the schedule loop and chat-queue drainer outside dev mode.
- chat returns 202 {"status":"queued"}; existing session files get three
append paths (rename, auto-title, labels).
- Mention-autocomplete helpers live under components/session/chat/.
- Custom themes are picked in Settings -> Appearance (the header theme
toggle is gone); index the design-system + metrics docs.
User docs:
- Roadmap: move shipped steering/queue, scheduler, display defaults, and
git diff out of Next up/Planned.
- Keyboard shortcuts: document Cmd/Ctrl+/ (help) and Cmd/Ctrl+, (settings).
- llm-debug: /pi-web status is a pi command, not a binary subcommand.
- install: ?token= sets a cookie and is redirected away, so it does not
linger in the address bar or history.
* docs(i18n): rebuild translations for the guides this PR changed
Regenerate es, fr, de, zh, ja, id, ms, vi, th, fil, my, km, and lo for
install, keyboard-shortcuts, llm-debug, and roadmap. This also picks up
English drift from #117 that the locale files had missed.
build_userdocs.py gains a --docs filter so only changed guides are
re-translated, instead of all seven docs plus hero for every language
(52 pi calls instead of 104). Hero translation still only runs for a
full rebuild.
* docs(i18n): catch up README and personal-assistant translations
The 13 locale README and personal-assistant files still predated the
skills / pi-web-ctl additions from #117. Regenerate both docs for every
locale so the whole translation set matches the English source.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Ship three pi skills so a session can talk to pi-web:
/skill:pi-web-schedule— create/list/pause/run schedules/skill:pi-web-notes— read/append/replace the project scratchpad/skill:pi-web-settings— get/set theme, language, auto-title, etc.They go through
pi-web-ctl, which calls the existing HTTP APIs (never SQLite).install.sh/install.ps1copy the CLI to~/.pi/agent/bin/pi-web-ctl.Why
People already say things like “add a schedule at 2am Singapore time” or “write this in the notes.” Those surfaces existed in the UI only. Skills let the agent do the same thing from a session, in the terminal or the web UI.
How
127.0.0.1:{port}frompi-web-state.jsonand sendsX-Pi-Token(never?token=, which 302s past the handler).--daily --hour 2 --timezone sg) compile to cron; aliases likesgresolve to IANA names.POST /api/scratchpadmode=append) so the UI debounce cannot clobber a GET-then-replace.theme,language,auto-title). Theme/fonts apply live; language reloads open tabs, same as the Settings picker./api/modelsoneshots no longer inherit pi-web’s checkout cwd. That was loading this repo’s.pi/extensionson top of the installed package and crashing on duplicatepi_web_ask_user_question. Extensions still load.Tests
.pi/skills/common/test_pi_web.py— discovery, auth header, cron/tz, notes append, settings aliasesmake testincludespi-web-ctl-test.Try
In a session, type
/pi-and pick/skill:pi-web-schedule,/skill:pi-web-notes, or/skill:pi-web-settings.