scion-web-serving
Skill2.1k starsChanged 2 days agoApache-2.0View on GitHub
How to serve a web page, app, API or other HTTP service from inside your agent so a person or program can reach it through the Hub's port proxy: scion expose and unexpose, the URL to hand over, what the proxy carries, and scion tunnel for full apps. The link serves web protocols only; for a non-HTTP port, point the person to scion tunnel. Use before running scion expose. For web pages and apps, also read references/web-apps.md.
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 0 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
Run the service on 127.0.0.1 on a free port (1024 or above.
- Very specific: line 28
Check it works the way the person will use it (see What the proxy carries.
≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Serving web content from your agent through the port proxy
Services inside your agent are not reachable from outside it. scion expose
registers a local port with the Hub, which then serves it at a URL that
people with access to your agent can open.
The link serves web protocols only (HTTP, and WebSockets where supported; see
below). For a non-HTTP port (a database, a debugger, SSH or another TCP
service), the person uses scion tunnel instead, and the port must stay
exposed (see Full apps: scion tunnel).
Steps
- Run the service on
127.0.0.1on a free port (1024 or above; 9810 and 18380 cannot be exposed). Only loopback services can be exposed. - Run:
scion expose <port> --label "<what it is>" - Check it works the way the person will use it (see What the proxy carries; for pages, references/web-apps.md).
- Give the person the URL exactly as printed, including the trailing
/. Do not hand out tokens, and do not build the URL by hand.
Commands
scion expose <port> --label "<what it is>"exposes a port and prints its URL. Exposing a port that is already exposed succeeds and prints the same URL; it does not change the label (unexpose and expose again to relabel).scion expose --listlists your exposed ports with their labels and URLs, and whether auto-expose is on.scion unexpose <port>stops exposing a port. It succeeds if the port was not exposed. If auto-expose is on, a port that is still listening may be exposed again on its next scan.- An agent can have at most 10 ports exposed at once. Unexpose ports you no longer need.
- These commands work only inside an agent with a Hub connection.
What the proxy carries
- HTTP requests of any method, with the path below the URL and the query
string passed through to your service. Programs such as scripts and
curlcan call the URL too, with the Hub credentials of someone who has access to the agent. - Your service does not learn who is calling. Do not build a login on top of the link.
- WebSockets and streamed responses (for example server-sent events) work
only when the Hub runs its conduit transport, the same setting
scion tunnelneeds. Without it, a WebSocket request is refused with an error, each response is delivered whole once your service has finished it, and request bodies are limited to 32 MiB. - Your service must start answering within 60 seconds (the Hub's default), or the caller gets a timeout error. Without the conduit transport, the whole response must arrive within that time.
- What a page opened in a browser through the link can load depends on the Hub: with its page view on, the page's relative URLs load; with it off, the page can only use what is inside it. See references/web-apps.md before serving a web page or app.
Full apps: scion tunnel
For a full multi-file web app, a dev server, or anything the proxy does not
carry, the person can run scion tunnel on their own machine with the scion
CLI, if their Hub has scion tunnel turned on and they have port access to
the agent. Keep the port exposed with scion expose <port> (the tunnel only
reaches exposed ports), then suggest:
scion tunnel <agent> --port <port>The service then opens on a local port on their machine and works as it does inside the agent, for any protocol. See https://googlecloudplatform.github.io/scion/hosted/user/port-forwarding/
Web pages and apps
For anything a person opens in a browser through the link, read references/web-apps.md: what loads with and without the Hub's page view, build settings, what does not work in a page, routing, and how to verify it honestly.
Trending
More talk lately.about the whole repository
Who's talking about GoogleCloudPlatform/scion
- @jauntywunderkind.bsky.social“A lot of similar ish things keep rolling out from Google. Scion, github.com/GoogleCloudP...”Bluesky · May 21, 2026 · 3 likes
- jdx/mise“fix(go): Query module proxy directly for version resolution”GitHub · Apr 9, 2026 · 2 reactions
- ptone/scion“fix(broker): skip docker runtime initialization when docker binary is unavailable”GitHub · Jul 12, 2026 · 1 reactions
- @jauntywunderkind.bsky.social“+1 more multi-agent system. Scion looking pretty good, covering all the necessary pieces? I appreciate …”Bluesky · Apr 9, 2026 · 1 likes
- shunkakinoki/dotfiles“chore: update dependencies”GitHub · Apr 8, 2026 · 1 reactions
The biggest 5 of 52 mentions linking to the repository that our crawl found. Each line is their own headline.
See all 52
Talked about on GitHub and Bluesky (52 times).
On GitHub · 50
- Apr 9, 2026fix(go): Query module proxy directly for version resolution — jdx/mise2 reactions · 3 comments
- Jul 12, 2026fix(broker): skip docker runtime initialization when docker binary is unavailable — ptone/scion1 reaction · 1 comment
- Apr 8, 2026chore: update dependencies — shunkakinoki/dotfiles1 reaction · 3 comments
- Apr 2, 2026feat(templates): replace bootstrap container sync with direct server-side import — ptone/scion1 reaction
- Oct 28, 2026pkg/runtime: TestCloudRunSandboxRun_SecretPrecedence can fail in TempDir cleanup while sandbox watchers still run — ptone/scion0 reactions
45 more on GitHub
- Oct 27, 2026Harden the shared closed-set caller-guard helper (moduleReferences/moduleFieldUses) — ptone/scion0 reactions
- Oct 22, 2026hub: move the maintenance executors to pkg/hub/maintenance — ptone/scion0 reactions · 1 comment
- Oct 22, 2026test flake: runtimebroker TestPTYClassifier_RealTmuxAttachEnd detach-client times out — ptone/scion0 reactions
- Oct 22, 2026flaky test: hub reincarnate force-move refusal test fails intermittently on main — ptone/scion0 reactions · 3 comments
- Oct 20, 2026main red: image build fails, scion-base and omni Dockerfiles do not copy internal/ (needed since #3852) — ptone/scion0 reactions
- Oct 19, 2026flake: pkg/conduit/relay TestBrokerAdmissionClosesOlderIncarnation times out waiting for the older-incarnation session — ptone/scion0 reactions · 1 comment
- Oct 19, 2026test flake: pkg/conduit/relay TestRelayNotifyGrantKeysChanged sent on 0 sessions, want 1 — ptone/scion0 reactions · 1 comment
- Oct 15, 2026runtimebroker: TestAsyncCreate_WaitsForPredecessorCleanupThenAccepts is flaky — ptone/scion0 reactions
- Oct 15, 2026flake: TestSetAdmitting (pkg/conduit/relay) times out waiting for GoAway to the open session — ptone/scion0 reactions · 5 comments
- Oct 14, 2026server: resolve a relative dev_token_file against the global config directory — ptone/scion0 reactions · 1 comment
- Oct 13, 2026agent: template env fallback suppresses every harness-config auth-metadata env key (ptone/scion#4968) — ptone/scion0 reactions · 2 comments
- Oct 13, 2026pkg/runtime TestDockerRuntime_RepairAgentHomeOwnershipSweepFailures/invalid_id flakes on hex container names — ptone/scion0 reactions
- Oct 13, 2026hub: name the telemetry-enabled annotation by constant in comments (fix red main CI) — ptone/scion0 reactions · 1 comment
- Oct 12, 2026cli: hub link records link entries; server start registers the local hub; hub status names the hub — ptone/scion0 reactions · 1 comment
- Oct 12, 2026config: prefer podman, then docker, then Apple container on macOS — ptone/scion0 reactions · 1 comment
- Oct 12, 2026feat(doctor): show the hub health summary in scion doctor (ptone/scion#4727) — ptone/scion0 reactions · 1 comment
- Oct 12, 2026feat(hub): thread groups API, authorization and chat.thread_group events (ptone/scion#4424 phase 2) — ptone/scion0 reactions · 1 comment
- Oct 12, 2026test(artifacts/remotefetch): TestFetchTimeouts slow-server case intermittently reports connect_failed instead of timeout — ptone/scion0 reactions · 3 comments
- Oct 12, 2026cli: current hub and project with 'scion project use' (alias 'scion use') — ptone/scion0 reactions · 1 comment
- Oct 12, 2026test(conduit/relay): TestBridgeCancelDuringOpening4499BothLegs fails intermittently (late Accept returns nil) — ptone/scion0 reactions
- Oct 11, 2026test(agent): count only the deadline Warn in TestWaitHarnessReady_DeadlineRememberedPerNonce — ptone/scion0 reactions · 1 comment
- Oct 11, 2026hub: migrate membership loss and broker reservation tests to the store fault switch — ptone/scion0 reactions · 1 comment
- Oct 11, 2026templates: ignore environment keys in templates (ptone/scion#4524) — ptone/scion0 reactions · 4 comments
- Oct 11, 2026Local-mode removal phase 2a: unlink, cleanup-only delete, hub-check hints, import keeps idle agents stopped — ptone/scion0 reactions · 1 comment
- Oct 11, 2026hub: move API error and JSON helpers to pkg/hub/apierr (generated by hack/pkgmove) — ptone/scion0 reactions · 1 comment
- Oct 10, 2026hub tests: move shared test-server and request helpers into server_helpers_test.go — ptone/scion0 reactions · 1 comment
- Oct 10, 2026test(hub): run handlers_broker tests in parallel — ptone/scion0 reactions · 1 comment
- Oct 10, 2026fix(hub): limit web chat store table-existence checks to the current schema — ptone/scion0 reactions · 1 comment
- Oct 10, 2026test(hub): run federation and scheduler tests in parallel (pilot wave 1) — ptone/scion0 reactions · 1 comment
- Oct 9, 2026Flaky test: pkg/artifacts TestViewSandboxBrowserProbe/framed_as_the_web_UI_frames_it (CSP report timing) — ptone/scion0 reactions
- Oct 9, 2026Flaky e2e: chat palette input after reopen becomes the new query — ptone/scion0 reactions · 1 comment
- Oct 9, 2026hub tests: install the workspace record store through the store fault switch (ptone/scion#4068) — ptone/scion0 reactions · 1 comment
- Oct 9, 2026Flaky test: pkg/hub TestScheduledSend_TwoServersOneSQLiteFile_SecondServerTakesTheRest — ptone/scion0 reactions
- Oct 8, 2026scion version in the Dockerfile.hub image reports "commit unknown" — ptone/scion0 reactions
- Oct 8, 2026docs(hub): recover deleted built-ins by re-importing from URL (ptone/scion#3544) — ptone/scion0 reactions
- Oct 6, 2026fix(sciontool): write hook response before telemetry and bound hook export — ptone/scion0 reactions
- Oct 6, 2026fix(sciontool): write hook response before telemetry and bound hook export — ptone/scion0 reactions
- Oct 6, 2026flake: TestReaper_H2_OutageRecovery_ResumingAndSilentBroker reaps nothing on final tick (pkg/store/entadapter) — ptone/scion0 reactions · 1 comment
- Oct 6, 2026flake: TestBridgeLateAcceptCleanedUp 'target has 1 open streams after late accept' (pkg/conduit/relay) — ptone/scion0 reactions
- Oct 6, 2026flake: TestSuspendedPage_HeadlessBrowser_ZeroFanOut websocket url timeout in pkg/hub SQLite Tests — ptone/scion0 reactions · 1 comment
- Oct 3, 2026docs: qualify attach UAT reach as built-in project roles (super-admin and custom roles also authorize) — ptone/scion0 reactions
- Oct 2, 2026test: cover keys API and raw-bridge gaps from the 4.1 plan — ptone/scion0 reactions · 1 comment
- Oct 1, 2026fix(store): SQLite store boundary in UTC (tz-refactor task 2) — ptone/scion0 reactions · 1 comment
- Oct 1, 2026feat(authz): grant agent.port_access to project owners and admins — ptone/scion0 reactions · 1 comment
- Sep 30, 2026ci: Build & Test vet fails on main after GoogleCloudPlatform/scion#2088 (authzTestSetup undefined under -tags no_sqlite) — ptone/scion0 reactions · 1 comment
On Bluesky · 2
- May 21, 2026A lot of similar ish things keep rolling out from Google. Scion, github.com/GoogleCloudP... — @jauntywunderkind.bsky.social3 likes and reposts · 1 reply
- Apr 9, 2026+1 more multi-agent system. Scion looking pretty good, covering all the necessary pieces? I appreciate their runtime flexibility, that… — @jauntywunderkind.bsky.social1 likes and repost · 2 replies
In this repository14 other files it gives its agents.
- AGENTS.mdAGENTS.md
- docs-site/AGENTS.mdAGENTS.md
- examples/adk_scion_agent/templates/adk/agents.mdAGENTS.md
- examples/amp/templates/amp/agents.mdAGENTS.md
- pkg/config/embeds/templates/default/agents.mdAGENTS.md
- web/AGENTS.mdAGENTS.md
- git-operationsSkill
- git-sandboxSkill
- scion-agent-manageSkill
- scion-cli-operationsSkill
- scion-conversationSkill
- scion-messagingSkill
- scion-schedulerSkill
- team-creationSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

