Skip to content

Hulak

A lightweight, file-based CLI API client with age-encrypted secrets, first-class GraphQL support, and a built-in MCP server for AI agent workflows.

Install

$claude mcp add hulak -s user -- hulak mcp --project api=~/work/api-tests

Install command taken from the project's README or registry entry. Always review code before running it.

Hulak

Your messenger in the terminal.

Quick Start • GraphQL Explorer • Project Layout • Documentation


Run one request, a whole directory, or stay interactive

hulak run ./requests/

Hulak runs request files directly from your project. It supports concurrent directory execution. It falls back to an interactive picker when you simply run hulak.

Dedicated GraphQL Explorer

Browse schemas from multiple endpoints. Search operations. Build queries interactively. Execute inline. Save generated files from the terminal.

Quick Start

Install

Hulak ships via xaaha/tap. Homebrew 6.0+ requires explicit trust for third-party taps; without it, brew upgrade silently skips hulak. One-time step per machine:

brew trust xaaha/tap
brew install --cask xaaha/tap/hulak

Other install options:

  • go install github.com/xaaha/hulak@latest
  • Build from source with go build -o hulak

Shell completion (go install / source builds)

Homebrew installs completion automatically. If you installed via go install or built from source, opt in once:

# zsh
hulak completion zsh > "${fpath[1]}/_hulak"        # then restart your shell

# bash (macOS, Homebrew bash-completion)
hulak completion bash > $(brew --prefix)/etc/bash_completion.d/hulak

# bash (Linux)
hulak completion bash | sudo tee /etc/bash_completion.d/hulak >/dev/null

Zsh requires autoload -Uz compinit && compinit in your .zshrc.

Path A. API client with encrypted secrets (default)

mkdir my-apis && cd my-apis
hulak init # creates .hulak/store.age + identity

Scaffold a starter request, to quickly check how a request file looks run:

hulak example api  # writes example-api.hk.yaml you can run

[!Note] For Other types run: hulak example. example sub-command gives you a quick way to write a request file you can modify. For more info run hulak example -h

To set up a secret you can run:

hulak secrets keys set placeholder  https://jsonplaceholder.typicode.com/posts -env prod

Now, in your example-api.hk.yaml file, you can reference this secret:

method: POST
url: "{{.placeholder}}"
# rest of the body of the file remains same

Run the request:

hulak run example-api.hk.yaml --env prod

Prefer plaintext env/*.env files instead of encrypted secrets?

hulak init classic

Plaintext mode is fully supported. See docs/environment.md for more info

Encrypted Secrets Vault Or Plaintext .env files

Hulak runs in two modes. Pick once during hulak init. You can migrate later.

  • Vault (default): secrets live in .hulak/store.age, encrypted with an age or SSH keypair. Safe to commit. Teams share via a recipients file. See docs/store.md.
  • Plaintext: secrets live in plaintext env/*.env files. Simpler, no encryption. Add env/ to .gitignore. See docs/environment.md.

Running classic and want to switch? See docs/migrating-to-vault.md.

Use it from an AI agent (MCP)

Hulak ships a built-in MCP server, so agents like Claude Code, Cursor, and Zed can drive your API collection in plain language — "list the requests", "dry-run login against staging", "call getUser and show the response".

For Claude Code, add it with one command:

Similar plugs

The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

Java 面试 & 后端通用面试指南,覆盖计算机基础、数据库、分布式、高并发、系统设计与 AI 应用开发

Build Agentic workflows, RAG pipelines, with rich AI model and tool support on one collaborative workspace. Deploy on cloud, VPC, or self-hosted, so teams move from prototype…

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io