# Still — Developer and agent guide Native macOS visual privacy curtain, not the macOS security lock. In development; no public app download or guaranteed supported hardware matrix. A small, declarative contract for local metadata and Porcelain templates. Readable by people. Precise enough for agents. ## Two extension paths. The ten native plugins are reviewed, compiled modules shipped with Still. Their catalog/configuration uses schema version 2. The public local SDK uses declarative schema/protocol version 1 for metadata and Porcelain templates. These contracts are different; a manifest does not install executable code. Still does not run imported packages or start a metadata producer. ## Start with a small package. Create a folder ending in .stillplugin with manifest.json. Optional README.md and LICENSE are the only other accepted files. Use your own unique reverse-domain ID. Choose kind metadata with local providers, or kind template with supported Codex/Claude provider cards. Templates support porcelain with corner or rail; custom canvas positioning is currently native-module only. No scripts, assets, credentials, actions or private fields belong in the package. ## Import first. Connect separately. In the development app, choose Settings → Plugins → Import package. Importing does not grant access. Enable a local metadata source explicitly, then Show inbox to find its host-issued connection.json. Start your producer separately with the permissions you choose. Still does not launch, sandbox or stop it. ## Publish a bounded snapshot. Read the current connection identity. Atomically replace snapshot.json with a full protocol-v1 snapshot: pluginID, connectionID, increasing positive revision, observedAt, expiresAt, isSample and facts. Maximum 64 KiB and four unique declared widget facts. Revision stays within JavaScript’s safe integer range. ISO 8601 expiry is at most five minutes, with five seconds of future skew. The schemas define the exact fields. ## Keep source data out of the contract. Quota facts contain one or two usage windows; activity facts contain an anonymous state and count from 0 to 64. States are working, attentionRequested, completed, interrupted, failed and unknown. No prompts, conversations, command text, file paths, transcript references, credentials or raw errors are accepted. Attention is advisory, never an approval decision or verified pending count. ## Expiry and revocation are part of the API. Every snapshot replaces all prior facts; facts: [] clears them. Re-reading a revision does not extend freshness. Invalid input clears displayed facts. Disconnect removes the host connection and snapshot; re-enable and app restart rotate the UUID. Producers must reread it. Suspension clears data. Revocation stops consumption, not the external producer’s OS permissions. ## A sample stays a sample. The downloadable publisher below sends a 60-second sample and exits; it does not observe a real agent. Sample cards remain visibly labelled. Real sources must use isSample: false only when backed by actual provider evidence. Test malformed/oversized data, old revisions, expiry, reconnect, empty snapshots and disconnect before sharing a package. ## Distribution and updates. The public catalog documents built-in modules; it is not a remote installer. The app, workspace CLI and validator are not publicly distributed yet. No working npx or Homebrew installation command is advertised. Community submissions, package upgrades and automatic app/plugin updates are not available. Initial beta updates will use an explicit manual replacement flow once signed artifacts exist. ## Resources https://meet-still.app/sdk/plugin-manifest-v1.schema.json https://meet-still.app/sdk/plugin-snapshot-v1.schema.json https://meet-still.app/sdk/local-signals/manifest.json https://meet-still.app/sdk/porcelain-rail/manifest.json https://meet-still.app/sdk/publish-sample.mjs https://meet-still.app/plugins/catalog.json ## Native collection ### Agents Codex and Claude, together. Account quota and optional activity at a glance. Source: Installed Codex and Claude Code clients. Setup: Enable Agents. Discover installed clients, then connect quota and activity separately in Settings → Agents. Codex hooks require client trust. Privacy: No conversations or credentials. Hooks discard prompt/tool content and store anonymous, expiring states. Attention is advisory; decisions stay in the original client. ### Build Watch A quiet glance at your latest GitHub workflow. Source: GitHub through your installed, authenticated gh CLI. Setup: Choose a repository as owner/name. Sign in with gh separately, then save and refresh. Privacy: Reads workflow status for your selected repository. No source code, logs or tokens are copied. ### Deploy Watch Know when your latest Vercel deployment is ready. Source: Vercel through your installed, authenticated CLI. Setup: Choose project ID, team ID and optional scope. Sign in with Vercel separately, then save and refresh. Privacy: Reads selected deployment status. No deployment logs or tokens are copied. ### Task Watch Follow the commands you explicitly choose to share. Source: Local tasks registered by a separate command wrapper. Setup: Enable Task Watch. A separately started producer reads the host-issued connection and publishes protocol-v2 receipts. The workspace wrapper is not published on npm. Privacy: Only a chosen label, state and optional progress. Still does not capture command text, stdout or stderr, or discover arbitrary processes. ### Mac Pulse CPU, memory pressure and power. Just the essentials. Source: Native read-only macOS system metrics. Setup: Choose which metrics to display. No external account or OS permission prompt is required. Privacy: No process names, window titles or recorded input. ### Next Up Your next event, from a calendar you choose. Source: Native macOS EventKit. Setup: Grant calendar access explicitly and select a calendar. Event titles are hidden unless you choose to show them. Privacy: Reads your selected calendar locally. OS access and the selected calendar are separate choices. ### World Clock A few places that matter to you. Source: Local macOS time-zone data. Setup: Choose up to three city labels and IANA time zones, such as Europe/Rome. Save your settings. Privacy: No location access or network connection. ### Quiet Timer A little time to step away, without a loud countdown. Source: A local timer. Setup: Choose a duration from 1 to 240 minutes. Start or stop from plugin settings; disabling the plugin clears the timer. Privacy: No account or network. It does not unlock Still automatically. ### Weather The weather where you want to be. Source: Open-Meteo during local, non-commercial evaluation. Setup: Choose a city label and coordinates. A licensed commercial endpoint must be selected before a commercial release. Privacy: Coordinates are sent to the weather provider. Still does not request device location. ### Spotify A little room for what is playing. Source: Your running local Spotify app, through native Apple Events. Setup: Open Spotify and allow Automation explicitly in Settings → Plugins. Track and artist titles stay hidden unless enabled. Privacy: Read-only playback. No Spotify web login, listening history or playback controls.