Repository navigation
Conversation
web2 is an attendant serving one fixed tool, `wrepl`. A reach carries one command line, and every OpenAPI spec and MCP server web2.json names answers it as if it were a CLI: `help`, `<service> help`, `<service> <command> --help`, then the call, with `--json` for a whole input and `--jq` to narrow a JSON result. The thrum sees a tendril like any other; OpenAPI, MCP and OAuth stop at this hive. - Services: OpenAPI 3 from a URL or a file, JSON or YAML, with local `$ref`s followed; MCP over stdio or streamable HTTP through rmcp, kept warm and closed when idle, relisted when a server says its tools changed. An `mcpServers` block pasted from any harness works as it is, and `web2 import` copies in the ones this machine's harnesses know. - A service only reads until web2.json turns writes on (`writes`, `allow`, `deny`). An MCP tool reads only when it says `readOnlyHint`. - Tokens live in one 0600 file. OpenAPI OAuth signs in with PKCE through a callback on 127.0.0.1 and renews itself; an MCP server's own OAuth goes through rmcp. A spec's scheme with nothing stored calls without credentials, so anonymous reads still answer. - No sampling, elicitation or roots are offered; a tool that asks for input mid-call, or turns into a task, answers that wrepl does not follow it. - web2.json is read again when it changes, and every reach is answered, a broken config and a panic included. It installs nothing on the PATH; `web2` alone is the same REPL a bloom reaches, for a person at this machine.
…s tested - `allow` and `deny` take globs (`read-*`). `web2 allow`, `web2 deny` and `web2 review` edit web2.json in place, keeping its order, and refuse a change that would break it; a service's help counts what is off. Most MCP servers do not say which tools only read, so turning theirs on is now one line at a terminal. - Tokens move to `secrets/credentials.json`, a 0700 directory, the one a builder's shell is to be kept out of. - `redirectPort` sets where a sign-in comes back to, and `WEB2_BROWSER` the program a sign-in link is handed to. - The MCP sign-in is tested end to end against an authorization server shaped as the spec has it: protected resource metadata, server metadata, client registration, PKCE and the issuer, then a call made with the stored token.
A reach from a peer humd carries the peer's `from` (#96), and web2 refuses it unless web2.json says `servePeers: true`: what web2 is signed in to is this machine's, lent to a peer's blooms only when a person says so. With the peer's humd trusting remote attendants, that is the two opt-ins a peer's bloom needs.
adiled
added a commit
that referenced
this pull request
Oct 31, 2026
web2 was left out of release.sh's lockstep list when it landed (#95), so it stayed at 0.1.0 while every other hive moved with Cargo.toml. Its version is what the bee announces (BEE_VERSION), what its MCP client names itself, and its user-agent, so it reported 0.1.0 everywhere. It now carries 0.34.0 and release.sh bumps it with the rest.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
hive/web2: the web2 world as one tendril, wrepl
web2 is an attendant serving one fixed tool,
wrepl. A reach carries one command line, and every OpenAPI spec and MCP server web2.json names answers it as if it were a CLI. The thrum sees a tendril like any other: OpenAPI, MCP and OAuth stop at this hive, and a harness that takes tools only over MCP getswreplas one tool amongbashand the forager's own.wrepl
helplists the services,<service> help [group | words]a service's commands, and<service> <command> --helpa command's flags.--name value,--name=value,--flag/--no-flag, a flag repeated for an array. Words with no flag fill the required inputs in order. Spelling is forgiven across kebab, snake and camel case.--json '{…}'gives the whole input, flags laid over it winning;--jq '<filter>'narrows a JSON result (jaq).maxOutput(32 KiB) keeps its start and its end, asbashdoes.Services
operationId, grouped by its first tag, its parameters and JSON body fields as flags, local$refs followed. The commands made from a spec are kept for a day, or untilweb2 refresh.mcpServersblock pasted from any harness works as it is.web2 importcopies in the servers Claude Code, Claude Desktop, Cursor, VS Code and Codex already know here.Reading and writing
writes,allow(write commands by name or glob,read-*),deny.readOnlyHint: true, as the MCP spec has it.web2 allow,web2 denyandweb2 review(each command that is off, turned on or left, one by one) edit web2.json in place, keeping its order, and refuse a change that would break it.Signing in
secrets/credentials.jsonin web2's state directory, mode 0600 in a 0700 directory, never in an environment, a log or an answer."env": "VAR"reads one from web2's environment instead.web2 login <service>: a token at a prompt that does not show it, or--token-stdin; an OpenAPIoauthapp through the authorization code flow with PKCE and a callback on 127.0.0.1, renewed before it expires; an MCP server's own OAuth, by its discovery and client registration, through rmcp.Not offered
input_required), or turns into a task, answers that wrepl does not follow it.The hive
buildandinstallas the bash hive has them. Nothing goes on the PATH; the install prints whereweb2is.web2alone is the same REPL a bloom reaches, for a person at this machine.Peers
servePeers: true. Otherwise a peer's reach, which carries itsfrom, is refused, saying so: what web2 is signed in to is this machine's.Known limit, with its own change to follow
bashon a builder runs as that user. They sit insecrets/so the builder (soonshell) can keep its shells out of hum's secrets, bee keys included.Verified
cargo test: 37 unit, 6 end to end against the real binary (an OpenAPI mock, an MCP server over stdio, one over HTTP with a bearer), 1 through a real humd: forager → humd → a nurse reachingwrepl→ humd →web2 serve→ an MCP server, and back, a config change mid-run included.web2 allow/deny/reviewagainst a real config, globs included.cargo clippy --all-targets -D warnings,./build(release,--locked), tools/speech.py.repos/getin under a second), DeepWiki's MCP over HTTP.