ravi

00, Ravi

AGENTS THATWORK TOGETHERIN YOUR SLACK.

Ask in Slack for what you need, the way you'd ask a colleague. A team of AI agents plans it with you, builds the forms and trackers your team will use, and passes the work along until it's done. Ravi runs on a computer or server you control and joins your Slack as a bot you own.

Someone technical sets it up once. After that, your team works in Slack and a browser.

FOR EXAMPLE

  • Purchase requests
  • Bug reports
  • Hiring
  • Sales pipeline
  • Weekly spend
SLACK

# office

AnaWe keep losing purchase requests in DMs…

RAVI BASES · the table
Item · Amount · Status
Headset$120Requested
Booth banner$340Approved
Demo laptop$1,890Ordered
RAVI PAGES · the page

YOUR AGENTS · ON YOUR COMPUTER OR SERVER

reception · front desk dev · builds things ops · runs things

01 ASK 02 BUILD 03 SHARE 04 PICK UP 05 APPROVE
One Slack message becomes a tool your whole team uses. Scroll to follow it.

01, Ask

IT STARTS ASA SLACK MESSAGE.

Ana needs a better way to handle purchase requests, so she asks in Slack. Each channel can have its own agent looking after it.

Skip this scene
  1. 01Ana writes in #office. The reception agent, your front desk, looks after this channel.
  2. 02It writes a plan and shows it as a card. Nothing gets built until someone says yes.
  3. 03Only people you've chosen can approve a plan. Bruno, from sales, isn't one, so his click does nothing.
  4. 04Carla, their team lead, is. One click, and the plan is approved.
  5. 05Then reception hands the job to dev, the builder, who reports back when it's done or if it gets stuck.
BEFORE

# office12 members

Ana

We keep losing purchase requests in DMs. Can we get one place where everyone files them, and finance approves?

receptionAPP

Plan pending

Purchase requests: one place for everyoneWho uses it: your team at acme, signed in; no one outsideHow requests come in: a form on a pageWhere they're kept: one table, a row per requestWho sees what: everyone sees their own; supervisors see their team'sWhen one comes in: ops posts it to #finance with Approve and DeclineEvery week: a spend summary in a Slack CanvasWho does it: dev builds it, ops runs itCan't do yet: alert ops when someone comments on the page. Instead: a feedback form.

Agent: reception

ApproveRejectBruno can't approve plans

Every Slack window and page on this site is an illustration of what Ravi sends and shows. The dark panels that show what an agent is doing are a picture of the work, not a screen in Ravi. Acme and its people are made up.

AFTER

# office12 members

Ana

We keep losing purchase requests in DMs. Can we get one place where everyone files them, and finance approves?

receptionAPP

Plan pendingApprovedApproved by Carla

YOUR AGENTS · ON YOUR COMPUTER OR SERVER

reception · front desk dev · builds things starting on it Build purchase requestsfrom the approved plan ops · runs things
reports back

acme

CHANNELS

  • # office
  • # finance
  • # sales
  • # eng

APPS

  • reception
  • ops

# office12 members

Ana

We keep losing purchase requests in DMs. Can we get one place where everyone files them, and finance approves?

receptionAPP

Plan pending

Purchase requests: one place for everyoneWho uses it: your team at acme, signed in; no one outsideHow requests come in: a form on a pageWhere they're kept: one table, a row per requestWho sees what: everyone sees their own; supervisors see their team'sWhen one comes in: ops posts it to #finance with Approve and DeclineEvery week: a spend summary in a Slack CanvasWho does it: dev builds it, ops runs itCan't do yet: alert ops when someone comments on the page. Instead: a feedback form.

Agent: reception

ApproveRejectBruno can't approve plans
Plan pendingApprovedApproved by Carla

Every Slack window and page on this site is an illustration of what Ravi sends and shows. The dark panels that show what an agent is doing are a picture of the work, not a screen in Ravi. Acme and its people are made up.

YOUR AGENTS · ON YOUR COMPUTER OR SERVER

reception · front desk dev · builds things starting on it Build purchase requestsfrom the approved plan ops · runs things
reports back

Only people you allow can approve a plan. If nobody answers within five minutes, the card expires and the agent doesn't go ahead.

02, Build

FIRST THE TABLE, THEN THE PAGE.

The dev agent builds two things: the table that keeps every purchase request (Ravi Bases) and the page your team opens to file them (Ravi Pages). Nobody on your team writes code.

Skip this scene
  1. 01First, dev builds the table from the approved plan: one row for each request.
  2. 02Then the rules: each person sees their own requests, a supervisor sees the team's, and Ravi fills in who asked.
  3. 03Ravi Bases keeps the table, Ravi Pages shows it, and requests filed on the page are saved in the table.
  4. 04Then dev draws the page at your team's own link. Only people you've added to acme in Ravi can open it, after they sign in.
  5. 05When it's done, dev tells reception, the front desk, which posts the link in #office.
BUILDING

devbuilds things

Build purchase requestsfrom the approved plan

done

  1. The table
  2. The rules
  3. The page

RAVI BASES

Purchase requests

Itemwhat's needed
Amountin dollars
TeamSales, Marketing, Engineering or Support
StatusRequestedApprovedOrderedReceivedDeclined
Requested byfrom who's signed in
Supervisorfilled in by ops
Needed bya date

THE RULES

WHO CAN OPEN IT
People you've added to acme in Ravi, signed in
WHO SEES WHAT
Each person sees their own requests. A supervisor also sees the team's.
FILLED IN FOR YOU
Who asked, and the status (Requested)
WHAT PEOPLE CAN EDIT
Item, amount, team, needed by
NOBODY ON THE PAGE CAN
File a request in someone else's name

Ravi applies these rules every time someone opens the page or files a request.

RAVI BASES KEEPS THE TABLE.

RAVI PAGES SHOWS THE PAGE.

the page shows the table new requests are saved to it
READY
acme-ops.ravi.page/requests Private

Purchase requests

acme

Make it public Stays private: only people signed in to acme can see these requests.
+ New request

REQUESTED

APPROVED

ORDERED

RECEIVED

DECLINED

# office

receptionAPP

Done. File purchase requests at https://acme-ops.ravi.page/requests. Sign in with your Ravi account.

devbuilds things

Build purchase requestsfrom the approved plan

done

  1. The table
  2. The rules
  3. The page

RAVI BASES

Purchase requests

Itemwhat's needed
Amountin dollars
TeamSales, Marketing, Engineering or Support
StatusRequestedApprovedOrderedReceivedDeclined
Requested byfrom who's signed in
Supervisorfilled in by ops
Needed bya date

THE RULES

WHO CAN OPEN IT
People you've added to acme in Ravi, signed in
WHO SEES WHAT
Each person sees their own requests. A supervisor also sees the team's.
FILLED IN FOR YOU
Who asked, and the status (Requested)
WHAT PEOPLE CAN EDIT
Item, amount, team, needed by
NOBODY ON THE PAGE CAN
File a request in someone else's name

Ravi applies these rules every time someone opens the page or files a request.

RAVI BASES KEEPS THE TABLE.

RAVI PAGES SHOWS THE PAGE.

the page shows the table new requests are saved to it
acme-ops.ravi.page/requests Private

Purchase requests

acme

Make it public Stays private: only people signed in to acme can see these requests.
+ New request

REQUESTED

APPROVED

ORDERED

RECEIVED

DECLINED

dev · builds things reception · front desk

# office

receptionAPP

Done. File purchase requests at https://acme-ops.ravi.page/requests. Sign in with your Ravi account.

03, Share

ONE LINK FOR THE WHOLE TEAM.

Everyone you've added to acme in Ravi opens the same link and gets the same page. What's on it depends on who's looking.

Each teammate signs in with their own Ravi account. You add them to acme in Ravi once.

TRY THE BOARD

Viewing as

On the real page there's no switch. You sign in and see what's yours.

  1. Same link, same page. Each person signs in and sees their own requests.

  2. Carla leads Ana and Bruno, so she sees their requests too.

  3. Bruno files a request from the page. It's marked as his and set to Requested.

  4. Your team's page checks for changes every 30 seconds while it's on your screen. Other people's changes show up then.

A week later

SIGNED OUT

acme-ops.ravi.page is private to acme.

Sign in to continue.

Sign in
ANA

Showing: your requests

  • RequestedHeadset$120
  • ApprovedBooth banner$340
CARLA · SUPERVISOR

Showing: yours and your team's

  • RequestedHeadset$120
  • ApprovedBooth banner$340
  • OrderedDemo laptop$1,890
  • ReceivedLabel printer$210
  • SAME LINK · acme-ops.ravi.page/requests
  • SAME PAGE · for everyone you've added
  • OWN REQUESTS · for each person
acme-ops.ravi.page/requests Private

Purchase requests

acme

↻ Refreshes every 30 s

Showing: your requestsShowing: yours and your team's

REQUESTED111

Standing desk

$480Bruno

Marked as Bruno's · automatically

Headset

$120Ana

APPROVED101

Booth banner

$340Ana

ORDERED011

Demo laptop

$1,890Bruno

RECEIVED001

Label printer

$210Carla

DECLINED000

Request filed

acme-ops.ravi.page/requestsCarla · supervisor

REQUESTED1

Headset

$120Ana

Not here yet: the ops agent adds Carla as supervisor next.

acme-ops.ravi.page is private to acme.

Sign in to continue.

If two people edit the same request at once, the second save is stopped and the request reloads, so that person redoes their change and nothing is overwritten by accident. Ravi keeps every change in the request's history.

  • Private to acme
  • Each person sees their own
  • Your agents show you the plan first

From here, your agents keep it running: new requests reach the ops agent on their own, and approvals happen in Slack.

04, Pick Up

NOBODY HAS TO FORWARD IT.

Bruno files his request and gets on with his day. A new request reaches the ops agent on its own within moments, without anyone forwarding it.

Skip this scene
  1. 01Bruno files a request for a standing desk on the page.
  2. 02Ravi hands it to the ops agent, which is set up to watch for new requests from the page.
  3. 03It knows Carla leads Bruno's team, so it adds her as supervisor. Her page shows the request on its next refresh.
  4. 04Then it posts the request to #finance, with Approve and Decline.
ARRIVES
THE PAGE · Bruno's new request
RAVI · checks for new requests about every 15 seconds

THE OPS AGENT WATCHES FOR

  • A new request
  • In the Purchase requests table
  • Filed from the page
ops · runs things

NEW REQUEST

Standing desk · $480

Sales · filed by Bruno

Needed by Oct 30

POSTED
ops · runs things posted

Every request still waiting

  • Headset · $120 · AnaSupervisor: Carla ✓
  • Standing desk · $480 · BrunoSupervisor: Carla ✓

Carla's page shows it on its next refresh.

Card for #finance posted ✓

# finance

opsAPP

New purchase request

ItemStanding desk

Amount$480

Requested byBruno

TeamSales

Approve Decline Open requests

Needed by Oct 30

05, Approve

ONE CLICK CLOSES THE LOOP.

Carla approves where she already works: in Slack. Try it. You're Carla.

CARD

# finance

opsAPP

New purchase request

ItemStanding desk

Amount$480

Requested byBruno

TeamSales

You're Carla. Approve or decline.

In the real card this opens the page.

Needed by Oct 30

Approved by @Carla

Needed by Oct 30

1 reply

opsAPP

Approved by @Carla. Bruno's page shows it on its next refresh.

  1. Carla presses Approve in #finance.

  2. The ops agent checks it's Carla, marks the request Approved and updates the card.

  3. Bruno's page shows Approved on its next refresh.

OPS

ops · runs things

waiting for a clickworkingdone

  1. Checking who pressed: Carla approves purchases ✓
  2. Marking the request Approved
  3. Updating the card in #finance

Only Carla's click counts: the ops agent is set up to act on hers alone. Anyone else in #finance can press the buttons, but nothing changes.

RESULT · APPROVE

acme-ops.ravi.page/requests Private

Purchase requests

Viewing as Bruno

↻ 30 s

REQUESTED0

Standing desk

$480

APPROVED1

Standing desk

$480

RESULT · DECLINE

# finance

opsAPP

Declined by @Carla

Needed by Oct 30

1 reply

opsAPP

Declined by @Carla. Bruno's page shows it on its next refresh.

acme-ops.ravi.page/requests Private

Purchase requests

Viewing as Bruno

↻ 30 s

REQUESTED0

DECLINED1

Standing desk

$480

Loop closed

06, Block Kit

BUTTONS, FORMS AND CARDS IN SLACK.

Your agents can post more than text: cards with buttons and forms (Slack calls these Block Kit), a Canvas they keep up to date, and task cards with their status. Press anything.

# finance

opsAPP

Weekly supplies order

Ana put together this week's office order.

Items12

Total$640

Requested byAna

Needed byFri, Oct 16

Office supplies · ordered every Friday

1 reply

WHAT HAPPENS NEXT

done

ops · runs things

Example: you press Approve

  1. ops got your click: Approve
  2. Checking you can approve orders ✓
  3. Order approved. ops tells Ana in the thread.

Buttons can hand the click to an agent or run a fixed step with no AI. Anyone in the channel can press them; Ravi says who pressed, and you decide whose clicks count.

# finance

opsAPP

Need something for work? File a purchase request.

New purchase request

opsAPP

Thanks! Monitor · $230 is filed.

WHAT HAPPENS NEXT

done

ops · runs things

Example: you file the form

  1. ops got the form: Monitor · $230 · Support
  2. Adding it to the requests table
  3. Filed. ops thanks you in the channel.

A button can open a form right in Slack. What people type goes to the agent you choose.

Who presses Approve?

# office

receptionAPP

Plan pendingApprovedApproved by Carla

WHAT HAPPENS NEXT

going ahead

reception · front desk

Example: Carla presses Approve

  1. reception goes ahead with the plan.
Bruno

Plan pending

Plan: post a weekly spend summary to the #finance Canvas every Monday at 9.

ApproveReject
Nothing happens. Bruno can't approve plans.
Carla
Plan pendingApproved
Approved by Carla
Nobody
Plan pendingExpired — no decision in 5 minutes.

When an agent asks for a yes on its plan, this is the card it posts. Only people you allow can approve.

# finance

Weekly spend

Week of Oct 12: 7 requests approved, $3,450.

TeamApproved
Sales$2,850
Marketing$340
Support$260

Waiting

  • Headset · $120
  • Monitor · Support · $230

WHAT HAPPENS NEXT

done

ops · runs things

Example: the ops agent updates the Canvas

  1. ops updates the Canvas
  2. Standing desk approved: Sales is now $2,850
  3. Done. Slack shows the new version.

The ops agent keeps the Canvas up to date. It only goes one way: edits made by hand in Slack can be replaced the next time ops updates it.

# finance

opsAPP

RaviTask

Order: Standing desk

Status: openPriority: high

https://acme-ops.ravi.page/requests

WHAT HAPPENS NEXT

done

ops · runs things

Example: the task card

  1. ops posted this task with its status and priority.

A task card shows a request's status and priority right in Slack. Whoever sets up Ravi turns on one Slack setting for it.

07, Teams

ONE PERSON ORTHE WHOLE ORG.

Start with an agent of your own. Grow into a team of agents for everyone at work.

People
1
Agents
1
Channels
1
Pages
1

Just me

People
1
Agents
1
Channels
1
Pages
1

Start with one agent for yourself, in a Slack DM or a channel of your own. Sign in to Ravi once. Pages your agent makes are private by default: only your organization can open them, so if that's just you, only you can.

Ana assistant · helps Ana
  • CalendarPrivate
    • Tue · Dentist, 9:00
    • Thu · Invoices due
    • Sat · Dinner with Leo

    ana-home.ravi.page/calendar

The whole org

People
40
Agents
6
Channels
6
Pages
5
  1. Give each team a channel and an agent. Agents can share one Slack bot, or each get its own name and picture.
  2. Each group gets its own link, like acme-sales.ravi.page, so the sales team's pages and the hiring team's pages stay apart. Everyone who can open a link sees what's shared on it.
  3. A page can show totals and charts without the entries behind them. Any bar built from fewer than five entries is left out.
  4. Bring your spreadsheet as a CSV file; Ravi checks it before importing. After that every change is kept, and your agents' changes are recorded under the Ravi account signed in on their computer.
  5. People outside your org never open these pages. They talk to an agent that can only chat, and get a message, a Canvas or a public page with just the numbers.
  6. Each agent starts with a few basic abilities and gets only what else you allow; anything else is refused. In Slack, it only hears the channels its bot is in and messages sent to it.
  • #salessales
  • #engtriage
  • #peoplerecruiting
  • #randomno agent
  • #office· own namereception
  • #finance· own nameops
  • no channeldev · builds things

Most agents share one Slack bot. The reception and ops agents have their own, so they post under their own names.

  • Purchase requestsPrivate
    ApprovedStanding desk

    acme-ops.ravi.page/requests

  • Sales pipelinePrivate
    totals only
    • Discovery412
    • Proposal236
    • Negotiation98
    • Won63
    1 stage with fewer than 5 deals is hidden

    acme-sales.ravi.page/pipeline

    Q3 pipeline · CSV812 rows

  • Report a bugPrivate

    acme-product.ravi.page/bugs/new

    People can file a bug but can't read anyone's. Ravi fills in who sent it.

  • HiringPrivate
    totals only
    • Screening 18
    • Technical interview 11
    • Offer 6

    acme-people.ravi.page/funnel

  • #finance · Weekly spend

    Ravi posts it into Slack. Edits made in Slack don't come back.

  • This week's spendPublic
    $2,970approved this week

    acme-public.ravi.page/spend

    Just the numbers, with no table behind it. Anyone with the link can see it.

Each of these started as a message in Slack. Your agents built them, starting from a basic board or form when one fits.

08, Plan First

THEY SHOW YOUTHE PLAN FIRST.

For anything with several parts, your agents are told to read Ravi's playbook first. It walks them through six questions, and they show you the answers as a plan.

Plan · purchase requests

  1. A form on the page.
  2. One table. Each request belongs to whoever filed it.
  3. Everyone sees their own. Supervisors see their team's.
  4. The ops agent, on its own.
  5. A card in #finance with Approve and Decline.
  6. A weekly spend summary in a Slack Canvas.

When something isn't possible yet, the plan says so and offers what works instead.

09, For Builders

BUILD YOUR
OWN APP
ON RAVI.

Want your own app? Your developers can build a dashboard, an iPhone app or a Mac app on your agents and tables, with SDKs for TypeScript, Swift and Dart generated from the commands your agents use.

Ravi in the middle, connected to a team dashboard written in TypeScript, an iPhone app and a Mac app written in Swift. Dart and OpenAPI 3.1 are also available.

RAVI 750+ commands the ones your agents use

Team dashboard TypeScript

Approved this week

$3,450

  • Sales $2,850
  • Marketing $340
  • Support $260

Mac app Swift

Purchase requests
  • Headset · $120 · Requested
  • Monitor · $230 · Requested
  • Standing desk · $480 · Approved

iPhone app Swift

ops

Summarize the open requests.

2 waiting, $350 in total: Headset and Monitor.

  • TypeScript
  • Swift
  • Dart
  • OpenAPI 3.1 to make a client in another language
await ravi.sessions.send("ops", "Summarize the open requests.", { agent: "ops", wait: true })

One line from your app asks ops, the same agent your team talks to in Slack, and waits for its answer.

ZERO DRIFT

The SDK code in Ravi's repository is generated from the same list of commands your agents use. If the two ever differ by even one byte, the automated check fails.

TypeScript: @ravi-os/sdk on npm. Swift (for iPhone and Mac) and Dart: from the GitHub repository. About 35 commands stay on the command line only, and many results aren't fully typed yet. The connection your apps use is off until you turn it on, listens only on your own machine until you allow more, and each app needs a key you create for it. To reach it from a phone, set up your own secure tunnel. Apps act as the Ravi account signed in on that machine; they don't sign in each user.

10, Install

TRY IT IN YOUR SLACK.

Setup is a one-time job for someone comfortable with a terminal. After that, your team only uses Slack and a browser.

Not the one who sets things up? Send this page to whoever is.

  1. Install Ravi

    bun add -g ravi.bot

    Needs Bun and Node.js. Then run ravi setup: it installs what Ravi needs, asks for your Claude login or Anthropic API key, and starts Ravi. Then switch your first agent to Claude; the README shows how. (Setup asks its questions in Portuguese for now.)

  2. Connect your Slack

    Create a Slack app for your workspace and connect it to Ravi. You'll need permission to add an app to your Slack workspace. There's no one-click install yet; the README on GitHub links to the step-by-step guide. On Linux, Ravi keeps your Slack keys in Vault, so you'll need one.

  3. Ask in Slack

    Give a channel to your first agent and choose what it may do, such as building pages and posting in Slack. Then ask, the way you'd ask a colleague. To publish pages and tables, sign in to Ravi once.

Your agents run on your own computer or server and use Claude over the internet, so they work while that computer is on. Pages and tables are hosted by Ravi online; pages open at ravi.page. Your agents use your own Claude login or Anthropic API key, so AI usage counts there. Plan cards need agents that run on Claude. Task cards need Work Object Previews turned on in your Slack app.

GitHub npm