SPOOK OS
Operator's guide — v1.4 "Cursor"
SPOOK OS is a computer that lives in a single web page. Open it anywhere, mount your own web host as its drive, and you have publishing, encrypted storage, and dead-drop messaging — on any device with a browser. Close the tab and walk away; your machine reassembles wherever you open it next.
Everything is typed into the SYS> bar at the bottom of the
screen. Type /help inside the machine any time for the built-in
version of this guide.
QUICK START
- Open the terminal. Type
/help, look around. Try/color greenand/scale 3. - Make something:
/new notesdrops you straight into editing. Type. Press ESC (or tap the bottom bar) when done. - To publish to the web you need a node — a single PHP file on any web
host. Type
/nodeto download it, open it in any text editor and set the secret at the top, upload it to your host's web root. That is the entire server installation. - Connect:
/mount yourdomain.com YOUR-SECRET - Publish:
/publish notes— the post URL appears in comms and lands on your clipboard.
COMMANDS — CARDS & EDITING
Cards are the machine's documents: a stack of headings, rules, and paragraphs, each with a name you type in commands.
| /new [card] | create a card and start editing it |
| /edit [card] | edit an existing card (cursor lands at the end) |
| /kill [card] | remove a card from the machine |
| /clear [card] | wipe a card's text, keep its structure |
| /view [card] | show one card full-screen (monotasking) |
| /home | show all cards again |
| /copy [card] | copy a card's text to the clipboard |
| /copy url | copy the last published post's URL (also just /copy) |
COMMANDS — PUBLISHING
Your node is one PHP file on your own host. It stores posts as flat JSON, regenerates the whole site as static pages on every change — index with live search, one page per post, RSS feed — and can email you when a post lands.
| /mount [host] [secret] | connect your node. /mount spookos.net abc123 — the address is normalized for you |
| /unmount | disconnect and forget the secret |
| /publish [card] | push a card to the site. First h1 is the title; paragraphs are the body. A card that has published before updates its post |
| /unpublish [card] | remove that card's post from the site |
| /posts | list every post on the node (* marks edited posts) |
| /pull [post-id] | fetch a post back into an editable card — edit anywhere, republish to update |
| /attach [card] | pick a photo (camera works on phones); it uploads to your node and an [img:...] token lands in the card, becoming a real image on the published page |
| /node | download spook_node.php — the machine carries its own server |
| /source | download this machine's ROM. A saved copy cannot be swapped out from under you |
Photos are scrubbed before they leave your device. The attach pipeline re-encodes every image, which strips EXIF metadata — GPS coordinates, device identifiers, timestamps — automatically. What uploads is the picture, not where you were standing.
COMMANDS — THE ENCRYPTED DISK
Your whole machine — every card, setting, and draft — sealed with a passphrase and stored on your node. The passphrase never leaves your browser; the host holds ciphertext it cannot read.
| /store [passphrase] | seal the machine and store it (optional slot name as a second word: /store pass fieldwork) |
| /restore [passphrase] | reassemble the machine from the disk. Wrong passphrase fails clean |
| /save | download the machine as a JSON file instead (unencrypted, local) |
| /load | restore from a local JSON file |
The burner ritual: walk up to any computer →
open your terminal URL → /mount host secret →
/restore passphrase → your machine is back. Close the tab and
it is gone from that computer.
COMMANDS — DEAD DROPS
Sealed messages left at your node under a channel derived from a passphrase. The node cannot read them and cannot even see the channel's real name. Drops always expire — seven days by default.
| /drop [passphrase] [message] | leave a sealed message on that passphrase's channel |
| /pickup [passphrase] | collect the channel's messages into comms |
Share the terminal URL, the mount details, and a drop passphrase with someone, and you have an asynchronous sealed channel — no accounts, no apps, nothing retained past the TTL.
COMMANDS — SYSTEM
| /help | the built-in guide and the constitution |
| /verify | this ROM's fingerprint (see INTEGRITY below) |
| /color [red|green|amber|ghost] | set the phosphor |
| /scale [1-5] | set pixel size — 2 is default; 1 is dense, 4 is display type |
KEYS & TOUCH
| ESC | leave editing; from a view, return home |
| ←↑↓→ | move the cursor while editing; scroll otherwise |
| Home / End | start / end of the current line |
| Delete | delete forward at the cursor |
| PgUp / PgDn | scroll by a screen |
| click / tap text | place the cursor right there |
| tap the bottom bar | same as ESC (phones have no Escape key) |
| drag | scroll (touch) |
| paste | works anywhere — including the mount secret on a phone |
| Alt+P E A K C G S | tactical glyphs: 🔒 👁 👾 🗝 ⌖ ᗣ ☠ |
| Alt+[ ] { } | curly quotes “ ” ‘ ’ |
| Alt+1 2 3 | signal bars ① ② ③ |
THE TWO CREDENTIALS
The system uses two different keys for two different jobs, and it pays to keep them straight:
The node secret (set inside spook_node.php) proves
to your host that it's you. It authorizes publishing, the disk, and media.
It is held in memory only while the tab is open — never written into saved
state — which is why each session begins with /mount.
Passphrases (for /store, /restore,
/drop, /pickup) encrypt content. They
never travel anywhere — keys are derived from them inside your browser,
and your host stores only ciphertext. Lose a passphrase and nothing can
recover what it sealed. That is the design working, not failing.
INTEGRITY
/verify shows the SHA-256 fingerprint of the kernel,
computed at boot. Compare it out of band against a copy you trust — the
hash published with each release, or your own saved file. Stated plainly:
a tampered ROM can fake the verify screen, so the fingerprint is a
tripwire to check, not a promise to believe. The strong defenses are the
simple ones: /source yourself a copy and keep it. A file on
your own drive cannot be swapped out from under you.
SPOOK MARKUP — HOW A CARD BECOMES A POST
When you publish, the post is formatted from the card, not typed in a separate syntax. Structure you already have carries over, and a few line prefixes handle the rest. Everything is decided by how a line starts — there are no closing marks to match, which is the point on a phone.
| first heading | the post title |
| a later heading | a section heading in the post |
| a rule | a divider |
# text | a heading, typed inline |
- text | a bullet — stack lines for a list |
1. text | a numbered item — stack for a list |
> text | a quote — stack for a block |
--- | a divider, typed inline |
| a web link on its own line | becomes clickable |
| anything else | a normal paragraph |
A blank line separates paragraphs. Text that follows none of the rules publishes exactly as written, so you never have to think about markup you aren't using. HTML you type is shown as literal text, never run — the post can't be made to do anything you didn't intend.
WORKFLOW — RUNNING A BLOG FROM THE TERMINAL
/new mypost— write. The first heading becomes the title. ESC when done./attach mypostif a photo belongs in it; place the[img:...]token where the image should sit./publish mypost— the post is live, its URL copied.- Spotted a typo from another device days later?
/mount→/posts→/pull [id]→ tap the typo → fix →/publish [id]. The post updates in place, keeping its date and gaining an "updated" stamp. - Retract it entirely with
/unpublish [card].
Your site regenerates as pure static files on every change: readers, the RSS feed, and the search box never touch a running program.
SPOOK OS boots from one file, makes zero external requests, runs on old hardware, and keeps the whole machine in one readable JSON state you can save, seal, and carry. The machine lives at spookos.com · transmissions at spookos.net