Skip to content

Built to be checked.

Handing work to Jori means handing them your repositories, your issues, your threads, and your inbox. That access comes with controls you can see and receipts you can audit.

Every tool has a mode

Every tool is Allowed outright, Blocked outright, or Ask first every time. You set which for Jori, per action, per account.

Some tools read, some act. Reading is how Jori stays useful. Acting is where you set the terms. Modes live in the console, and a change takes effect on the next run.

Replying in the thread that asked stays on, so Jori can always report back. Everything else is yours to set.

Permissionsa few of the modes you set

Search threads

Search your Gmail threads.

Allowed

Create draft

Save a Gmail draft without sending.

Allowed

Send email

Send a new email from your Gmail account.

Ask first

Create calendar event

Add an event to your Google Calendar.

Allowed

Create pull request

Create a GitHub pull request.

Ask first

Search web

Search the public web.

Blocked

Ask first means ask you

Set a tool to ask first and Jori requests before acting. Nothing runs until you approve it.

Every request carries a code. Approve it from the console, or reply with the code in the thread where the work is, and the action runs. Deny it, or let it expire, and it never does. Jori doesn't retry on their own.

Approval requested#eng on Slack

Comment on the certification issue

  • On: COP-73 · Tip-pooling certification
  • Asking Jonas which two signatures are missing
  • Posted as you

Reply YD4UEFNV in this thread, or decide here.

Every run keeps receipts

What Jori read, what they did, what they asked: timestamped, on every run.

Every run lives in the console with what triggered it, the tools it used, what it produced, and the folder it was counted in. When Jori splits work into subtasks, each one links back to the run that started it.

A receipt is the record of what ran, not a summary written afterwards.

Activity

Task
Every Monday, read the Customer renewals table. For each row past its renewal date where Paid is No, post one reminder in @Slack #finance naming the owner and the amount, following /reminders. Then set Reminded to Yes on that row and finish with a one-line summary.
Schedule
Mondays at 08:00 Europe/Stockholm
Folder
Renewals
Tools3
Web search
Blocked
Outcome
Three reminders sent: Harbor House, Beacon Works, Larkspur Hotels. Rows updated.
Log
13 events
  1. Run started
  2. Model step completed
    in 4.2K · out 180 · total 4.4K · $0.01
    3s
  3. List table rows
    Customer renewals·4 rows
    0s
  4. Model step completed
    in 12K · out 1K · total 13K · $0.03
    5s
  5. Model step completed
    in 13.1K · out 260 · total 13.4K · $0.03
    3s
  6. Model step completed
    in 13.6K · out 90 · total 13.7K · $0.03
    2s
  7. Run completed

Showing 1–10 of 10 runs

Acts as you, never past you

Jori works with the accounts you connect, with the access you grant. Nothing else.

Your accounts, as you
Every action goes through an OAuth grant you approved, integration by integration. Revoke a grant and the access ends with it.
Your context, or the organization's
Work you keep to yourself runs with your integrations. Work shared past you runs with the organization's, never your own.
Subtasks inherit less, never more
Jori can split a job into subtasks. A subtask can never hold access its parent lacks.

Who sees what

Only you, specific people, specific teams, or everyone in the organization. Set it on a folder or an item, and the tree enforces it.

The folder is the ceiling
Nothing inside a folder reaches further than the folder does. Sharing a table wider than its folder changes nothing until the folder allows it.
Links carry their own secret
A share link opens a read-only page. Its secret rides in the URL fragment, it expires on a clock you choose, and you can revoke it any time.

Some things are structural

Not settings, and not promises. The way Jori is built.

Unattended runs can't use ask-first tools
Scheduled and event runs never touch a tool you've gated. Anything that needs your sign-off waits for a run with you in it.
The web is off until you turn it on
Web search and fetch are granted per job, never assumed.
What Jori reads is evidence, not instructions
Text inside emails, pages, and tickets can't redirect Jori, grant permission, or change the task. Only you can.

Where your data goes, and doesn't

Short list, plain words.

Stored in your region
Choose an EU or US workspace and Jori keeps your chats, files and workspace records there. Some features use services outside it, including web search, code execution and billing.
Subprocessors and service providers
  • Convex Stores the data, including sign-in sessions.

  • Vercel Hosts the application and serves requests through its CDN.

  • E2B Runs sandboxed work.

  • Bird Delivers Jori's email.

  • Exa Processes web-search queries and fetches requested pages.

  • OpenRouter Routes model calls to the provider.

  • Google Cloud Processes image-generation prompts and creates images.

  • PostHog Measures website and product usage.

  • Stripe Handles billing and payments, including its own legal obligations.

Never used for training
Your data is never used to train models.
GDPR
Jori is built to comply with GDPR. Data processing agreements are available from launch.
Audits
Independent security audits are planned. We'll publish the results when they're done.

Opening to a few teams at a time.

Set the modes, watch the receipts, expand from there. Tell us what you'd hand over first.