Imported from fforres/en-tu-cara (
AGENTS.md). Install upstream withnpx skills add fforres/en-tu-cara. Copyright stays with the author.
En Tu Cara — agent guide
macOS-only menu-bar app: full-screen takeover alerts for calendar events, read locally via EventKit (no OAuth, no servers). Tauri v2: React/TS webviews + Rust core. The product's one unforgivable failure: a meeting started and no alert fired.
Commands
pnpm tauri:dev # LOCAL run — uses a separate bundle id (dev.fforres.entucara.dev)
# so it never resets the RELEASE's calendar grant. Prefer this.
pnpm tauri dev # raw dev (prod bundle id) — WILL churn the release's TCC grant
pnpm tauri build # packaged .app + .dmg (REQUIRED for checkpoint scripts)
pnpm test && pnpm lint # vitest + eslint (lefthook also runs oxfmt/oxlint on commit)
cargo test --manifest-path src-tauri/Cargo.toml
cargo clippy --manifest-path src-tauri/Cargo.toml -- -D warnings
bash scripts/checkpoints/cp3-auto.sh # 25s full alarm-lifecycle e2e (see that folder)
Do NOT
- Run checkpoint scripts or
pkill "En Tu Cara"while the user relies on alerts. - Change the release bundle id
dev.fforres.entucaraOR rotate the Developer-ID signing cert — calendar (TCC) permission is keyed to the bundle id + the signing identity. CI signs every release with the SAME Developer-ID team (M4M27973Q7) + notarizes, so the grant survives auto-updates; a different identity under the same id RESETS it. Local/ad-hoc builds must use the dev bundle id (pnpm tauri:dev); the startup identity guard (identity.rs) warns if an ad-hoc build runs under the prod id. See src-tauri/AGENTS.md gotcha #5. - Bump
tauri-nspanel(git-rev pinned) oreventkit-rs(=exact) without reading the load-bearing constraints in PLAN.md. - Trust
screencaptureor CGWindowList for overlay verification — both lie about our windows (see src-tauri/AGENTS.md). - Schedule slow tests: alarm e2e uses injected events seconds out (ENTUCARA_TEST_EVENTS), never real waiting.
Map
src/— React/TS webviews (tray popover, overlay alert, settings). Own guide.src-tauri/— Rust core (EventKit, scheduler, overlay panels, tray). Own guide.scripts/checkpoints/— regression gates, two-tier (auto + human). Own guide.assets/icon-options/— user-curated icon sets; never delete, ids are stable.PLAN.md— roadmap (shipped vs pending) + load-bearing constraints. Read it before starting work.
User context: Felipe wants autonomous execution and fast iteration; human gates only for what's physically unverifiable (overlay-over-fullscreen, sound).