Skip to content

Getting started on a PC

This page takes you from nothing to a working me on Windows: the server, the CLI, your first task and note, Claude Code using me, and your first integration. Allow about 20 minutes, most of it the first build.

Today you install from the source checkout. Installing with winget and npm is coming soon (PR #153).

  • Windows 10 or 11, and PowerShell 7 (pwsh).
  • The .NET 10 SDK (version 10.0.204 or later; the repo’s global.json pins it).
  • Podman, with a running Podman machine and podman compose. Postgres and Temporal run in it.
  • git, and a clone of VNUALT/Me.CLI.

From the repo root, in your own terminal:

Terminal window
pwsh deploy/local/install.ps1

This command:

  • publishes the server, every production plugin and the me CLI into %LOCALAPPDATA%\Me;
  • generates the database password and the server’s signing key once, readable by you and SYSTEM only (they are also copied into the server’s settings file, which is restricted the same way);
  • starts Postgres and Temporal in Podman;
  • registers the scheduled task Me server, which starts the server at logon, and starts it now.

Everything listens on loopback only: the server on 127.0.0.1:5041, Postgres on 55432, and Temporal on 7243 (its UI is on 8243).

Put the CLI on your PATH, for your user only:

Terminal window
[Environment]::SetEnvironmentVariable('Path', [Environment]::GetEnvironmentVariable('Path', 'User') + ";$env:LOCALAPPDATA\Me\cli", 'User')
$env:Path += ";$env:LOCALAPPDATA\Me\cli" # this terminal too

Re-running install.ps1 after a git pull upgrades the install. It keeps your secrets, data, tokens and tunnel. All parameters are described in the operator guide.

Me.Server.exe setup creates the first tenant and its owner (you), once, on this PC. It prints JSON with a secret: your first personal access token, shown only this once. Capture it and pipe it into me login, so it never appears on a command line or in your history:

Terminal window
$o = & "$env:LOCALAPPDATA\Me\server\Me.Server.exe" setup --tenant "My household" --owner "Your name" | Select-String '"secret"'
($o.Line | ConvertFrom-Json).secret | me login --server http://127.0.0.1:5041 --token-stdin
me whoami # {"tenant":"tn_…","principal":"pr_…","kind":"human","name":"Your name"}

setup refuses to run a second time once a tenant exists. For another device, run me token create --name laptop and log in there with that secret. --another adds a separate tenant.

Plugins are installed with the server but are off until a tenant enables them:

Terminal window
me plugin enable --all
me plugin list

Right after the server (re)starts, plugins take a minute to register. If one is missing from the answer, run me plugin enable --all again a minute later.

Terminal window
me task create --title "Call the plumber about the water heater" --due 2026-10-22T17:00:00-04:00 --tags home
me note create --title "Water heater" --body "50 gal, installed 2014. Pilot keeps going out."
me find "water heater" # the task and the note, ranked, with highlighted snippets
me task review # overdue, waiting-on and stalled work

A few habits that help:

  • me help lists every command, and me help task create shows one command’s flags and which are required.
  • Results carry refs (task_01J…). Pass them to me get, me relations or other commands.
  • --dry-run shows what a command would do, without doing it.
  • In a terminal you get readable text. When piped, you get JSON. --json or --human forces either.

The demo guide has more flows that were checked on a live install: bank statements and unusual charges, triggers, recurring tasks, memory and workflows.

me mcp is an MCP server over stdio. Every command generated from a contract (operations, queries and resource lists) is a tool (task_create, money_spend, attention_pending…), plus me_get, me_relations, me_operation and me_artifact, and it sends the me skill as its instructions.

Terminal window
claude mcp add me -- "$env:LOCALAPPDATA\Me\cli\me.exe" mcp
me skill install # optional: writes ~/.claude/skills/me, so Claude knows the CLI too

To make urgent items reach Claude Code at the start of your next prompt, add this hook to .claude/settings.json:

{ "hooks": { "UserPromptSubmit": [ { "hooks": [ { "type": "command", "command": "me attention hook" } ] } ] } }

Then ask Claude things like “what’s overdue, and what needs my attention?”. Claude calls me tools, quotes refs back, and stops at approvals: sends wait for you, and payments always need your passkey.

The commands above run Claude Code as you. To let it act as an agent with a delegation you control:

  1. Register the agent. This creates it with its default delegation: everything but payments, up to ExternalReversible / Confidential, for 90 days.

    Terminal window
    me agent register "Claude Code"
  2. Issue a token for it. The secret is shown once.

    Terminal window
    me token create --name claude-code --principal pr_…
  3. Log in with that token, into a config file in its own folder. The stored token is named per folder and server, so a config next to your own %APPDATA%\me\config.json would overwrite your login.

    Terminal window
    $env:ME_CONFIG = "$env:APPDATA\me\claude-code\config.json"
    <secret> | me login --server http://127.0.0.1:5041 --token-stdin
    Remove-Item Env:ME_CONFIG # back to your own login in this terminal
  4. Register the MCP server with that config:

    Terminal window
    claude mcp add me -e ME_CONFIG="$env:APPDATA\me\claude-code\config.json" -- "$env:LOCALAPPDATA\Me\cli\me.exe" mcp

me whoami (with that config) then shows "kind":"agent", and me policy explain <op_…> shows it acted on your behalf. me agent list shows what it holds, and me agent revoke removes it.

Coming soon: me agent connect claude-code does all of this in one step (PR #127).

Integrations are accounts at a provider: a calendar, a mailbox, Teams, a phone number, Claude. You add them; agents can’t. See which providers you can set up, and their fields:

Terminal window
me integration list
me integration add com.me.calendar.m365 --help # one provider's settings as flags, and which are secret

The quickest one to try is Claude, as the system’s writer. It phrases messages to people and reads their replies:

Terminal window
me integration add com.me.model.anthropic --name Claude # paste an API key, or a `claude setup-token` token, at the hidden prompt

A claude setup-token token uses your Claude subscription instead of a pay-per-use API key; Claude Code must then be installed on this PC (details).

For your Microsoft 365 calendar, you sign in once in the browser and type no secret. Today you need the client id of an Entra app registration. The Microsoft 365 guide shows how to create one in a few minutes:

Terminal window
me integration add com.me.calendar.m365 --name "Work calendar" --client-id <application id>
me calendar agenda --from 2026-10-21T00:00:00-04:00 --to 2026-10-22T00:00:00-04:00

Coming soon: people only sign in. The operator registers the Microsoft app once for everyone, so you no longer pass --client-id (PR #140).

Every provider is covered in Integrations.

What Where
The install %LOCALAPPDATA%\Me (server, plugins, cli, config)
Generated secrets %LOCALAPPDATA%\Me\config\secrets.json (you and SYSTEM only)
Your CLI login %APPDATA%\me\config.json, or the file ME_CONFIG names
Data Podman volumes me-local_me-local-postgres and me-local_me-local-temporal
Restart the server Stop-ScheduledTask 'Me server'; Start-ScheduledTask 'Me server', then give it about 40 seconds
  • podman pull fails with proxyconnect tcp. A proxy leaked into the Podman machine. The installer prints the fix: podman machine ssh 'env -u HTTPS_PROXY -u https_proxy -u HTTP_PROXY -u http_proxy podman pull <image>', then run the installer again.
  • The logon task fails with “file not found” (0x80070002). This happens when install.ps1 runs inside a packaged app (for example, a Claude Code session in the desktop app), where Windows redirects %LOCALAPPDATA%. Run it from your own terminal, or pass -Root with a folder outside %LOCALAPPDATA%.
  • Workflows are refused. Temporal isn’t running. Check podman ps, and re-run install.ps1.
  • me says you are not logged in (exit 9). Run me status to see which config file it uses, then me login again.