The task manager your agent can drive
PerspecTask is an end-to-end encrypted task manager for planning your goals, from a single day up to your whole life. Your scripts, agents, and automations get the same access you have in the app, through a REST API, a TypeScript SDK, and a CLI built to keep token use low.
Three ways in
API, SDK, or CLI
Same tasks and same short ids underneath. Pick the surface that fits your stack.
REST API
A plain HTTPS endpoint. Bearer auth, JSON in and out. Call it from any language.
curl https://api.perspectask.com/v1/tasks \
-H "Authorization: Bearer pt_live_..."TypeScript SDK
Typed client with autocomplete and { data, error } results. For scripts, backends, and agents.
npm install @perspectask/sdkCLI
JSON by default, so it pipes cleanly and an agent can parse it directly. Ships pt and perspectask.
npm install -g @perspectask/cliWorks with the agents you already run
Running an autonomous agent like OpenClaw, Hermes, Claude Code, or Codex? Add the pt CLI as a skill and it can read, create, and schedule your tasks while you steer from the PerspecTask app. The CLI works the same way inside any agent that can run a shell command.
Built for token budgets
A minimal schema that respects your context window
Most task APIs return walls of nulls, empty arrays, and metadata you never asked for, and your agent pays for every byte. PerspecTask returns only what is actually there, so every token in your context window earns its place.
Only present fields are returned
No worked_time until a timer runs. No completion until a task has children. No created timestamp unless you ask for it. A simple task is a simple object.
{
"id": "abc",
"title": "Buy milk",
"deadline": "d-07-06-2026",
"status": "ACTIVE"
}Trees that never repeat themselves
In tree mode, a task with multiple parents is expanded once. Everywhere else it appears as just its short id string, so the relationship is preserved without re-sending the whole subtree. No duplication, no wasted tokens.
[
{
"id": "abc",
"title": "Launch v2",
"children": [
{
"id": "def",
"title": "Write docs"
},
{
"id": "ghi",
"title": "Deploy to prod"
}
]
},
{
"id": "xyz",
"title": "Prepare release",
"children": ["def"]
}
]Open tasks first, finished work out of the way
The task list hides done work by default — completed and cancelled tasks drop out so your agent only sees what's actually actionable, reclaiming context. The one exception: a completed task is kept if it's on the path to an open subtask, so you never lose the context of where live work lives. Want the full archive? Ask for it explicitly with showCompleted (--show-completed in the CLI).
pt tasks abc --tree --show-completed
pt tasks abc --tree
On the right, the completed and the cancelled are all gone. But Migration stays, even though it's COMPLETED, because its child Verify counts is still open. You keep the path to live work and lose the rest.
Need more? Opt in per request with tree, treeFull, showCreated, showCompleted, or includeEncrypted. The default stays lean.
Short ids
Three characters, not thirty-six
Every task id in a response is shortened to its minimum unique prefix,like a git commit hash. Easier for a human to read back, cheaper for an LLM to carry around.
A typical UUID
a3f3e1c2-9b7d-4e5a-8f10-1234567890ab
The same task in PerspecTask
a3f
Use the short prefix anywhere an id is accepted and the API resolves it for you. If a prefix is ever ambiguous, you get a clear 400 asking for one more character.
pt tasks a3f --tree
# fetch a whole subtree by a 3-char idDeadline shorthand
Schedule a task in a single token
One field, one short token. No date math, no ISO strings. Say when, the way a person would.
todaydue end of today
tomorrowdue tomorrow
this weekor just w
next monththe month ahead
Q3third quarter, this year
Q1 2027first quarter of 2027
W15ISO week 15
M11November this year
M3 2028March 2028
Y2029all of 2029
D23the 23rd, this month
lifetimeno deadline — someday
pt tasks create "Ship the launch post" --deadline Q3
# or with the SDK:
await pt.tasks.create({ title: "Ship the launch post", deadline: "q3" });On read, PerspecTask gives you both the canonical id (deadline) and the exact end-of-period timestamp (deadline_date), so an agent gets a clean machine value and you keep the human shorthand.
Safe by default
Hand an agent the keys, not the keys to everything
Scoped API keys let an agent run your workflow without rewriting your words, and end-to-end encrypted tasks stay private even from the API.
tasks:readList and read tasks.
tasks:writeFull create and update access.
tasks:write:metaManage status, priority, scheduling, and parents, but never edit the title or description of an existing task. Built for agents.
End-to-end encrypted tasks appear in listings so your tree stays intact, but their content is never sent over the API. Only you can decrypt them, in the app.
Point your agent at it
Create a scoped key, install the SDK or CLI, and let your automation keep your goals in order.