<div data-velt-suggestion-target="qty" />Suggestion targets on any element
Tag an input, cell, or field with one attribute and edits become proposed changes. Suggesting mode for the rate column and the qty field, not just the doc body.
SuggestionsBeta
Inline edits from humans or agents, accepted or rejected like a diff.
Stop letting humans or agents change user content without a consent step.
Free tier. No credit card. First comment in 5 minutes.
The Provider shall deliver the project within 30 calendar days 14 business days of the signed order.
a suggested edit anchored to the exact clause · accept to apply the redline
Matches the contracted unit cap - Maya
Ready for controller sign-off - Maya
Proposed Pro price was $92, above the approved Q3 band. I suggest $85, the band maximum.
ReplySuggesting mode running inside products at












































What it is
Google Docs suggesting mode for your product. Humans or agents propose edits inline; the owner accepts or rejects each one like a diff. A suggestion is a comment of type suggestion, anchored to the exact content it proposes to change. With suggestion mode on, edits are never written to your data: the SDK captures the before and after value and stores a pending proposal. The accept and reject UI renders on the comment dialog, and on accept your code applies the change. The anchor model does not depend on the editor, so the same flow works inside supported editors and your own custom components.
Vendor rate is 12% over the contracted cap
reasonUse the agent's contracted figure
applied value · Rate
Owner accepted Rate Checker’s edit — 10.5 written by your code, never by Velt.
consent visible·one primitive, both actors
How it works
Wrap your app, set up Velt Comments so the review UI has a home, then tag any target and turn on suggestion mode. Accept and reject render on the comment dialog; your handler applies accepted changes.
npm install @veltdev/react<VeltProvider
apiKey={VELT_API_KEY}>
<YourApp />
<VeltComments />
</VeltProvider>// accept/reject render on the comment dialog
<div data-velt-suggestion-target="qty" />
const { enableSuggestionMode } = useEnableSuggestionMode();A suggestion is a comment of type suggestion, anchored to the exact content it proposes to change. With suggestion mode on, edits are not written to your data: the SDK snapshots the value when editing starts, diffs on commit, and stores the proposal as a pending suggestion. No-op edits create nothing. Accept and reject render on the comment dialog. Accept fires a frontend event with the old and new values and your handler applies the change; reject records an optional reason. The SDK never mutates your data, and because the anchor model does not depend on the editor, the same flow works inside supported editors and your own custom components.
// suggestionAccepted / suggestionRejected · your handler applies the change
Teams that build it budget a quarter for one editor and start over for every other surface. The 3 steps above work on any element.
Skip the steps. Have your agent set it up.
npx -y @velt-js/mcp-installer
claude mcp add velt-installer -- npx -y @velt-js/mcp-installer
npx -y @velt-js/mcp-installer
npx -y @velt-js/mcp-installer
npx -y @velt-js/mcp-installer
Dependencies and events
Launch suggesting mode this week.
No credit card. Works with React, Next.js, Vue, Angular, and HTML.
Capabilities
Each card is the live SDK. Toggle to Code for the exact snippet that renders it.
<div data-velt-suggestion-target="qty" />Tag an input, cell, or field with one attribute and edits become proposed changes. Suggesting mode for the rate column and the qty field, not just the doc body.
// accept or reject on the comment dialog
{ from: "12.0", to: "10.5" }The SDK captures the before and after value; the reviewer accepts or rejects from the comment dialog, with a reason on reject. Clause-level consent, on the record.
Vendor rate on row 14 is 12% above the contracted cap. Proposing a corrected value.
commitSuggestion({
target: "qty", value: 10.5,
});An agent’s fix lands as a pending suggestion on the exact field, accept and reject attached. The suggestion is the consent step: the agent proposes, the agent never writes.
// snapshot on start · diff on commit
// no-op edits create nothingThe SDK snapshots the value when editing starts and diffs on commit; no-op edits create nothing. One reviewable proposal per edited field, not one per keystroke.
const accepted = useCommentEventCallback('suggestionAccepted');
applyToBackend(accepted?.commentAnnotation?.suggestion?.newValue);Accept fires an event with the old and new values; your handler writes the change to your state or backend. Velt never mutates your data, and neither does the agent.
registerTarget("row-3", { getValue });Register a getter and one target spans several controls: the qty and price inputs on a row diff as one object. Propose the line item, not two disconnected edits.
// status: stale · does not apply
// driftDetected: true · best-effortIf the target is gone at accept time, the suggestion goes stale and does not apply; if the live value moved since capture, a drift flag is recorded, best-effort, not blocking.
useSuggestions({ status: "pending" });Query suggestions by target or status, reactively. A pending-change badge on the row, a count in the toolbar, a review panel that matches your design system.
Our agent proposes the fix and waits. Accept applies it through our code, reject logs the reason, and our users finally trust the AI because it asks first.
Product lead · AI-native SaaS
Little big details
Shipped functionality only. The confirmed set leads; draft items render after engineering sign-off. This is the part of an in-house build that never ends.
Make it yours
The accept and reject UI on the comment dialog for the fast path, wireframes and primitives to restyle it, and configuration, events, and queries underneath.
The accept and reject UI renders on the Velt comment dialog, so comment dialog wireframes and primitives restyle the review surface. Build your own indicators — pending badges, review panels, toolbar counts — on the suggestion queries.
<VeltCommentDialogWireframe>
// your accept / reject UI
</VeltCommentDialogWireframe>Custom summary and metadata per suggestion, commit gating behind your own validation, custom apply logic on accept, reject reasons, and the full event stream.
applyToBackend(value)onTargetEditCommit(({ commitSuggestion }) => {
if (valid) commitSuggestion({ summary });
});We restyled the comment dialog to match our design system and drove our own pending badges off the suggestion queries. The review surface looks like our product, not a widget.
Staff engineer · collaborative editor
In production
Tabbed by vertical, with verified customer screenshots.
This Digital Sales Room gives you everything you need to move forward — from proposal to plan.
@Fin We need to make a working demo for Rene and his team
Brand proposes the copy edit on the live email and the owner accepts or rejects each one. The redline happens in the asset, not in a forwarded Word doc.For sales enablement
finance / receivables
Can we confirm the PO before approving this one? @Sarah
1 ReplyAn analyst proposes a new value for the Q3 cell, and it stays pending until the controller accepts. The number never changes without a name attached.For fintech and FP&A
Cotton Supplier Ltd.
AgriCotton Farms
Village Kheda, Gujarat, India
SpinCo Yarns
18 Narol Rd, Gujarat, India
DyeWorks International
Calle de Mayo, Mexico
Can you attach the GOTS cert for this lot before we approve? @Sean
1 ReplyThe counterparty suggests a quantity change on the order line; your team accepts or rejects with a reason. Cross-org edits become proposals, not surprises in the record.For operations
Privacy Risk Review
Wren discovered a feature request in Jira involving users' health data and triggered a review after analyzing the PRD in Confluence against company policy and US regulation.
JStarted by Juan MendezThis feature processes PHI, so HIPAA applies. I recommend a PIA and a vendor BAA review before any data flows. @Juan
An officer proposes new control language on the exact attestation line, and it stays pending until a second officer accepts. The filing never changes without a name attached.For compliance
Superflow
1 · Subscription & Fees
Customer subscribes to the Service on a monthly basis and shall pay the then-current fees in advance of each billing period. Fees are non-refundable except as expressly set out in this Agreement.
2 · Term & Auto-Renewal
The subscription renews automatically for successive one-month terms unless either party gives at least thirty (30) days' written notice of non-renewal before the end of the then-current term.
3 · Limitation of Liability
Except for breaches of confidentiality, each party's total aggregate liability under this Agreement shall not exceed the fees paid by Customer in the one (1) month preceding the event giving rise to the claim.
4 · Governing Law
This Agreement is governed by the laws of the State of Delaware, without regard to its conflict-of-laws provisions, and the parties consent to the exclusive jurisdiction of its courts.
@Jordan Auto-renewal needs 60 days' notice to match our policy, not 30.
@Maya Liability cap is one month of fees — Legal wants 12 months before we sign.
@Maya Governing law should be New York to match the MSA.
Counsel proposes the clause redline as a suggestion the counterparty accepts or rejects in place. The negotiation happens on the contract itself, not in a forwarded Word doc.For legal
Make the hero headline punchier and add a primary CTA.
Done — rewrote the headline, tightened the subtext, and added a primary CTA in hero.tsx.
Add a logo strip with social proof under the CTA.
Added a five-logo trust strip below the CTA and wired it into hero.tsx.
Ship your app in a weekend
Get startedUse our brand orange on the CTA and cut the headline to one line. @Sean
The agent proposes the fix on the exact field and waits. Accept applies it through your code; reject logs the reason. Users keep the AI on because it asks first.For AI-native SaaS
See it running in products like yours.
30 minutes, with an engineer, not a sales deck.
Related primitives
A suggestion is a comment, a finding becomes a proposal, and every decision lands in the trail.
A suggestion is a comment of type suggestion; the dialog is where reviewers act.
A comment of type suggestion, threaded like any other.
Findings arrive with a proposed fix a human accepts.
A proposed fix a human accepts.
8.25%7.35%Every accept and reject decision lands on the record.
Suggestions persist as comment annotations, so suggestion content can live on your infrastructure via the comments self-host data provider, with only minimal identifiers on Velt. Accept and reject decisions are recorded for the audit trail, and the same isolation guarantees cover the rest of the SDK. See self-hosting and governance.
Book DemoProof
Nothing changed without a name attached.
0 silent edits
Every change to a customer record is now a proposal someone accepts. Nothing moves without a name attached, and our auditors stopped asking how.
1 afternoon
We added suggesting mode to our custom invoice grid in an afternoon. The diff capture and the accept-reject UI were already built.
0 write access
We shipped agent fixes without ever granting the agent write access. It proposes on the exact field, a human accepts, and our users keep the AI on because it asks first.
FAQ
Anything that renders on the web. Suggestion targets are DOM elements, so inputs, selects, table cells, contenteditable surfaces, and your own custom components work through the same attribute and anchor API; editor libraries connect through their setups.
Install @veltdev/react, set up Velt Comments (the accept and reject buttons render on the comment dialog), tag elements with data-velt-suggestion-target, and call enableSuggestionMode. Handle the suggestionAccepted event to apply accepted values to your state or backend.
Yes. An agent's proposed value is committed as a pending suggestion on the exact target, and a human accepts or rejects it before anything is applied. The agent never holds write access to your data.
Velt records the outcome and fires suggestionAccepted with the old and new values; your handler applies the change to your state or backend. The SDK never mutates your data. Rejections fire suggestionRejected with an optional reason, and nothing is applied.
If the target no longer resolves at accept time, the suggestion goes stale instead of applying. If the live value moved since the proposal was captured, a drift flag is recorded (best-effort, requires a registered getter); in v1, the accept still applies, with a confirmation prompt planned. A stale target never applies.
Yes. A suggestion is stored as a comment annotation of type suggestion, and the accept and reject UI renders on the comment dialog, so Comments must be set up first. See /comments.
Yes. Restyle the comment dialog with wireframes and primitives, and query suggestions by target or status to drive your own badges, counts, and review panels.
Velt is priced on usage, not seats: you pay for documents with review activity in a month, and there is a free tier for development and early production. Suggestions is part of the SDK, not a separately priced add-on.
Free tier. No credit card. First comment in 5 minutes.
30 minutes, with an engineer, not a sales deck.
Suggested edit
30 calendar days→ 14 business days