You can talk a language model out of a rule it was merely told to follow. Vestya's hard limits run as ordinary code before any model reviews a trade. Here is each rule, and the one that isn't live yet.
By the Vestya team · Published July 29, 2026
Most AI products enforce their rules by asking nicely. The system prompt says “never exceed the user's risk limit,” and everyone hopes the model listens. The problem is well documented: language models are probabilistic, and a rule that lives in a prompt is a strong suggestion, not a constraint. Given a persuasive enough context, a model can reason its way around an instruction it was merely given in words.
That is an acceptable risk for a chatbot. It is not acceptable for money. So in Vestya, the rules that must always hold do not live in prompts at all.
When one of the specialist agents proposes a trade, the proposal first passes through a rule engine written in ordinary, deterministic code. It runs before the risk agent ever sees the proposal, and its rejections are final — there is no appeal to a model. These are the checks that run on every proposal today:
The design also specifies a worst-month drawdown ceiling, and for a long time it was the one rule with a slot in the engine that deferred rather than rejecting. It is live now. For every holding we take the worst single month it has actually posted, weight it by what that holding would be worth after the trade, and refuse anything that pushes the total past your ceiling. Assuming every asset bottoms in the same month ignores correlation and is therefore pessimistic — which is the direction we would rather be wrong in.
It needs real price history, and there are assets we cannot get it for — crypto, mainly. When that happens the rule does not quietly pass. It records that it could not run, on the decision itself. We would rather tell you a check was skipped than let you assume it was made, which is the same reason this page listed the rule while it was still deferring.
When a rule lives in code, three things become true that can never be true of a prompt. The rule is testable — we run automated tests against every cap, and a regression fails the build. The rule is inspectable — its exact behaviour is defined, not sampled. And the rule is non-negotiable — a model cannot talk its way past a function that never reads its arguments. The agents are free to be creative about what to propose. They have no vote on what is allowed.
When the engine rejects a proposal, that rejection is itself written into the permanent decision record, with the rule that fired and the numbers that tripped it. Even the refusals leave a paper trail.