{
  "markdown": "# Operations Pulse\n\n**A local-first loop orchestrator for useful, explainable operations.**\n\nOperations Pulse turns recurring checks into evidence, evidence into durable\ntickets, and tickets into a reviewable operating memory. It runs without a\npaid service by default: Node.js, SQLite, Git, local files, and local logs are\nenough to get a useful pulse.\n\nIt is an [Openly Useful](https://openlyuseful.org) project: useful things,\nopenly made.\n\nUse the live, credential-safe setup guide at\n[operations-pulse-five.vercel.app](https://operations-pulse-five.vercel.app).\n\n## What launches in v0.1\n\n- A SQLite ticket and pulse ledger.\n- Read-only local checks for repository state, documentation, and configured\n  log files.\n- An MCP server with self-describing tools and structured results.\n- A portable `operations-pulse` skill for Codex and compatible agents.\n- Optional role definitions for operations, signal review, triage, and\n  integrations.\n- A connection catalog and guided setup that distinguish free/local,\n  subscription, host OAuth, self-hosted, and bring-your-own-credential paths.\n- A complete migration ledger: imported, rewritten, referenced, or excluded.\n\n## Free-first quick start\n\nRequirements: Node.js 24 or newer. No API key is required for the default\nworkflow.\n\n```bash\nnpm install\nnpm run build\nnode packages/core/dist/cli.js init\nnode packages/core/dist/cli.js pulse run --root .\nnode packages/core/dist/cli.js tickets list\n```\n\nConfigure an optional read-only adapter without placing a credential in the\nrepository, SQLite database, MCP argument, or chat transcript:\n\n```bash\nexport OPERATIONS_PULSE_GITHUB_TOKEN='stored by your shell or secret manager'\nnode packages/core/dist/cli.js connections configure \\\n  --id github --mode env-token \\\n  --credential-env OPERATIONS_PULSE_GITHUB_TOKEN\nnode packages/core/dist/cli.js connections test --id github\nnode packages/core/dist/cli.js pulse run --root . --connections github\n```\n\nOn a local machine already authenticated with the GitHub CLI, the zero-copy\nalternative uses that session only for the read-only check; its token is never\nstored or printed:\n\n```bash\ngh auth login\nnode packages/core/dist/cli.js connections configure --id github --mode github-cli\nnode packages/core/dist/cli.js connections test --id github\n```\n\nThe browser-based picker at `apps/site` generates these safe setup steps. It\nnever collects credentials. Host OAuth remains in the host's own consent UI.\n\nRun the MCP server over stdio:\n\n```bash\nnpm run mcp\n```\n\nThe database defaults to `.operations-pulse/pulse.sqlite`. Override it with\n`OPERATIONS_PULSE_DB`.\n\n## Safety model\n\nOperations Pulse is read-only unless a tool or command clearly says it writes.\nPulse runs do not create tickets unless `--create-tickets` (or the equivalent\nMCP argument) is explicitly enabled. Connections are disabled until configured,\ncredentials are never stored in the catalog, and externally visible or paid\nactions require a separate human approval boundary.\n\nConnection records retain only an ID, non-secret settings, an endpoint, and an\nenvironment-variable reference. `connections disconnect` removes that reference\nfrom the local ledger. The initial adapters are read-only: IMAP unread-count\nmetadata, GitHub identity, Linear viewer identity, Sentry project access, and\nPostHog project access. No remote mutation adapter ships in v0.1.\n\n## Optional heartbeat\n\nRun a bounded foreground heartbeat anywhere Node can run:\n\n```bash\nnode packages/core/dist/cli.js heartbeat serve --interval-minutes 30 --root .\n```\n\nOn macOS, inspect then explicitly install a user-level LaunchAgent:\n\n```bash\nnode packages/core/dist/cli.js schedule plan --interval-minutes 30 --root .\nnode packages/core/dist/cli.js schedule install --confirm-install --interval-minutes 30 --root .\n```\n\nThe scheduler is never installed by an MCP tool, a model response, or a page\nload. Removal requires `schedule uninstall --confirm-uninstall`.\n\n## Repository map\n\n- `packages/core` — SQLite ledger and deterministic checks.\n- `packages/mcp` — MCP stdio server.\n- `skill/operations-pulse` — portable agent skill.\n- `plugins/openai/operations-pulse` — generated Codex skill and MCP wrapper.\n- `plugins/claude/operations-pulse` — generated Claude Code skill and MCP wrapper.\n- `.agents/plugins/marketplace.json` — repository-local Codex marketplace.\n- `.claude-plugin/marketplace.json` — repository-local Claude marketplace.\n- `mcp-registry/operations-pulse/server.json` — staged official MCP Registry metadata.\n- `publisher/publisher.json` — repository consumer mirror of the public publisher authority.\n- `agents` — optional role definitions.\n- `catalog` — tool and connection explanations shown at launch.\n- `docs` — architecture, workflows, connection guide, and launch checklist.\n- `migrations` — source inventory and sanitization decisions.\n- `vendor` — attributed third-party skill packs, never silently merged.\n- `apps/site` — dependency-free project site.\n\n## Status\n\nThis repository is being prepared for its first public release. The local-first\ncore is the supported baseline. IMAP, GitHub, Linear, Sentry, and PostHog have\nread-only adapter tests; host OAuth requires a compatible host's native consent\nflow, and no remote write adapter is enabled by default.\n\n## Publisher and registration model\n\nOpenly Useful is the publisher and developer brand. `openlyuseful.org` is the\nopen-source, publisher, policy, security, and support surface;\n`openlyuseful.com` is the Studio/commercial surface. Openly Useful LLC is the\nplanned legal entity and is not represented as formed or active. Openly Useful\nis currently operated by its founder as an individual, and the founder-owner\nhas authorized external source and registry publication while formation proceeds.\n\nThe repository mirror at `publisher/publisher.json` consumes the published\nauthority endpoint at <https://openlyuseful.org/publisher/manifest.json>.\nProvider manifests derive the public name, contact, namespaces, and policy URLs\nfrom that record. The repository URL in staged provider metadata is the planned\npublic source at <https://github.com/Openly-Useful/operations-pulse>.\n\nThe canonical skill remains `skill/operations-pulse`. Provider wrapper copies\nare generated artifacts, not separately editable sources:\n\n```bash\nnpm run registration:sync\nnpm run registration:check\n```\n\nThe wrappers register the portable skill plus the immutable stdio command\n`npx --yes @openly-useful/operations-pulse-mcp@0.1.0`. They do not authenticate\nan account, install a scheduler, configure adapters, or collect credentials.\nThe corresponding MCP Registry identity is `org.openlyuseful/operations-pulse`.\nAfter installing or upgrading the plugin, start a new Codex task or restart\nClaude Code so the host refreshes its MCP tools. By default the MCP database is\n`.operations-pulse/pulse.sqlite` under the host process working directory;\nset `OPERATIONS_PULSE_DB` in the host environment to choose an explicit path.\n\nLocal generation and validation are allowed. Public repository creation,\npackage publication, MCP Registry submission, marketplace submission,\ninstallation, authentication, and deployment are separate external actions.\nBoth publishable workspaces fail closed at `prepublishOnly` unless the exact\nfounder-owner authorization, publisher identity, policy sources, namespace,\npackage identity, and repository provenance match the public authority. LLC\nformation-pending is not itself an npm artifact blocker because Openly Useful\nis founder-operated and the authorization is explicitly effective during\nformation. Namespace verification, provider authentication, and provider review\nremain separate requirements for the relevant registry or provider workflow.\n",
  "bytes": 7723,
  "sha": "778166ddc0f031d6b2a842040528e7baf6783b70e364fdae9e26ac47f249f7b5",
  "repo_slug": "openly-useful/operations-pulse",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_org_openlyuseful_operations_pulse_a6ad3acd/readme"
}