Business software for AI agents: how to tell whether it holds up
An AI CRM used to mean a CRM with built-in AI. With agents like Claude Code, Codex and Cursor, it increasingly means business software that your own agent can run: clients, orders, invoices and payments. That raises one question before anything else: can it do so safely? In July 2025, the AI agent of the development service Replit deleted a user's production database during an explicit code freeze. It then claimed a restore was impossible, although a backup existed. Replit responded by separating development and production databases automatically (heise online, 25 Jul 2025). The lesson: an instruction in a prompt is not a lock. Whether an agent can do damage depends on the software it operates. In business software, a mistake does not stay in the code, it reaches your client. The eight checks below apply to any software you hand to an agent. At the end you see how Time Momentum handles each one.
1. An interface the agent can read
An agent that clicks through screens or scrapes HTML is guessing. Check for a command line or API that returns JSON and exposes its own schema: which commands exist, which fields are required, which values are allowed. Errors should be machine-readable too, with a code that tells the agent whether to fix the call, wait or ask you.
Check coverage as well. Whatever only works in the UI, the agent does by detour or not at all.
2. Separate permissions
The agent needs a key of its own that you can revoke at any time, not your password. Better still if the key is exchanged for a short-lived token instead of travelling with every request.
Some actions do not belong in an agent's hands: creating new keys, deleting the account, changing the password. The software should block them on the server for agent access, not merely advise against them in the docs.
3. Confirmation for anything irreversible
An issued invoice cannot be taken back, only cancelled. The software should mark such steps as destructive and run them only with explicit confirmation. That confirmation has to live in the tool itself; a sentence in the prompt did not protect the database at Replit.
4. Dry run
Before the agent changes anything important, it should be able to show you exactly what it would send: method, address, body. You then approve what you have seen rather than an intention in words.
5. Idempotency
Agents retry. If the connection drops, the agent tries again, and without protection the time entry or payment ends up in the system twice. Check whether creating a record accepts an ID of your own that lets the server recognise a retry, and whether batch operations succeed completely or not at all. Where a step must not be repeated, the error should say so.
6. Traceable logs
Afterwards you want to know what happened. That means every action is a readable command you can run yourself, requests can be logged on demand without exposing the key, and you can see which key was active when. One key per agent makes this unambiguous.
7. Undo
Mistakes happen. What matters is how they are fixed: edit or delete drafts, correct bookings, cancel what was issued, with a record rather than a silent overwrite. Anything already billed should be locked, so that a correction in one place does not change a finished invoice.
8. Plan limits
When the agent hits a limit, such as a feature outside your plan or too many requests, the software should say so clearly: with a reason and whether waiting helps or you need to decide. An agent that mistakes a limit for an error keeps retrying or looks for a workaround.
The eight checks in Time Momentum
Your agent runs Time Momentum through the command line tm.
- Which commands exist, which are destructive?
tm --json - Which fields does an invoice take?
tm schema invoices --json - Show me the request before you issue it
tm invoices finalize <invoice-id> --dry-run - Looks good, issue it
tm invoices finalize <invoice-id> --yes - Log the 90 minutes from this morning
tm timers add --project-id <project-id> --started-at "today 09:00" --duration 1:30 --client-id <uuid> - Cancel the invoice
tm invoices cancel <invoice-id> --reason "Wrong service period" --yes - Which key was active last?
tm api-keys list
Agent access is part of Pro.
| Check | In Time Momentum |
|---|---|
| 1. Interface | Every API operation has exactly one tm command, and a test checks this with every change. Output and errors as JSON, tm schema lists commands and fields, and the exit code tells the agent whether to fix the call, ask you, wait or retry. |
| 2. Separate permissions | One API key per agent, created in the web app and revocable at any time. tm exchanges it for a token valid for one hour; revoking the key ends the session immediately. Creating keys and deleting the account are blocked on the server for this access. A read key reaches only selected read routes and the timers. |
| 3. Confirmation | Issuing, cancelling, deleting and revoking are marked destructive. In a terminal, tm asks; an agent needs an explicit --yes, otherwise tm stops without sending anything. The server rejects an e-invoice with missing mandatory details, and it stays a draft. |
| 4. Dry run | --dry-run shows the method, address and body of the request without sending it and without the key. |
| 5. Idempotency | Time entries take an ID of your own (--client-id), so retries create no duplicates. A combined payment across several invoices succeeds completely or not at all. If building an invoice fails after the draft exists, the error names the draft to continue with. |
| 6. Logs | Every action is a readable command you can run yourself. --verbose logs every request, never the key or token. The key list shows when each key was last used. There is no separate activity log per agent. |
| 7. Undo | Drafts can be edited and deleted, payments corrected or removed. By default, an issued invoice can only be cancelled, with its own cancellation document. Time on issued invoices and finalized timesheets is locked. |
| 8. Plan limits | A Pro feature without Pro returns upgrade_required naming the feature, too many requests return rate_limited with a wait time. The exit code tells the agent whether to ask you or wait. |
What no software does for you
Give every agent its own key with as few permissions as needed, a read key where reading is enough. Allow anything irreversible only when you ask for it, and look at the dry run before you approve. Agent access to Time Momentum is part of Pro.
The best CRM for AI agents
What people mean by a CRM for AI agents, and where the large CRMs and Time Momentum fit.
Read guideMCP vs. CLI for AI agents
Why a command line often suits agents better than an MCP server.
Read guide
Frequently asked questions
What is an AI CRM?
Either a CRM with built-in AI features, such as drafted emails or lead scoring, or a CRM that your own AI agent can operate through an API, an MCP server or a command line. This guide is about the second kind.
Why did the Replit agent delete the database?
According to the reports, it ran the database command npm run db:push during a code freeze, without permission. At the time, preview, tests and production shared the same database (heise online). The instruction not to change anything lived only in the conversation, not in the software.
Is it enough to tell the agent not to delete anything?
No. A prompt is a request, not a lock. Only limits the server enforces protect you: missing permissions, required confirmation, locked billed data.
What if my agent gets something wrong in Time Momentum?
You edit or delete drafts, correct payments and cancel an issued invoice with its own cancellation document. Billed time stays locked throughout.
Let your agent bill safely
- 30 days of Pro
- No credit card
- Then continue on Free