Blog
Vektor: the task API my AI assistants run on
Vektor is the one list of work my AI assistants and Cursor all share: docs they read first, a key per agent, rules that keep them organized. Assay, my spendable-cash app, is here too.
Caleb Dorris 17 October 2026, 12:20 AM Updated 24 October 2026 7 min

On this server
They don't share a login
Both sit under /apps. Different databases, different passwords. Signing in to write this note does not sign me into either of them.
I'm building both of them like products, even though right now the user is mostly me. They're past the sketch stage. They're not launched. The front doors are public. Everything behind the sign-in stays there.
Work
Vektor
Lists for the short stuff. Projects for the work that drags notes, files, and a next step around with it.
A to-do workspace is lists of tasks. A project workspace is projects, and a project can hold notes, files, links, passwords, and its own lists. Tasks move. Search covers the whole account, which is more useful than it sounds once you've been using it for a month.
There's an API because I got tired of pasting tasks into a box for the agent. A key is shown once and then only a hash is stored. The key opens what I granted it: one workspace, one project, or one list. It can be read-only, allowed to mark things done and leave notes, or allowed to actually change things. Making a new project or a new list is a separate switch. I want a key that can update a task without also being allowed to invent a project I didn't ask for.
It can ping another system when something changes. Those pings don't include passwords. A key that can open a project can still see the passwords in that project, so I keep those grants small on purpose.
Sign-in is at calebdorris.com/apps/vektor.

The board
What's actually open
Doing, waiting, to do, done. If I move a task, the notes and the pictures go with it. That's the whole screen. I can see what's open, and an agent with a key can see the same slice and nothing past it.
The door
The door is just a sign-in
There isn't a marketing page. You hit Vektor and you're looking at a login. The product is the workspace after that. The list above is the real thing, just on demo tasks.

To-do
Lists and tasks. The thing I'll forget by Friday if I don't write it down.
Projects
Notes, files, links, passwords, and the lists that belong to one effort.
Keys
A hash, a fence around what it can open, and a setting for how much it can change.
The API
A task app built for a team of agents
The ones filing my work are mostly software: more than a dozen AI assistants plus Cursor. So I designed Vektor's API for them first.
Most task apps add an API later. I built Vektor the other way around. Assistants that watch my inbox and calendar, a weekly planning routine, and Cursor sessions in a repo all record work as it happens. If each kept its own notes, I'd have a dozen lists that disagree. So they all read and write one.
What it exposes
- Workspaces, projects, and lists, on a to-do side and a project side.
- Tasks with status, due dates, sub-tasks, notes, and images. A task can move lists and keep its notes.
- Project notes, files and folders, and reference links.
- One search across everything a key can see.
- Signed webhooks for a workspace or a single project.
- Errors that name the record and the reason, so an agent can fix its own request.
The docs are part of the API
The manual is an endpoint. It comes back as Markdown, changelog on top, with a short section on how to work. Every assistant reads it before touching anything, so a feature I ship today gets used next session.
curl -H "Authorization: Bearer vek_YOUR_KEY" \
https://example.com/vektor/api/v1/docsHouse rules
Search before creating. Anything that belongs to a bigger effort goes in a project, and an agent can start one when it needs to. One-offs stay on a to-do list. When work moves, update the same task and leave a note. That's how a six-week SEO plan for this site ended up as a file in its own project. On October 23, my work workspace alone held 10 projects and 150+ open tasks, and I can still find things.
A key per agent
Each key is fenced to one workspace, one project, or one list. It's read-only, done-and-notes, or full write, and creating projects is a separate switch. One key only opens a single venture project. When an assistant tried to make a new project with it, Vektor said no.
Agent ops
This is the work I do
An agent is only as useful as the systems it can safely reach. Designing that layer is the part I like: instructions the agents can read, keys that give each one the least it needs, and one source of truth they all share. If you want AI assistants working inside your business's tools, I build that integration layer. Start with integrations, see the custom portals and internal tools I build, or work with me.
Money
Assay
A bank balance is a liar. Half of it is already spoken for. Assay is the number that's left.
I take the cash accounts I've marked as included. If the bank sent an available balance, I use that. If it didn't, I use the current one. Then I subtract the bills due before my next payday, and I subtract whatever I've parked in a vault. That's the number on the home screen.
Cards and loans show up, because I want to see the debt, but they don't get subtracted again. A paycheck that hasn't landed yet shows up too, and it doesn't get added in. I'm not in the business of spending money I don't have yet. No payday on the account means Assay just looks thirty days out.
It has accounts, a plan, and an admin, the way a small service does. Nobody is being charged. The only plan is called Founding and it's zero dollars. Banks can connect through Plaid once I turn that on. Until then I can keep a ledger by hand and the number still works.
The front door is calebdorris.com/apps/assay.

The screen
Dark screen, one figure
The public page puts the equation on the table: cash, minus the bills before payday, minus the vaults. A vault is just money I've decided isn't free. It can sit in the same bank account. Assay stops offering it to me as if I could spend it. A goal can hang off a vault, or it can sit there on its own.
Recurring charges get picked out of the history and lined up against the next payday. If one of them is wrong I can pause it, ignore it, or type one in myself.


Pricing on the left, the product equation on the right.
The fancy live bank calls are still unwired. I'm not turning those on until I know what they cost. Day to day, the ledger doesn't need them. The thing that matters right now is the number, and the books around it.
How the number gets made
- Cash
- Accounts I've said count. Available balance if the bank sent one.
- Bills
- Due before the next payday. Thirty days out if I never set one.
- Vaults
- Set aside on purpose. Still in the bank. Not mine to spend.
- Debt
- I can see it. It doesn't get taken out of the cash a second time.
- Payday
- I can see it coming. It doesn't get added early.
Why both
One number, one list
Assay is so I stop telling myself a balance is spendable when the bills have already claimed it. Vektor is so the open work is written down somewhere, and so an agent can see a piece of it without seeing the whole account. They share a server with this site. They don't share a password. Writing these notes is a third sign-in.
The other note is Cursor, Grok, and the other agents.
Need a web developer in Nashville?
PHP, WordPress and Next.js. Free quote, and I usually reply within a couple of hours.
caleb@calebdorris.com and call or text (615) 914-1073