A portable image that runs the whole toolkit, validate, lint, search, and the graph, live or static, with nothing installed on the host. Mount your bundle at /data and every command reads like the CLI. It is the no-Ruby door into the okf-gem pack: Agent Skill + CLI/Lib + Graph, 100% local.
Uma imagem portátil que roda o toolkit inteiro, validate, lint, search e o grafo, ao vivo ou estático, sem nada instalado no host. Monte o seu bundle em /data e todo comando fica igual à CLI. É a porta sem-Ruby para o pacote okf-gem: Agent Skill + CLI/Lib + Graph, 100% local.
$ docker run --rm -v "$PWD:/data" \
ghcr.io/serradura/okf validate .
The gem is light on purpose: it runs on every Ruby since 2.4, with three pure-Ruby dependencies and no build step. But not every box is a Ruby box. A CI job for a Go or Rust project, a Kubernetes step, a data pipeline, a reviewer who has never typed gem install: for all of them, adding a Ruby toolchain just to reach a Markdown validator is more friction than the tool is worth. A format meant to be portable should be reachable without adopting the language it is written in. The image is that reach.
A gem é leve de propósito: roda em todo Ruby desde o 2.4, com três dependências em Ruby puro e nenhum passo de build. Mas nem toda máquina é uma máquina Ruby. Um job de CI de um projeto Go ou Rust, um passo de Kubernetes, um pipeline de dados, uma pessoa que nunca digitou gem install: para todos eles, adicionar um toolchain de Ruby só para alcançar um validador de Markdown é mais atrito do que a ferramenta vale. Um formato feito para ser portátil tem que ser alcançável sem adotar a linguagem em que foi escrito. A imagem é esse alcance.
Every command is the CLI you already know, with your directory mounted at /data. For the server, publish the port and bind 0.0.0.0 so the host can reach it.
Todo comando é a CLI que você já conhece, com o seu diretório montado em /data. No servidor, publique a porta e escute em 0.0.0.0 para o host alcançar.
$ docker run --rm -v "$PWD:/data" ghcr.io/serradura/okf validate . OKF v0.1 conformance — . concepts: 37 index.md: 10 log.md: 1 ✓ conformant $ docker run --rm -v "$PWD:/data" -p 8808:8808 \ ghcr.io/serradura/okf server . --bind 0.0.0.0 serving 37 concepts at http://0.0.0.0:8808 (Ctrl-C to stop) # open http://127.0.0.1:8808 on the host — the graph is live# abra http://127.0.0.1:8808 no host — o grafo está ao vivo
Prefix each with docker run --rm -v "$PWD:/data" ghcr.io/serradura/okf (or install okf and drop the prefix). <dir> is your bundle inside the mount: . for the whole mounted directory, or a subfolder like docs.
Prefixe cada um com docker run --rm -v "$PWD:/data" ghcr.io/serradura/okf (ou instale o okf e dispense o prefixo). <dir> é o seu bundle dentro do mount: . para o diretório montado inteiro, ou uma subpasta como docs.
| validate <dir> | Is it legal OKF? Conformance to the v0.1 spec (§9). Exit 1 if not.É OKF legal? Conformidade com a spec v0.1 (§9). Sai 1 se não. |
| lint <dir> | Is it well curated? Orphans, missing concepts, stubs, stale timestamps.Está bem curado? Órfãos, conceitos faltando, stubs, timestamps velhos. |
| search <dir> term | Ranked retrieval across metadata and bodies.Recuperação rankeada por metadados e corpos. |
| index <dir> | The progressive-disclosure map (§6): bodies, rollups, listings.O mapa de divulgação progressiva (§6): corpos, rollups, listagens. |
| server <dir> --bind 0.0.0.0 | The live graph over HTTP. Add -p 8808:8808 to the run.O grafo ao vivo via HTTP. Some -p 8808:8808 ao run. |
| render <dir> -o /data/graph.html | The same page as one static file, written into the mounted bundle. No server, hosts anywhere.A mesma página como um arquivo estático, escrito no bundle montado. Sem servidor, hospeda em qualquer lugar. |
| catalog · files · tags · types · stats | The browser views, on the CLI.As visões do navegador, na CLI. |
The installer drops a script named okf on your PATH, so the image takes the exact CLI interface with no docker run prefix. It mounts your directory, and for server it publishes the port and opens the bind for you. Because the command is okf, the agent skill and your habits work unchanged.
O instalador coloca um script chamado okf no seu PATH, então a imagem assume a interface exata da CLI sem o prefixo docker run. Ele monta o seu diretório e, no server, publica a porta e abre o bind por você. Como o comando é okf, a skill do agente e os seus hábitos funcionam sem mudança.
$ curl -fsSL https://docker.okfgem.com/install.sh | sh $ okf validate . $ okf server . # port + bind handled# porta + bind resolvidos $ okf search . "graph server"
$ curl -fsSL https://docker.okfgem.com/okf \ -o /usr/local/bin/okf $ chmod +x /usr/local/bin/okf $ okf --version # set OKF_IMAGE to pin a version# use OKF_IMAGE para fixar a versão
On Windows, install with PowerShell instead: irm https://docker.okfgem.com/install.ps1 | iex. The image is Linux, and Docker Desktop runs it through WSL2.No Windows, instale com o PowerShell: irm https://docker.okfgem.com/install.ps1 | iex. A imagem é Linux, e o Docker Desktop a roda via WSL2.
The script is short and readable: fetch docker.okfgem.com/okf and look before you run it. Docker still does the work, so the same privacy and offline story holds. O script é curto e legível: baixe docker.okfgem.com/okf e leia antes de rodar. O Docker continua fazendo o trabalho, então a mesma história de privacidade e offline vale.
rake release pushes vX.Y.Zrake release publica vX.Y.Zlinux/amd64 and linux/arm64 via buildxlinux/amd64 e linux/arm64 via buildxdocker pull ghcr.io/serradura/okfdocker pull ghcr.io/serradura/okf:latest or pin :1.9.0:latest ou fixe :1.9.0