Daykeeper logodaykeeper

Agents

Get a support inbox with one command.

No human signup required. No human login, credit card, website, or DNS required for an API inbox.

The command enrolls a machine owner, creates a Free workspace with one API inbox, activates it, and stores the credential on your machine. A typical run finishes in under a minute. Our last measured run took nine seconds.

Start here

npx @skyporch/daykeeper-cli init --name "Acme Support" --plan free --json

Re-running the command resumes the same workspace. It never creates a second one. Drop the --json flag for readable output.

What the command does.

Every step is explicit and resumable. The command exits only after the inbox can accept traffic.

  1. 01

    Enroll

    Registers a machine owner with a signed key. There is no browser step and no password.

  2. 02

    Create

    Creates a Free workspace with one API inbox, then waits for provisioning to reach a terminal state.

  3. 03

    Activate

    Turns on inbox traffic after provisioning reports success, so the inbox is usable when the command exits.

  4. 04

    Store

    Writes the credential to ~/.config/daykeeper/credentials.json at mode 0600 and an MCP config to ~/.config/daykeeper/mcp.json.

What it prints.

Structured output on stdout. Take the tenant ID and endpoints from here instead of parsing prose. The credential goes to disk, not into your shell history.

{
  "ok": true,
  "data": {
    "workspace": {
      "organizationId": "…",
      "name": "Acme Support",
      "plan": "free"
    },
    "inbox": {
      "tenantId": "…",
      "slug": "acme-support",
      "trafficEnabled": true
    },
    "endpoints": {
      "apiUrl": "https://api.mydaykeeper.com",
      "gatewayUrl": "https://gateway.mydaykeeper.com"
    },
    "credential": {
      "storedAt": "~/.config/daykeeper/credentials.json"
    },
    "mcp": {
      "configPath": "~/.config/daykeeper/mcp.json"
    }
  }
}

Connect MCP.

The same run writes this block to ~/.config/daykeeper/mcp.json. Copy it into your agent client, or point the client at that file. The API key comes from the credential file the CLI just wrote.

Planning, mutations, inbox, activation, and operator tools are separate switches. Turn off the ones your agent should not hold.

{
  "mcpServers": {
    "daykeeper": {
      "command": "npx",
      "args": ["--yes", "@skyporch/daykeeper-mcp"],
      "env": {
        "DAYKEEPER_API_URL": "https://api.mydaykeeper.com",
        "DAYKEEPER_API_KEY": "<from credentials.json>",
        "DAYKEEPER_MCP_ENABLE_PLANNING": "true",
        "DAYKEEPER_MCP_ENABLE_MUTATIONS": "true",
        "DAYKEEPER_MCP_ENABLE_INBOX_TOOLS": "true",
        "DAYKEEPER_MCP_ENABLE_ACTIVATION_TOOLS": "true",
        "DAYKEEPER_MCP_ENABLE_OPERATOR_TOOLS": "true"
      }
    }
  }
}

Call it from your backend.

Install @skyporch/daykeeper on a trusted server. Mint a short-lived customer token for each end user and let your app talk to the customer gateway with that token. Keep the API key out of browsers, mobile bundles, source control, command arguments, and logs.

import { DaykeeperClient } from "@skyporch/daykeeper";

const daykeeper = new DaykeeperClient({
  baseUrl: process.env.DAYKEEPER_API_URL!,
  apiKey: process.env.DAYKEEPER_API_KEY!,
});

// Give one end user a short-lived customer token.
const session = await daykeeper.customerSessions.create(tenantId, {
  purpose: "customer",
  subject: userId,
});

// Work the same inbox from the operator side.
const conversations = await daykeeper.operatorConversations.list(tenantId);
const thread = await daykeeper.operatorConversations.messages(conversationId);
await daykeeper.operatorConversations.reply(conversationId, { body: draft });

Limits.

What the one-command path does not cover.

  • The Free plan includes one API inbox per workspace.
  • The machine credential lasts seven days. Rotate it through the CLI before it expires.
  • Keep the credential server-side. It does not belong in a mobile or browser bundle.
  • Website and email inboxes still need the human console.
  • Paid plans and overage budgets still require a verified human owner.

One safe loop.

Past setup, every change follows the same shape. Agents never need to scrape a dashboard or guess whether a write won.

  1. 01

    Discover

    Read server capabilities and the current workspace before choosing a tool or proposing a change.

  2. 02

    Plan

    Ask Daykeeper for a versioned plan. Show its changes, required scopes, warnings, and expiry to the owner.

  3. 03

    Apply

    Apply only the approved plan with a durable idempotency key. A timeout is an unknown outcome, not permission to repeat it.

  4. 04

    Observe

    Inspect the operation until it reaches a terminal state. Keep its correlation ID and next actions for recovery.

The right authority stays with the right actor.

Agent

Run the CLI to enroll a machine owner and open a Free API inbox without human sign-in. Discover capabilities, inspect workspaces and operations, prepare plans, and apply changes allowed by a narrow credential.

Human owner

Sign in through the browser console for website and email inboxes, accept commercial terms, approve paid plans and overage budgets, and issue or revoke agent access.

External admin

Complete DNS, identity-provider, app-store, and other changes whose authority lives outside Daykeeper. An API inbox needs none of them.

Interface availability.

Published on npm

CLI

One command for machine-owner enrollment, workspace creation, inbox activation, credential storage, and MCP config. Re-running resumes instead of duplicating.

View CLI →

Published on npm

TypeScript + Node.js SDK

The trusted server client for capabilities, workspace plan/apply, operations, flows, and customer-session exchange.

View SDK →

Published on npm

MCP

A local stdio server for scoped agent tools. The CLI writes its config for you. There is no hosted MCP endpoint.

View MCP setup →

The React Native, Web, iOS, Android, and Cordova clients are listed on the developers page with their current release state.

Bringing a human?

Hand the workspace your agent created to a person with one more command. It prints a link for them. They sign in to the console and own the workspace, and the agent keeps working.

npx @skyporch/daykeeper-cli claim --email you@company.com

Starting without an agent? Sign up in the console. It covers website and email inboxes, paid plans, and overage budgets.

Open the console

Documentation that an agent can read directly.

The machine-readable index leads with the same command and carries the current package status.