rivet-dev / rivet-dev/agentos

Expose native agentOS hooks/actions for unsupported core AgentOs surfaces

Open
#1,523 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Rust
Stars
4.6k
Forks
251
Avg merge
2d 15h
Merged PRs (30d)
34

Description

Problem

The native RivetKit agentOS() actor supports a serializable subset of core AgentOs, plus a few actor-level hooks/events. Some core surfaces still have no native RivetKit equivalent. Users who need them must either drop down to core AgentOs or build a custom JS actor wrapper, which means giving up the native actor package path.

This issue tracks the truly unsupported areas that should either become native actor actions, config hooks, or documented actor events.

Unsupported / needs RivetKit surface

Runtime filesystem mounting
  • mountFs(path, driver, options?)
  • unmountFs(path)

Why: useful for mounting app/session/workspace storage after VM boot. JS callback-backed drivers cannot cross into native VM config, so the native actor needs either a hook/action pattern or a native/plugin-backed alternative.

Shell / terminal lifecycle
  • openShell()
  • writeShell()
  • resizeShell()
  • closeShell()
  • connectTerminal()

Why: core AgentOS supports interactive shell/PTY workflows, but the native actor dispatcher does not currently expose matching actions. shellData exists as an event type, but the lifecycle actions are missing.

Session control and raw ACP access
  • cancelSession()
  • respondPermission()
  • setSessionMode() / getSessionModes()
  • setSessionModel()
  • setSessionThoughtLevel()
  • getSessionConfigOptions()
  • getSessionCapabilities()
  • getSessionAgentInfo()
  • rawSessionSend() / rawSend()

Why: these are core session-control APIs used for richer agent UIs and ACP integrations. Native actor users currently get create/prompt/close/persisted-events, but not the full control plane.

Session creation MCP config
  • CreateSessionOptions.mcpServers

Why: core supports attaching MCP servers per session. The native actor DTO only carries cwd/env/instruction fields today, so MCP-enabled sessions cannot be configured through native RivetKit AgentOS.

Root filesystem snapshot/export
  • snapshotRootFilesystem()

Why: useful for debugging, persistence export, tests, and workspace capture. No native actor action currently mirrors it.

Agent/session listing parity
  • listSessions()
  • listAgents()

Why: core exposes live sessions and registered agent metadata. Native actor exposes persisted sessions, but not the same live/session registry or agent registry information.

Exec/process option parity
  • execArgv()
  • full exec / spawn option objects

Why: native actor currently exposes narrower serializable process actions. Some core options and argv-style execution are not mirrored. Callback stream options should map to actor events rather than JS callbacks.

Cron parity
  • callback cron actions
  • custom scheduleDriver

Why: these are callback/object-based in core and cannot be serialized into native config. If needed in RivetKit, they need actor-level hooks or a documented replacement shape.

Host toolkits
  • toolKits

Why: core host tools use JS execute callbacks and schemas. Native actor config cannot serialize those into the VM. If supported, this likely needs an actor-level host-tool bridge/hook rather than raw config serialization.

Agent stderr hook
  • onAgentStderr

Why: core accepts a direct JS callback. Native actor should expose this through an actor hook or event if stderr streaming is expected for apps.

Notes

This is not asking to serialize arbitrary JS callbacks through AgentOsConfigJson. The likely split is:

  • serializable things become native actor actions/DTO fields;
  • stream/callback things become actor events or config hooks;
  • live JS-object features need explicit actor-layer bridges or documented unsupported status.

Related: custom user-defined actions are tracked separately in #1522.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by locating the native RivetKit agentOS dispatcher, DTO definitions, and existing actor tests, then compare their surface with the unsupported core APIs listed here. Done means each area is assigned to serializable actions or fields, actor events or hooks, an explicit bridge, or documented unsupported status.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, rust, wasm
Domain
api, backend
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.