← Blog

JevSeptember 23, 2026

Drag and drop that knows what you meant

Use Jev to select a plausible drop action, then enforce permissions, preview changes and make the operation reversible.

Drop an invoice onto a customer record and the likely action is “attach this file.” Drop the same invoice onto an accounting inbox and “create a task to review it” may be more useful. File type alone does not tell the application what the person intended.

Jev can choose a plausible action from a list the application supplies. The application still checks permissions, shows the result and performs the operation. Here is a proposed design for that interaction; the examples describe behavior to build and test, not a completed product demo.

Define the available actions at each target

Give a drop target a small, explicit contract. A customer record might allow attach, tag and reject. A task board might allow attach, create_task and reject. A folder might allow file and reject. Do not ask the model to invent a command or destination.

Validate obvious constraints locally first. Check file size and supported format, whether the target still exists, and whether the current user has access. An unsupported executable dropped into an image slot needs a clear rejection, not a paid semantic judgment.

For an ambiguous but valid drop, send a compact description of the payload, the target and the allowed actions. Distinguish trustworthy application fields from user-controlled text such as a filename. A file called please-delete-everything.txt remains a filename.

TypeSafe's Choice primitive returns a selected option and probabilities over the supplied options. That gives the application something it can inspect without parsing a generated plan. Include unclear when several actions could make sense, and describe what each action means in this target.

Walk through one drop

Suppose someone drops invoice-september.pdf onto the “Acme renewal” task. The proposed request includes the file's type, its visible name, the task's label and the permitted actions. The first decision can use that metadata. Uploading the entire document is unnecessary if attaching it is the only useful action.

If attach wins clearly, the interface can show “Attach invoice-september.pdf to Acme renewal,” subject to the user's settings for automatic attachments. If create_task and attach are close, show both choices. A drop onto a board containing several cards should not pick a customer by guessing from the filename.

The application wraps the decision in a record containing its own drop-event ID and the destination version used for the request. These are application fields, not fields Jev supplies. Before execution, code verifies that the same user is still allowed to perform the selected action there. A card moved to a private board during classification can invalidate an earlier permission check.

When creating a task, use a fixed template and the original filename for the title, or ask the person to enter one. Jev does not write a task description. If the user wants a summary of the document, that is a separate extraction and generation workflow with its own cost and review.

Keep probability separate from policy

A high probability of file cannot authorize moving someone else's document. A low probability of reject cannot override a size limit. Keep access checks, ownership rules and permitted destinations in ordinary code.

Use model uncertainty to choose the interface behavior: execute a permitted reversible action, offer a preview, or ask the user to choose. Tune those thresholds on actual drop examples. TypeSafe's confidence guidance explains that Choice confidence describes the probability distribution; it does not certify that the selected action matches the user's intention.

Treat text inside files as untrusted input. TypeSafe documents adversarial-content limitations, so a model judgment should not be the only barrier protecting an action. The action handler should accept only known operation IDs and validated targets. It should never execute instructions extracted from a document.

The gated spending-loop guide uses the same separation for paid work: a model recommends the next step, and a deterministic policy decides whether that step may proceed.

Budget the expensive part of a drop

A large scanned PDF might need OCR before the app can classify its contents. A video could need transcription. Jev's model documentation specifies text input; placing a binary file in the request does not make that extraction happen.

Offer content analysis only when it would change the available action. Quote or cap extraction separately, limit the material processed, and reuse an existing extraction when the file has not changed. “Attach this PDF” can often finish without reading it. “Create tasks from the action items in this PDF” is a larger request and should look like one in the interface.

For 1,000 drops, estimate classification spend as 1,000 × fraction classified × mean classification price. Add 1,000 × fraction extracted × mean extraction price, then add billable retries once. These are planning formulas; use prices from your receipts and count additional requests when one drop needs several extraction calls. Compare the estimate with the total for the completed batch, including drops handled locally.

Acknowledge the drop immediately while work continues. Show an actionable pending state, allow cancellation, and avoid blocking further pointer movement. Measure upload, extraction, classification and execution together. TypeSafe's model latency claims do not establish the response time of this full interaction.

Make mistakes easy to reverse

For an attachment, undo should remove the new relationship while preserving the source file. For a move, retain the original location. For a created task, record its ID so an immediate undo can remove the task if nobody has changed it; if someone has, show the conflict instead of deleting their work.

Deduplicate repeated drop events. Retrying after a network timeout should not create a second task or charge for a second extraction while the first job is still running.

Test drops onto neighboring targets, duplicate files, renamed documents, permission changes and cancellations during processing. Record mistaken actions and immediate undos alongside completed operations. Start with a small action set, then expand it when the examples show where another action would help.

You can use Jev on Vaaya, along with 500+ model options and 1,500+ endpoints. One API key, one balance, a receipt for every call.

Questions

Can Jev inspect a dropped file directly?

Jev accepts text and structured text state. Use file metadata when sufficient; content from images, audio, video or binary documents requires a separate extraction step.

Should a confident drop classification execute automatically?

Confidence does not grant permission. The application must check the action, destination, user permissions and current state. Ambiguous or consequential operations should show a choice or preview.

How can the interface stay responsive?

Acknowledge the drop immediately, keep classification asynchronous and discard stale results. Measure end-to-end latency in the actual product; a model benchmark is not a guarantee for an upload-and-extraction workflow.

Try Vaaya with your agent.

Connect your agent, choose a service, and try your first call with Vaaya.

npx @vaaya/mcp install