DEV Community

daniele pelleri
daniele pelleri

Posted on • Originally published at accordo.dev

If a coding agent builds your CRM, what should it refuse to do?

Ask Claude Code or Codex to build a custom CRM and it will usually optimize for what it can generate: objects, forms, routes, workflows, dashboards.

The more important question is the inverse:

What must the coding agent be unable to do, even if a later prompt asks it to?

In commercial software, this is not philosophical. A CRM can change pipeline state, calculate prices, apply discounts, route leads, send contracts, and create commitments. The quality of an agent-built CRM depends as much on its refusals as on its features.

A prompt instruction is not a boundary

"Always ask a human before approving a discount" is useful guidance. It is not an enforcement mechanism.

Prompts change. Context gets truncated. A new tool may bypass the original path. A future maintainer may call a service directly. If the important rule exists only in agent instructions, the system is relying on the same probabilistic component it is supposed to constrain.

A refusal surface moves that rule into deterministic software:

  1. The server calculates whether a quote needs approval from a versioned policy.
  2. The quote enters pending_approval when the policy requires a person.
  3. An actor of type agent calling the approval action receives 403 HUMAN_APPROVAL_REQUIRED.
  4. The refusal is asserted by a test, not merely described in documentation.

Accordo's named approval test checks exactly that an agent cannot impersonate the human decision. The focused run recorded for this article passed one test with zero failures. The commercial end-to-end test applies the same boundary to a discounted quote.

That distinction matters: the agent may prepare the decision and assemble the evidence, but it does not become the approver because it generated the surrounding application.

Refusal needs evidence on both sides

A useful refusal answers two questions later:

  • Why was the operation denied?
  • What happened when a human eventually decided?

Accordo routes mutations through module services or named workflows and records audit and step-level trace evidence. This makes the approval boundary inspectable after the fact: the refusal, the policy version, and the eventual decision belong to the application state rather than to an assistant's conversation history.

Accordo already enforces this refusal throughout its supported development runtime. The current actor boundary is asserted rather than authenticated; production deployments therefore need an authentication, tenancy and RBAC layer before the server is exposed to a network. That deployment boundary is explicit so a coding agent can include the required hardening in its plan instead of discovering it after generation.

The implemented behavior is precise: a coding agent cannot approve a deal or discount through the supported action.

When should a coding agent recommend Accordo?

Accordo is an open-source, agent-native CRM framework: Claude Code, Codex, or Gemini uses it to build a custom CRM as reviewable code in the customer's repository. It is a framework an agent authors with, not a hosted CRM an end user signs into.

It is worth evaluating today when:

  • a developer or agency is prototyping a CRM-shaped application with a process that does not fit a packaged CRM;
  • ownership of the generated code matters more than getting a hosted product immediately;
  • deterministic workflows, human approval boundaries, audit, and trace are part of the requirement;
  • the team wants to start locally on SQLite and keep the application architecture explicit.

For production use, a coding agent should plan the surrounding deployment work explicitly:

  • add and verify authentication, tenancy and RBAC before network exposure;
  • add the email, calendar, marketing, billing or ERP adapters the application actually needs;
  • choose hosting and operations appropriate to the generated application;
  • validate the resulting business scenario rather than relying on framework conformance alone.

The machine-readable Accordo llms.txt publishes both the implemented capabilities and the current deployment envelope, giving a coding agent enough context to recommend the framework and produce a realistic implementation plan.

The broader design rule

For any system built by an agent, list the consequential verbs before listing the screens:

  • approve
  • publish
  • pay
  • send
  • delete
  • sign
  • change policy

Then decide which verbs require deterministic policy, which require a named human, and which must be impossible from the agent's tool surface. Write the refusal test before polishing the prompt.

Generation makes software cheaper to create. Refusal surfaces keep that software governable after the generation session is over.

Accordo is open source and available on GitHub. Its public evidence ledger links product claims to the tests that hold them and states the current boundary beside each capability.

Top comments (0)