From 07a5930e9f83f458558a8d1e7032f5a8aa65a0df Mon Sep 17 00:00:00 2001 From: Ed Snible Date: Wed, 14 Oct 2026 12:59:12 -0400 Subject: [PATCH] docs: Document the installer at www.rossoctl.dev rossoctl/.github#130 serves scripts/install.sh at https://www.rossoctl.dev/cortex/install.sh, synced from main on every site deploy. Make that the documented one-liner: install.sh's header and --help, the README quick start, CONTRIBUTING's release-candidate example, agentop's "nothing is installed" fix, the release notes, and the README animation (regenerated from demo.yaml). The raw.githubusercontent.com URL stays in the README as the one alternate, and wherever the repo must not depend on the site being current: install.sh's own re-exec fetches and its no-setup recovery hint, and CONTRIBUTING's --ref=main example, which runs the piped copy itself and so would run the site's possibly day-old one. agentop's one-liner also stops naming authbridge/install.sh, which only worked through the v0.7.0 redirect script. Refs #1354 Assisted-By: Claude (Anthropic AI) Signed-off-by: Ed Snible --- .github/workflows/release-binaries.yaml | 4 +- CONTRIBUTING.md | 2 +- README.md | 6 +- cmd/agentop/setup_step_binaries.go | 2 +- docs/assets/cortex-demo.svg | 76 ++++++++++++------------- scripts/install.sh | 7 ++- scripts/readme-demo/demo.yaml | 2 +- 7 files changed, 51 insertions(+), 48 deletions(-) diff --git a/.github/workflows/release-binaries.yaml b/.github/workflows/release-binaries.yaml index 916d6dc47..407d7ead6 100644 --- a/.github/workflows/release-binaries.yaml +++ b/.github/workflows/release-binaries.yaml @@ -239,7 +239,7 @@ jobs: if [ -n "${prerelease}" ]; then add '' add 'This is a prerelease: the plain one-liner does not install it. To try it:' - add " curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh -s -- --ref=${TAG}" + add " curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh -s -- --ref=${TAG}" fi # The rolling release is not a release, and its notes should not read like # one — someone landing on it from a search result needs to know that @@ -249,7 +249,7 @@ jobs: add 'Unreleased build from the tip of `main`, rebuilt on every merge. Not a release.' add '' add 'Install with:' - add ' curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh -s -- --ref=main' + add ' curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh -s -- --ref=main' add '' add 'Each binary reports its own build (`agentop --version` -> `main-`). For a' add 'supported install, use the plain one-liner, which installs the newest stable release.' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6ba07e224..97fb99fac 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -215,7 +215,7 @@ Testers install it by name — the release page prints the same command — and one-liner takes them back to the newest stable release afterwards: ```sh -curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh \ +curl -fsSL https://www.rossoctl.dev/cortex/install.sh \ | sh -s -- --ref=v0.9.0-rc.1 ``` diff --git a/README.md b/README.md index d467a18ed..e48fe03fa 100644 --- a/README.md +++ b/README.md @@ -23,10 +23,12 @@ One binary, no Kubernetes. macOS or Linux, amd64 or arm64. Change both, or they drift — the --ref wording already did once. --> ```sh -curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh +curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh ``` -Setup lists every change it will make, and asks once. +Setup lists every change it will make, and asks once. If rossoctl.dev is unreachable +from where you are, the same script is served straight from this repository, at +`https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh`. Then connect your agent — once, in a new terminal. The table below has each command. diff --git a/cmd/agentop/setup_step_binaries.go b/cmd/agentop/setup_step_binaries.go index 2bcd4e91e..70b03075d 100644 --- a/cmd/agentop/setup_step_binaries.go +++ b/cmd/agentop/setup_step_binaries.go @@ -12,7 +12,7 @@ import ( ) // installerOneLiner is the fix for "nothing is installed": the documented install. -const installerOneLiner = "curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/authbridge/install.sh | sh" +const installerOneLiner = "curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh" // setupBinaryNames are what the binaries step installs; cortex-session-dump only // when the installer staged it (its fetch is never fatal). diff --git a/docs/assets/cortex-demo.svg b/docs/assets/cortex-demo.svg index 8936181c7..7c7402ff5 100644 --- a/docs/assets/cortex-demo.svg +++ b/docs/assets/cortex-demo.svg @@ -7,74 +7,74 @@ g.st{opacity:0} @keyframes blink{0%,49%{opacity:1}50%,100%{opacity:0.15}} @keyframes st0{0.0000%,22.4128%{opacity:1}22.4138%,100%{opacity:0}} g.st0{animation:st0 58s linear infinite} -@keyframes tp0_0{0%,0.0000%{width:0}6.4448%,100%{width:764.4px}} -#cl0_0 rect{animation:tp0_0 58s steps(91,end) infinite} -@keyframes cx0_0{0%,0.0000%{x:16.0px}6.4448%,100%{x:780.4px}} -@keyframes cv0_0{0%,0.0000%{visibility:hidden}0.0000%,6.4448%{visibility:visible}7.0448%,100%{visibility:hidden}} -.cur0_0{animation:cx0_0 58s steps(91,end) infinite,cv0_0 58s linear infinite,blink 1s steps(1,end) infinite} -@keyframes rv0_1{0%,7.3059%{visibility:hidden}7.3069%,100%{visibility:visible}} +@keyframes tp0_0{0%,0.0000%{width:0}4.2000%,100%{width:504.0px}} +#cl0_0 rect{animation:tp0_0 58s steps(60,end) infinite} +@keyframes cx0_0{0%,0.0000%{x:16.0px}4.2000%,100%{x:520.0px}} +@keyframes cv0_0{0%,0.0000%{visibility:hidden}0.0000%,4.2000%{visibility:visible}4.8000%,100%{visibility:hidden}} +.cur0_0{animation:cx0_0 58s steps(60,end) infinite,cv0_0 58s linear infinite,blink 1s steps(1,end) infinite} +@keyframes rv0_1{0%,5.0611%{visibility:hidden}5.0621%,100%{visibility:visible}} .rv0_1{animation:rv0_1 58s linear infinite} -@keyframes tp0_2{0%,7.3069%{width:16.8px}10.7552%{width:352.8px}10.7562%,100%{width:621.6px}} +@keyframes tp0_2{0%,5.0621%{width:16.8px}8.5103%{width:352.8px}8.5113%,100%{width:621.6px}} #cl0_2 rect{animation:tp0_2 58s steps(40,end) infinite} -@keyframes rv0_3{0%,11.1852%{visibility:hidden}11.1862%,100%{visibility:visible}} +@keyframes rv0_3{0%,8.9404%{visibility:hidden}8.9414%,100%{visibility:visible}} .rv0_3{animation:rv0_3 58s linear infinite} -@keyframes rv0_4{0%,11.2369%{visibility:hidden}11.2379%,100%{visibility:visible}} +@keyframes rv0_4{0%,8.9921%{visibility:hidden}8.9931%,100%{visibility:visible}} .rv0_4{animation:rv0_4 58s linear infinite} -@keyframes rv0_5{0%,11.3059%{visibility:hidden}11.3069%,100%{visibility:visible}} +@keyframes rv0_5{0%,9.0611%{visibility:hidden}9.0621%,100%{visibility:visible}} .rv0_5{animation:rv0_5 58s linear infinite} -@keyframes rv0_6{0%,11.3749%{visibility:hidden}11.3759%,100%{visibility:visible}} +@keyframes rv0_6{0%,9.1300%{visibility:hidden}9.1310%,100%{visibility:visible}} .rv0_6{animation:rv0_6 58s linear infinite} -@keyframes rv0_7{0%,11.4438%{visibility:hidden}11.4448%,100%{visibility:visible}} +@keyframes rv0_7{0%,9.1990%{visibility:hidden}9.2000%,100%{visibility:visible}} .rv0_7{animation:rv0_7 58s linear infinite} -@keyframes rv0_8{0%,11.5128%{visibility:hidden}11.5138%,100%{visibility:visible}} +@keyframes rv0_8{0%,9.2680%{visibility:hidden}9.2690%,100%{visibility:visible}} .rv0_8{animation:rv0_8 58s linear infinite} -@keyframes rv0_9{0%,11.5645%{visibility:hidden}11.5655%,100%{visibility:visible}} +@keyframes rv0_9{0%,9.3197%{visibility:hidden}9.3207%,100%{visibility:visible}} .rv0_9{animation:rv0_9 58s linear infinite} -@keyframes rv0_10{0%,11.6162%{visibility:hidden}11.6172%,100%{visibility:visible}} +@keyframes rv0_10{0%,9.3714%{visibility:hidden}9.3724%,100%{visibility:visible}} .rv0_10{animation:rv0_10 58s linear infinite} -@keyframes rv0_11{0%,11.6680%{visibility:hidden}11.6690%,100%{visibility:visible}} +@keyframes rv0_11{0%,9.4231%{visibility:hidden}9.4241%,100%{visibility:visible}} .rv0_11{animation:rv0_11 58s linear infinite} -@keyframes rv0_12{0%,13.7369%{visibility:hidden}13.7379%,100%{visibility:visible}} +@keyframes rv0_12{0%,11.4921%{visibility:hidden}11.4931%,100%{visibility:visible}} .rv0_12{animation:rv0_12 58s linear infinite} -@keyframes rv0_13{0%,13.7887%{visibility:hidden}13.7897%,100%{visibility:visible}} +@keyframes rv0_13{0%,11.5438%{visibility:hidden}11.5448%,100%{visibility:visible}} .rv0_13{animation:rv0_13 58s linear infinite} -@keyframes rv0_14{0%,14.3059%{visibility:hidden}14.3069%,100%{visibility:visible}} +@keyframes rv0_14{0%,12.0611%{visibility:hidden}12.0621%,100%{visibility:visible}} .rv0_14{animation:rv0_14 58s linear infinite} -@keyframes rv0_15{0%,14.4783%{visibility:hidden}14.4793%,100%{visibility:visible}} +@keyframes rv0_15{0%,12.2335%{visibility:hidden}12.2345%,100%{visibility:visible}} .rv0_15{animation:rv0_15 58s linear infinite} -@keyframes rv0_16{0%,14.8231%{visibility:hidden}14.8241%,100%{visibility:visible}} +@keyframes rv0_16{0%,12.5783%{visibility:hidden}12.5793%,100%{visibility:visible}} .rv0_16{animation:rv0_16 58s linear infinite} -@keyframes rv0_17{0%,17.0645%{visibility:hidden}17.0655%,100%{visibility:visible}} +@keyframes rv0_17{0%,14.8197%{visibility:hidden}14.8207%,100%{visibility:visible}} .rv0_17{animation:rv0_17 58s linear infinite} -@keyframes rv0_18{0%,17.1162%{visibility:hidden}17.1172%,100%{visibility:visible}} +@keyframes rv0_18{0%,14.8714%{visibility:hidden}14.8724%,100%{visibility:visible}} .rv0_18{animation:rv0_18 58s linear infinite} -@keyframes rv0_19{0%,17.1680%{visibility:hidden}17.1690%,100%{visibility:visible}} +@keyframes rv0_19{0%,14.9231%{visibility:hidden}14.9241%,100%{visibility:visible}} .rv0_19{animation:rv0_19 58s linear infinite} -@keyframes rv0_20{0%,17.2197%{visibility:hidden}17.2207%,100%{visibility:visible}} +@keyframes rv0_20{0%,14.9749%{visibility:hidden}14.9759%,100%{visibility:visible}} .rv0_20{animation:rv0_20 58s linear infinite} -@keyframes rv0_21{0%,17.2714%{visibility:hidden}17.2724%,100%{visibility:visible}} +@keyframes rv0_21{0%,15.0266%{visibility:hidden}15.0276%,100%{visibility:visible}} .rv0_21{animation:rv0_21 58s linear infinite} -@keyframes rv0_22{0%,17.3231%{visibility:hidden}17.3241%,100%{visibility:visible}} +@keyframes rv0_22{0%,15.0783%{visibility:hidden}15.0793%,100%{visibility:visible}} .rv0_22{animation:rv0_22 58s linear infinite} -@keyframes rv0_23{0%,17.3749%{visibility:hidden}17.3759%,100%{visibility:visible}} +@keyframes rv0_23{0%,15.1300%{visibility:hidden}15.1310%,100%{visibility:visible}} .rv0_23{animation:rv0_23 58s linear infinite} -@keyframes rv0_24{0%,17.4266%{visibility:hidden}17.4276%,100%{visibility:visible}} +@keyframes rv0_24{0%,15.1818%{visibility:hidden}15.1828%,100%{visibility:visible}} .rv0_24{animation:rv0_24 58s linear infinite} -@keyframes rv0_25{0%,17.4783%{visibility:hidden}17.4793%,100%{visibility:visible}} +@keyframes rv0_25{0%,15.2335%{visibility:hidden}15.2345%,100%{visibility:visible}} .rv0_25{animation:rv0_25 58s linear infinite} -@keyframes rv0_26{0%,17.5300%{visibility:hidden}17.5310%,100%{visibility:visible}} +@keyframes rv0_26{0%,15.2852%{visibility:hidden}15.2862%,100%{visibility:visible}} .rv0_26{animation:rv0_26 58s linear infinite} -@keyframes rv0_27{0%,17.5818%{visibility:hidden}17.5828%,100%{visibility:visible}} +@keyframes rv0_27{0%,15.3369%{visibility:hidden}15.3379%,100%{visibility:visible}} .rv0_27{animation:rv0_27 58s linear infinite} -@keyframes rv0_28{0%,17.6335%{visibility:hidden}17.6345%,100%{visibility:visible}} +@keyframes rv0_28{0%,15.3887%{visibility:hidden}15.3897%,100%{visibility:visible}} .rv0_28{animation:rv0_28 58s linear infinite} -@keyframes rv0_29{0%,17.6852%{visibility:hidden}17.6862%,100%{visibility:visible}} +@keyframes rv0_29{0%,15.4404%{visibility:hidden}15.4414%,100%{visibility:visible}} .rv0_29{animation:rv0_29 58s linear infinite} -@keyframes rv0_30{0%,17.7369%{visibility:hidden}17.7379%,100%{visibility:visible}} +@keyframes rv0_30{0%,15.4921%{visibility:hidden}15.4931%,100%{visibility:visible}} .rv0_30{animation:rv0_30 58s linear infinite} -@keyframes rv0_31{0%,17.7887%{visibility:hidden}17.7897%,100%{visibility:visible}} +@keyframes rv0_31{0%,15.5438%{visibility:hidden}15.5448%,100%{visibility:visible}} .rv0_31{animation:rv0_31 58s linear infinite} -@keyframes rv0_32{0%,17.8404%{visibility:hidden}17.8414%,100%{visibility:visible}} +@keyframes rv0_32{0%,15.5956%{visibility:hidden}15.5966%,100%{visibility:visible}} .rv0_32{animation:rv0_32 58s linear infinite} @keyframes st1{0%,22.4128%{opacity:0}22.4138%,34.4818%{opacity:1}34.4828%,100%{opacity:0}} g.st1{animation:st1 58s linear infinite} @@ -261,7 +261,7 @@ clipPath rect{width:100000px} cortex -$ curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh +$ curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh rosso cortex · installer v0.9.3 · darwin/arm64 diff --git a/scripts/install.sh b/scripts/install.sh index bd7612498..78e4aa8dc 100755 --- a/scripts/install.sh +++ b/scripts/install.sh @@ -1,7 +1,7 @@ #!/bin/sh # install.sh — one-line installer for Cortex on a local machine. # -# curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh +# curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh # # Detects your OS/arch, downloads the prebuilt `agentop` and `cortex` binaries for # the newest stable release, verifies their SHA-256 checksums, and stages them in a @@ -155,7 +155,7 @@ usage() { install.sh — install Cortex on a local machine (macOS/Linux, amd64/arm64). Usage: - curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh + curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh curl -fsSL ...install.sh | sh -s -- [option] Downloads agentop and cortex for the newest stable release, verifies their checksums @@ -439,7 +439,8 @@ if [ -n "${_reexec}" ]; then # Explicitly asked for the channel, by either name. `main` is the documented # spelling; CHANNEL_TAG is what the Releases page shows, so someone who saw the # title there will type that instead and must get the same thing. This copy - # already is main, so there is nothing to re-exec. + # already is main — piped from www.rossoctl.dev, main as of the site's last + # deploy — so there is nothing to re-exec. SCRIPT_REF="main" VERSION_REF="main" else diff --git a/scripts/readme-demo/demo.yaml b/scripts/readme-demo/demo.yaml index f651c0972..21e5fd782 100644 --- a/scripts/readme-demo/demo.yaml +++ b/scripts/readme-demo/demo.yaml @@ -40,7 +40,7 @@ acts: kind: shell runtime: 13s steps: - - cmd: "curl -fsSL https://raw.githubusercontent.com/rossoctl/cortex/main/scripts/install.sh | sh" + - cmd: "curl -fsSL https://www.rossoctl.dev/cortex/install.sh | sh" out: - " rosso cortex · installer v0.9.3 · darwin/arm64" - " \e[38;5;167m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\e[0m 100% 15.6 MB · sha256 ✓ 2.0s"