AGPL-3.0-or-later · forever.

install · v0.111.0

바이너리 하나. 너의 머신.

첫 run까지 2분.

Nika는 Rust 바이너리 하나다. daemon 없음, 계정 없음, cloud 필수 아님. 아래에서 들어갈 문을 고르고 무료 로컬 모델로 첫 파일을 실행해 보자.

macOS · Linux · air-gapped OK

  1. 01 · homebrew

    원라이너

    Homebrew가 있는 macOS 또는 Linux: 바로 PATH에 올라간다. nika --version으로 확인.

    이렇게 보여야 한다
    nika --versionnika 0.111.0 (25f502adb)

    real output · nika 0.111.0 · nika --version · re-captured at every release

  2. 02 · script

    Homebrew 없이

    검증된 release 바이너리~/.nika/bin에 내려받고, 셸 프로필에 추가할 PATH 한 줄을 출력한다. 터미널을 다시 열면 nika --version이 답한다.

    curl -LsSf https://nika.sh/install.sh | sh

    toolchain이 이미 있다면: cargo는 미리 빌드된 release tarball을 가져온다. 컴파일 없음 (crates.io publish 전까지 바이너리 이름은 nika-cli: 공개 이름으로 symlink 한 번). nix는 repo flake로 release 소스를 그대로 빌드한다. 첫 run은 컴파일하고, store가 캐시한다.

    cargo binstall --git https://github.com/supernovae-st/nika nika-cli
    nix run github:supernovae-st/nika
  3. 03 · 수동

    air-gapped, 또는 직접

    최신 release에서 플랫폼 tarball과 SHA256SUMS를 내려받아 검증한 뒤 nikaPATH에 놓는다. 아무 데도 연결하지 않는다.

    sha256sum -c SHA256SUMS --ignore-missing
  4. 04 · 에디터

    에디터 확장

    supernovae.nika-lang · VS Code MarketplaceOpen VSX에 있다 (Cursor · Windsurf · VSCodium). 첫 사용 시 맞는 nika release 바이너리를 자동으로 내려받거나, PATH에 이미 있는 것을 재사용한다. 다른 에디터라면: nika lsp가 stdio로 LSP를 말한다 · source + issues.

  5. 05 · 에이전트

    에이전트와 함께

    Nika는 에이전트가 쓰고 네가 리뷰하도록 만들어졌다. nika init이 schema 연결과 AGENTS.md를 repo에 넣어 Claude Code, Cursor, Codex 들이 첫 시도에 valid한 workflow를 쓰게 하고, nika wire는 원하는 곳에만 명시적 agent-tool(MCP) 연결을 더한다.

    nika init
    nika wire cursor
  6. 06 · 첫 run

    키 제로, cloud 제로

    nika welcome부터, 거울이다: 이 머신에 이미 있는 것들 (에디터 · 로컬 모델 · 키의 존재 여부만, 값은 절대 아님) 그리고 다음에 갈 곳. 첫 workflow에는 모델도 API 키도 필요 없다. 파일을 저장하고 nika check로 감사한 뒤 (plan · 비용 · secrets, 무엇이든 돌기 전에) nika run. AI 스텝을 더한다면 무료 로컬 모델로 (ollama pull 한 번, 머신 밖으로 아무것도 안 나간다), nika doctor가 무엇이 연결됐는지 정확히 알려준다.

    nika welcome
    nika check hello.nika.yaml
    nika run hello.nika.yaml
    ollama pull llama3.2:3b
    nika try 01-hello --model ollama/llama3.2:3b
    nika doctor
    hello.nika.yamlsource
    # first file after install · one exec, zero setup, zero keysnika: hellopermits:  exec: ["echo"]tasks:  greet:    exec:      command: ["echo", "hello", "from", "nika"]
    이렇게 보여야 한다
    nika check hello.nika.yamlnika check · hello.nika.yaml  PLAN     1 wave · 1 task · max parallelism 1      wave 1 greet (exec · echo)  COST     no infer/agent tasks · $0.00 · exec + mcp spend unpriced  SECRETS  no declared secret reaches an effect · model echo untracked  TYPES    deep references fit the shapes tasks declare · builtin output has none  TOOLS    every named nika: tool is canonical · globs + mcp: not checked  ARGS     every builtin invoke arg key is declared + required args present  SCHEMA   no known-unsatisfiable form in an authored schema: · $ref opaque  GATES    no task proven dead · status literals in vocabulary  WRITES   no two unordered tasks write the same static path · computed paths at run  EXEC     no literal argv the exec floor refuses at run · a templated argv is the RUN's verdict  PERMITS  literal + const: args fit the boundary · computed paths + symlinks are the RUN's verdict · exec outside the fs bounds  TRIFECTA no lethal trifecta over the declared permits: without a human gate  JOURNEY internal · 0 sources · 1 destination · 0 model endpoints · no secret reaches a cloud destination  audited · 1 task · 1 wave · permits declared · est out ≤$0.0000 · 0 hints · risk supervisednika run hello.nika.yaml  🦋 nika · hello · 1 task     permits ✓ declared boundary · exec outside the fs bounds    greet  exec · echo  9ms  ── 1/1 done · $0.00 · elapsed 0.0s ─────────────────────────────    trace: .nika/traces/2026-08-18T23-26-42Z-0a8e.ndjson · 7 events · chain a145a48cf0d995069384cbd8332a067c01d7490f78190897cd6bdf46f40b90b6

    real output · nika 0.111.0 · nika check hello.nika.yaml · re-captured at every release

    hello-ai.nika.yamlsource
    # first model call · one local seat, one bounded sentencenika: hello-aimodel: ollama/llama3.2:3b   # local · zero key · swap for any provider in the catalogpermits: {}tasks:  greet:    infer:      prompt: "Say hello in one sentence."      max_tokens: 64outputs:  greeting: ${{ tasks.greet.output }}

뭔가 걸린다면

command not found: nika (설치 스크립트 후)

스크립트는 ~/.nika/bin에 설치하고 셸 프로필(~/.zshrc, ~/.bashrc)에 추가할 정확한 PATH 줄을 출력한다. 추가하고 터미널을 다시 열면 nika --version이 답한다.

export PATH="$HOME/.nika/bin:$PATH"
macOS가 바이너리를 차단 (수동 tarball만)

손으로 내려받은 바이너리는 quarantine 플래그가 붙는다. brew와 설치 스크립트는 안 붙는다. 한 번 지우거나, 우클릭 → 열기.

xattr -d com.apple.quarantine ./nika
회사 proxy 뒤에서

설치 스크립트는 순수 curl이다. 다운로드에 표준 proxy 변수를 그대로 쓴다. 바이너리 자체는 어디에도 연결하지 않는다.

HTTPS_PROXY=http://proxy:8080 curl -LsSf https://nika.sh/install.sh | sh
tarball checksum mismatch

mismatch는 손상되었거나 변조된 다운로드라는 뜻이다. 실행하지 말 것. release 페이지에서 tarball과 SHA256SUMS를 다시 받아 재검증한다.

sha256sum -c SHA256SUMS --ignore-missing

다음: 5분 만에 파일 배우기 · 실제 workflow 둘러보기 · 전체 문서