feat(pi): inject the safe schedule skill into every session (built-in, not grantable) #85
No reviewers
Labels
No labels
epic
in-review
ready-for-agent
ready-for-human
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
weiwen/evie!85
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fm/evie-schedule-builtin"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Make the schedule skill built-in (supersedes #84)
The operator decided the safe
scheduleskill should be built-in — always injected into every session, sandboxes included — rather than grantable. This supersedes the grantable approach in #84.Change
Previously
pi_argv(&config, sudo)injected bundled skills all-or-nothing, gated entirely to/sudo. That boundary exists to keep the dangerous control skill (skills/evie, which drives theRunverb — arbitrary host script execution — plus cross-chatSend/Prompt/Query) out of sandboxes.This splits bundled skills into two classes via an explicit, audited allowlist (
SAFE_BUNDLED_SKILLS, currently["schedule"]):schedule/list/cancel, and scheduledsend/prompt/runthat re-enter the caller's own sandbox as their non-root drop target (seescoped_allows— the immediateRunverb stays rejected on the scoped socket).eviecontrol skill, first-party integrations like immich) → still gated to the unsandboxed/sudopath. The control-skill boundary is preserved exactly.Sandboxed sessions now get the safe skill via
--skill, and its host path is bound read-only insandboxed_pi_argv. The installed layout already resolves under the wholesale/nixbind, so no new bind is strictly needed in production; the explicit bind also covers thecargo runsource-tree fallback and keeps injection self-contained.Tests (security-sensitive boundary)
pi_argv_sandboxed_excludes_control_skill_but_includes_safe_schedule_skill: a sandboxed argv includes--skill .../schedulebut NEVERskills/evie.pi_argv_sudo_includes_bundled_skills: sudo gets both control + schedule.sandboxed_pi_argv_binds_the_safe_schedule_skill: sandbox binds the schedule host path RO, never the control skill's.safe_bundled_skill_dirs_holds_schedule_but_not_the_control_skill: allowlist guard.just checkgreen: fmt + clippy -D warnings + 488 tests.Runbook
docs/schedule-skill-deploy-runbook.mdbrought over from #84 and simplified for the built-in approach: step 1 deleted (noskills_dirseeding, no/grant, no rebind — the skill auto-injects on the next session after redeploy). Remaining operator steps kept and kept-accurate: relocate the two briefing scripts to a sandbox-readable path, re-createmorning-briefing+evening-reviewassudo=false, and a 60s test-fire. Precondition that the schedule-rebuild steps need #83 merged AND redeployed is retained.Skill content (
skills/schedule/SKILL.md) reused from #84, verified against the currentevie schedule/list/cancelCLI andscoped_allows.