Sandbox
@string-os/string

String framework and browser for agent Markdown

String makes Markdown into an executable surface for agents. It adds navigation, actions, state, and hints so an agent can open a page, discover what it can do, and call the next action without a separate SDK.

67 stars2 forksTypeScriptUpdated 29d ago
Who it's for

Builders who want their agent to use local files, web pages, apps, and shell sessions through one command model.

What it delivers

You can let your agent move through docs and apps with the same `/open`, `/act`, and `/info` flow instead of re-learning each surface.

What it does

One command model

Uses `/open`, `/act`, and `/info` across documents, apps, web pages, files, APIs, and shell sessions.

SFMD surfaces

Supports String Flavored Markdown, which adds lightweight navigation, action blocks, response hints, and state to normal Markdown.

CLI, daemon, and MCP access

Runs as a CLI, a daemon, or one MCP tool named `string`.

Plugin installs

Ships Claude Code and Codex plugin packages so the tool and skills can be added with plugin commands.

App and runtime management

Includes topics for installed apps, shell sessions, event inboxes, and system or agent status views.

Local event delivery

Supports local webhook events that can be read and acknowledged through the same String surface, including Claude Code channel delivery.

How to get it

  1. 1Run
    /plugin marketplace add string-os/string
    /plugin install string@string-os
  2. 2To receive local String webhook events directly inside Claude Code, launch Claude Code…
    string agent add leo --home /home/ubuntu/crew/leo
    
    STRING_AGENT_ID=leo \
    claude \
      --dangerously-load-development-channels plugin:string@string-os
  3. 3Run
    codex plugin marketplace add string-os/string
    codex plugin add string@string-os
  4. 4Run
    npm install -g @string-os/string
    string --help

README

String

String

An app framework and browser for AI agents.

String unifies apps, the web, and Markdown documents into one agent-native surface. A website can expose navigation and actions in Markdown, so an agent can use it like an app. Ordinary web pages still open as clean Markdown. Installed apps, local documents, web pages, files, APIs, and shell sessions all use the same commands.

The core loop is intentionally small:

/open  read a document, app, web page, file, or shell session
/act   call an available action
/info  understand where you are

String can run as a CLI, a daemon, or one MCP tool named string. The agent learns one surface and uses it everywhere.

Available String apps are maintained at github.com/string-os/apps.


Why

Most agent integrations grow the agent's context: another tool schema, another API manual, another set of examples. String moves that knowledge into the app or page itself.

An agent opens a page, sees what actions are available, calls one, and follows the next hint. The page may be a local Markdown file, an installed app, an agent-native website, or a normal website rendered as Markdown. The interaction is the same.

What changes:

  • Apps and web share one model. A String app and an agent-native web page expose the same surface: Markdown content, navigation, actions, state, and hints.
  • One browser for agent work. /open, /act, /info, and topics work the same for documents, apps, web pages, files, APIs, and shell sessions.
  • Self-discovery. Actions expose schemas with /act --help; responses carry next: hints; errors carry recovery hints.
  • Local command boundary. Web-hosted SFMD can call web APIs, but local shell commands run only from local files or locally installed apps.
  • Agent event inbox. Local webhooks can deliver text events to an agent, which reads and acknowledges them through the same CLI/MCP surface, or receives as a Claude Code channel notification.
  • Credentials stay scoped. App secrets are set inside app topics with /set $VAR = "...", not pasted into the agent's prompt.
  • Portable by default. A String surface is Markdown. It can live in a file, an installed package, a GitHub repo, or on the web.

String calls this format SFMD: String Flavored Markdown. It is normal Markdown plus lightweight navigation, action blocks, and response conventions.


One Surface

No SDK. No endpoint memorized. The surface tells the agent what it can do.

Open a web page as Markdown:

string main '/open https://docs.string-os.org/runtime/mcp'

Open an installed app and follow its actions:

string app:moltbook '/open'
# [actions] home, feed, read, comment, post, search
# next: /act.feed · /act.search "..."

string app:moltbook '/act.feed'
# Feed: @post-1 through @post-20
# next: /act.read @post-N

string app:moltbook '/act.read @post-3'
# ...post body...
# next: /act.comment @post "..."

The same interaction over MCP is one tool call:

{ "topic": "app:moltbook", "cmd": "/act.read @post-3" }

Install

Claude Code Plugin

/plugin marketplace add string-os/string
/plugin install string@string-os

This installs the String MCP tool and a short skill for using it. The tool is registered as server string and exposes one tool named string.

For multiple local agents or workspace-specific homes, see Agent Identity.

To receive local String webhook events directly inside Claude Code, launch Claude Code with the String plugin channel and select the local agent id:

string agent add leo --home /home/ubuntu/crew/leo

STRING_AGENT_ID=leo \
claude \
  --dangerously-load-development-channels plugin:string@string-os

That keeps the plugin-provided string MCP tool available and also pushes local events for the selected String agent into the Claude Code session. The official Discord channel can be loaded at the same time with --channels plugin:discord@claude-plugins-official.

Codex Plugin

codex plugin marketplace add string-os/string
codex plugin add string@string-os

CLI

npm install -g @string-os/string
string --help

The daemon starts automatically on first use. Default port: 3923.


Basic CLI

string main '/open ./README.md'
string main '/open https://docs.string-os.org/runtime/mcp'
string app:weather '/act.now Seoul'
string bash:dev 'pwd && ls'

Topics scope state:

TopicUse
main, notes, researchfree-form document/web sessions
app:<name>installed app session
app:<name>:<config>app session with config-scoped env
bash:<name>persistent shell session
app, tool, bash, event, system, agenthub topics for runtime views and management

Hub topics are reserved. Open them to inspect runtime state, or send management commands through their hub:

string app            # installed apps + active app sessions
string event          # event inbox + local webhook URL
string system status
string agent list

Every response is wrapped so an agent can separate String output from shell noise:

<𝒞=string:main>
...
</𝒞>

MCP

String serves MCP directly. No separate MCP package is needed.

{
  "mcpServers": {
    "string": {
      "command": "npx",
      "args": ["-y", "@string-os/string", "--mcp"]
    }
  }
}

The MCP tool takes:

{ "topic": "main", "cmd": "/info" }

For local webhook event delivery into Claude Code Remote Control channels, see Events and Local Webhooks.

Use /help, /info, and /act --help to discover what is available.


Surfaces, Not SDKs

A String surface can be:

  • a local Markdown document
  • an installed app
  • a web page that exposes Markdown navigation and actions
  • an ordinary web page rendered as Markdown
  • a shell session or file workspace

The agent uses the same commands either way. When a surface includes SFMD action blocks, it becomes executable.

---
name: weather
type: app
default: now
---

# Weather

```act.now
GET https://wttr.in/{city}?format=%l:+%C+%t+%w&m
  city, -c: string (required) "City name"
```

Install that file as an app and call it:

string main '/install --app ./weather.md'
string app:weather '/act.now Seoul'

The Markdown is the interface. The runtime handles discovery, argument parsing, execution, output framing, state, and credentials.


Docs

Build an SFMD site

Want a website that serves styled HTML to people and a clean .md twin to agents?

  • site-builder — a Claude Code / Codex plugin that scaffolds, validates, and deploys human + AI sites. Pure npx, no runtime dependency.
  • @string-os/astro-sfmd — the Astro integration it drives: every page emits HTML + a mirrored .md.

Packages

  • @string-os/string — CLI, daemon, MCP server, runtime
  • @string-os/client — HTTP/SSE client for stringd
  • @string-os/core — SFMD parser
  • @string-os/compiler — SFMD validator/compiler
  • @string-os/astro-sfmd — Astro integration for human + AI (SFMD) sites

License

MIT

Files in the repo

Repository payload25 top-level entries
  • .agents
  • .claude-plugin
  • .codex-plugin
  • .github
  • apps
  • assets
  • docs
  • packages
  • plugins
  • scripts
  • skills
  • .gitignore
  • .mcp.json
  • CHANGELOG.md
  • CODE_OF_CONDUCT.md
  • CONTRIBUTING.md
  • LICENSE
  • package.json
  • pnpm-lock.yaml
  • pnpm-workspace.yaml
  • README.md
  • RELEASING.md
  • SECURITY.md
  • skill-mcp.md
  • skill.md

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More frameworks & sdks

HKUDS/nanobotFrameworks & SDKs

Ultra-lightweight, open-source, self-hosted personal AI agent framework in Python with WebUI, tools, memory, MCP, multi-agent workflows, automation, and chat apps

48k
microsoft/
SkillOpt
microsoft/SkillOptFrameworks & SDKs

SkillOpt is a text-space optimizer that trains reusable natural-language skills for frozen LLM agents through trajectory-driven edits, validation-gated updates, and deployable best_skill.md artifacts.

17k
omnigent-ai/omnigentFrameworks & SDKs

Omnigent is an open-source AI agent framework and meta-harness: orchestrate Claude Code, Codex, Cursor, Pi, and custom agents — swap harnesses without rewriting, enforce policies and sandboxing, and collaborate in real time from any device.

9.8k
kyegomez/
OpenMythos
kyegomez/OpenMythosFrameworks & SDKs

A theoretical reconstruction of the Claude Mythos architecture, built from first principles using the available research literature.

15k
D4Vinci/ScraplingFrameworks & SDKs

🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

80k