wick

command module
v0.12.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 14, 2026 License: MIT Imports: 3 Imported by: 0

README

Wick

Build internal tools and AI agents in Go — or just download and run Claude / Codex / Gemini as a Slack + Telegram + web agent host. No copy-pasting. You own the code.

Two ways to use wick:


1. Run AI Agents — no Go, no framework

Want Claude / Codex / Gemini as a Slack bot, Telegram bot, or web assistant? Just download the binary.

# Linux / macOS
curl -L https://github.com/yogasw/wick/releases/latest/download/wick-linux-amd64 -o wick
chmod +x wick
./wick setup    # first-boot: generates credentials + SQLite DB
./wick server   # web UI at http://localhost:9425
# Docker — single-container: HTTP + cron in one process
docker run -d \
  -p 9425:9425 \
  -v wick-data:/root/.wick \
  ghcr.io/yogasw/wick:latest all

The binary supports two modes — pick one:

Mode Command Best for
System tray ./wick (no args) Desktop — right-click menu, icon shows state, auto-start on login
Headless ./wick server Remote server / Docker — no GUI, logs to stdout

Then in the web UI (/tools/agents):

  1. Providers — point wick at your Claude / Codex / Gemini binary and your PAT
  2. Channels — connect Slack (Socket Mode), Telegram bot, or just use the built-in Web UI
  3. Workspaces — pick a folder for the agent to work in (a default is created automatically)
  4. Send a message → wick spawns the agent and routes the conversation

Every Bash command the agent runs goes through the Command Gate — whitelist globs or escalate to interactive 4-mode approval (Approve once / This session / Always / Block), audited to JSONL.

Agent host docs


2. Build Internal Tools & Jobs — AI writes real Go files

go install github.com/yogasw/wick@latest
wick init my-app
cd my-app
wick dev   # http://localhost:9425

Open my-app/ in Claude Code and prompt what you need:

add a tool called "base64" that encodes and decodes text
add a background job that syncs data from our API every 30 minutes
add a connector for GitHub with list_repos and create_issue operations

Claude writes real Go files in your repo — you own everything. git diff to review, git revert to undo.

What wick scaffolds
my-app/
├── main.go          # register tools, jobs, and connectors here
├── AGENTS.md        # Claude reads this — framework conventions
├── .claude/skills/  # bundled AI skills (tool-module, job-module, connector-module)
├── wick.yml         # task runner config
├── tools/
│   ├── convert-text/   # example tool (UI page)
│   └── external/       # external link cards
├── jobs/
│   └── auto-get-data/  # example background job
├── connectors/
│   └── crudcrud/       # example connector (LLM-facing via MCP)
└── tags/
    └── defaults.go     # shared tag catalog
What the framework handles

You write business logic. Wick handles everything else:

You write Wick provides
func Register(r tool.Router) Admin UI, tag-based access, runtime config editing
func Run(ctx) (string, error) Cron scheduler, job history, run/retry UI
func Operations() []connector.Op MCP endpoint, per-call audit log, OAuth + PAT auth
Module types
Type Audience Entry point URL
Tool Humans (web UI) Register(r tool.Router) /tools/{key}
Job Scheduler Run(ctx) (string, error) /jobs/{key}
Connector LLMs via MCP Operations() /mcp
Agents Slack / Telegram / Web built-in /tools/agents
Common commands
Command What it does
wick dev Generate templ + CSS, start server
wick server Start HTTP server only
wick worker Start background job worker
wick all HTTP + cron in one process (single-node deploys)
wick build Compile binary with version metadata
wick test Run go test ./... with coverage
wick skill sync Refresh bundled AI skills after upgrade

Framework docs · AI Quickstart


Contributing

See CONTRIBUTING.md or the Contributing guide.

License

MIT

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
Package app is the public entry point for downstream projects that want to embed wick as a library.
Package app is the public entry point for downstream projects that want to embed wick as a library.
cmd
cli
gate command
Command gate is the small binary claude's PreToolUse hook invokes before every Bash tool call.
Command gate is the small binary claude's PreToolUse hook invokes before every Bash tool call.
lab command
internal
accesstoken
Package accesstoken manages Personal Access Tokens — static bearer credentials a user generates from /profile/tokens and pastes into a remote MCP client (Claude Desktop, Cursor, VSCode plugin, custom CLI).
Package accesstoken manages Personal Access Tokens — static bearer credentials a user generates from /profile/tokens and pastes into a remote MCP client (Claude Desktop, Cursor, VSCode plugin, custom CLI).
accesstoken/view
templ: version: v0.3.1020
templ: version: v0.3.1020
admin/view
templ: version: v0.3.1020
templ: version: v0.3.1020
agents/askuser
Package askuser holds the daemon-side coordinator for the ask_user MCP tool.
Package askuser holds the daemon-side coordinator for the ask_user MCP tool.
agents/capability
Package capability declares per-provider hook-support metadata and a self-registering registry for it.
Package capability declares per-provider hook-support metadata and a self-registering registry for it.
agents/channels
Package channels provides message channel implementations for the Agents subsystem.
Package channels provides message channel implementations for the Agents subsystem.
agents/channels/rest
Package rest implements an OpenAI Chat Completions compatible HTTP channel for the agents pool.
Package rest implements an OpenAI Chat Completions compatible HTTP channel for the agents pool.
agents/channels/setup
Package setup composes channel implementations into a registry.
Package setup composes channel implementations into a registry.
agents/channels/slack
Package slack implements the Slack transport for the agents channel registry.
Package slack implements the Slack transport for the agents channel registry.
agents/channels/telegram
Package telegram implements the Telegram transport for the agents channel registry.
Package telegram implements the Telegram transport for the agents channel registry.
agents/config
Package config holds the runtime-editable Agents config (General / Slack / Workspace structs reflected into the configs DB table) plus the on-disk Layout — the single source of truth for path math under the platform default data directory (~/.<app>/agents).
Package config holds the runtime-editable Agents config (General / Slack / Workspace structs reflected into the configs DB table) plus the on-disk Layout — the single source of truth for path math under the platform default data directory (~/.<app>/agents).
agents/event
Package event holds the CLI-agnostic event abstraction.
Package event holds the CLI-agnostic event abstraction.
agents/gate
Package gate is the command whitelist enforcement layer.
Package gate is the command whitelist enforcement layer.
agents/pool
Package pool manages the global agent subprocess slot count + FIFO queue.
Package pool manages the global agent subprocess slot count + FIFO queue.
agents/preset
Package preset manages reusable agent templates stored at `<BaseDir>/presets/<name>/agent.md`.
Package preset manages reusable agent templates stored at `<BaseDir>/presets/<name>/agent.md`.
agents/provider
Package runtime owns the per-AI-CLI runtime layer for agents:
Package runtime owns the per-AI-CLI runtime layer for agents:
agents/provider/claude
Package claude is the Claude-CLI specific Spawner implementation.
Package claude is the Claude-CLI specific Spawner implementation.
agents/provider/codex
Package codex will hold the Codex-CLI specific Spawner implementation.
Package codex will hold the Codex-CLI specific Spawner implementation.
agents/provider/gemini
Package gemini will hold the Gemini-CLI specific Spawner implementation.
Package gemini will hold the Gemini-CLI specific Spawner implementation.
agents/providersync
Package providersync syncs provider credential files to/from the DB.
Package providersync syncs provider credential files to/from the DB.
agents/registry
Package registry holds the in-memory cache of on-disk Agents state (Registry) plus a mutator wrapper (Manager) and the boot entrypoint (Bootstrap).
Package registry holds the in-memory cache of on-disk Agents state (Registry) plus a mutator wrapper (Manager) and the boot entrypoint (Bootstrap).
agents/session
Package session manages on-disk session entries at `<BaseDir>/sessions/<id>/`.
Package session manages on-disk session entries at `<BaseDir>/sessions/<id>/`.
agents/state
Package state holds the per-agent runtime state machine.
Package state holds the per-agent runtime state machine.
agents/storage
Package storage holds the filesystem primitives used by every other agents subpackage: atomic JSON write, JSONL append/read/tail/truncate, directory scan, and identifier validation.
Package storage holds the filesystem primitives used by every other agents subpackage: atomic JSON write, JSONL append/read/tail/truncate, directory scan, and identifier validation.
agents/store
Package store is the agents pipeline sink: it consumes AgentEvent values produced by a Parser and writes them to the on-disk session folder (conversation.jsonl, raw.jsonl, agents.json cli_session_id).
Package store is the agents pipeline sink: it consumes AgentEvent values produced by a Parser and writes them to the on-disk session folder (conversation.jsonl, raw.jsonl, agents.json cli_session_id).
agents/transport
Package transport defines the boundary between Agents and message sources (Slack, UI, future API).
Package transport defines the boundary between Agents and message sources (Slack, UI, future API).
agents/transport/api
Package api will hold the HTTP API transport — external integrations that POST messages directly into a session, bypassing UI / Slack.
Package api will hold the HTTP API transport — external integrations that POST messages directly into a session, bypassing UI / Slack.
agents/transport/slack
Package slack will hold the Slack transport: socket-mode (default) or HTTP Event API listener, reaction lifecycle, chunked replies, access control, and meta-command routing.
Package slack will hold the Slack transport: socket-mode (default) or HTTP Event API listener, reaction lifecycle, chunked replies, access control, and meta-command routing.
agents/transport/ui
Package ui will hold the UI transport: an HTTP handler glue layer that turns POST /tools/agents/sessions/{id}/send into an IncomingMessage and pumps it through the pool.
Package ui will hold the UI transport: an HTTP handler glue layer that turns POST /tools/agents/sessions/{id}/send into an IncomingMessage and pumps it through the pool.
agents/workspace
Package workspace manages on-disk workspace entries at `<BaseDir>/workspaces/<name>/` (managed) or any user-supplied absolute path (custom).
Package workspace manages on-disk workspace entries at `<BaseDir>/workspaces/<name>/` (managed) or any user-supplied absolute path (custom).
appname
Package appname is the single source of truth for the running app's *path-safe identifier* — the slug used in `~/.<app>/` for DB, logs, agents Layout, gate spec/socket.
Package appname is the single source of truth for the running app's *path-safe identifier* — the slug used in `~/.<app>/` for DB, logs, agents Layout, gate spec/socket.
autostart
Package autostart registers the running binary to launch at OS user login.
Package autostart registers the running binary to launch at OS user login.
builder
Package builder compiles a wick app into a raw Go binary plus the platform-native distributable that ships with each release:
Package builder compiles a wick app into a raw Go binary plus the platform-native distributable that ships with each release:
builder/darwin
Package darwin handles macOS-specific build steps — wrapping the raw binary into a .app bundle and (host-darwin only) further wrapping that into a .dmg disk image.
Package darwin handles macOS-specific build steps — wrapping the raw binary into a .app bundle and (host-darwin only) further wrapping that into a .dmg disk image.
builder/linux
Package linux handles Linux-specific build steps — wrapping the raw binary into a Debian binary package (.deb).
Package linux handles Linux-specific build steps — wrapping the raw binary into a Debian binary package (.deb).
builder/windows
Package windows handles Windows-specific build steps — currently the .syso resource that embeds the brand icon plus version metadata into the .exe.
Package windows handles Windows-specific build steps — currently the .syso resource that embeds the brand icon plus version metadata into the .exe.
configs
Package configs manages runtime-editable configuration stored in the `configs` table.
Package configs manages runtime-editable configuration stored in the `configs` table.
connectors
Package connectors is the central registry for every connector definition wick will expose via MCP.
Package connectors is the central registry for every connector definition wick will expose via MCP.
connectors/crudcrud
Package crudcrud is a sample connector that wraps the crudcrud.com REST sandbox — a free, throwaway JSON store useful for demos and integration smoke tests.
Package crudcrud is a sample connector that wraps the crudcrud.com REST sandbox — a free, throwaway JSON store useful for demos and integration smoke tests.
connectors/github
Package github wraps the GitHub REST API v3 as a wick connector.
Package github wraps the GitHub REST API v3 as a wick connector.
connectors/httprest
Package httprest is a generic HTTP/REST connector that lets an LLM call any JSON API without writing a custom connector.
Package httprest is a generic HTTP/REST connector that lets an LLM call any JSON API without writing a custom connector.
connectors/slack
Package slack wraps Slack's Web API as a wick connector.
Package slack wraps Slack's Web API as a wick connector.
connectors/wickmanager
Package wickmanager exposes wick's own management plane (apps, jobs, tools, connectors, lifecycle server/worker) as a fixed single- instance connector.
Package wickmanager exposes wick's own management plane (apps, jobs, tools, connectors, lifecycle server/worker) as a fixed single- instance connector.
enc
Package enc implements wick's encrypted-fields layer: a per-user AES-256-GCM cipher that lets credentials and other sensitive values flow between an LLM and a connector without ever appearing as plaintext in the LLM's context window or in audit logs.
Package enc implements wick's encrypted-fields layer: a per-user AES-256-GCM cipher that lets credentials and other sensitive values flow between an LLM and a connector without ever appearing as plaintext in the LLM's context window or in audit logs.
home
templ: version: v0.3.1020
templ: version: v0.3.1020
initcreds
Package initcreds writes / clears the initial-admin credentials file.
Package initcreds writes / clears the initial-admin credentials file.
jobrunner
Package jobrunner mounts the operator-facing /jobs/{key} surface where users can run a job and see its recent history.
Package jobrunner mounts the operator-facing /jobs/{key} surface where users can run a job and see its recent history.
jobrunner/view
templ: version: v0.3.1020
templ: version: v0.3.1020
jobs
Package jobs is the single place to register all background job modules.
Package jobs is the single place to register all background job modules.
jobs/connector-runs-purge
Package connectorrunspurge is wick's built-in maintenance job that trims old rows from the connector_runs audit table.
Package connectorrunspurge is wick's built-in maintenance job that trims old rows from the connector_runs audit table.
jobs/provider-storage-retention
Package providerstorageretention purges expired provider_storage file rows and old history rows on a daily schedule.
Package providerstorageretention purges expired provider_storage file rows and old history rows on a daily schedule.
jobs/provider-storage-sync
Package providerstoragesync is a background job that backs up all enabled provider-storage sources from disk to DB on a fixed interval.
Package providerstoragesync is a background job that backs up all enabled provider-storage sources from disk to DB on a fixed interval.
jobs/sample-post
Package samplepost is a sample job that fetches a post from a JSONPlaceholder-compatible API and returns the result as markdown.
Package samplepost is a sample job that fetches a post from a JSONPlaceholder-compatible API and returns the result as markdown.
login/view
templ: version: v0.3.1020
templ: version: v0.3.1020
manager/view
templ: version: v0.3.1020
templ: version: v0.3.1020
manager/view/type
templ: version: v0.3.1020
templ: version: v0.3.1020
mcp
Package mcp implements the Model Context Protocol JSON-RPC 2.0 transport that LLM clients (Claude Desktop, Cursor, Claude.ai web) call to discover and invoke wick connectors as tools.
Package mcp implements the Model Context Protocol JSON-RPC 2.0 transport that LLM clients (Claude Desktop, Cursor, Claude.ai web) call to discover and invoke wick connectors as tools.
mcpconfig
Package mcpconfig writes MCP server entries into client config files (Claude Desktop, Cursor, Gemini CLI, Codex CLI, Claude Code) and detects which clients are installed on the host.
Package mcpconfig writes MCP server entries into client config files (Claude Desktop, Cursor, Gemini CLI, Codex CLI, Claude Code) and detects which clients are installed on the host.
metrics
Package metrics defines the Recorder interface that connectors.Service uses to emit telemetry.
Package metrics defines the Recorder interface that connectors.Service uses to emit telemetry.
oauth
Package oauth implements the minimal OAuth 2.1 authorization server every spec-compliant MCP client (notably Claude.ai web) requires.
Package oauth implements the minimal OAuth 2.1 authorization server every spec-compliant MCP client (notably Claude.ai web) requires.
oauth/view
templ: version: v0.3.1020
templ: version: v0.3.1020
pkg/render
Package render builds the tool.RenderFunc that wraps a body fragment in wick's page shell (Layout + Navbar).
Package render builds the tool.RenderFunc that wraps a body fragment in wick's page shell (Layout + Navbar).
pkg/ui
templ: version: v0.3.1020
templ: version: v0.3.1020
processctl
Package processctl owns the in-process lifecycle of the HTTP server and background worker: Start/Stop/IsRunning + a per-process IsManaged flag that says whether wick was launched via the system tray (and is therefore allowed to mutate its own server/worker state).
Package processctl owns the in-process lifecycle of the HTTP server and background worker: Start/Stop/IsRunning + a per-process IsManaged flag that says whether wick was launched via the system tray (and is therefore allowed to mutate its own server/worker state).
sso
Package sso manages SSO provider credentials (currently Google OAuth).
Package sso manages SSO provider credentials (currently Google OAuth).
systemtray
Package systemtray runs the OS system tray UI for a wick-powered app: start/stop the local HTTP server and the background job worker (both in-process via cancellable goroutines), and install or uninstall the app's MCP entry into detected MCP clients (Claude Desktop, Cursor, etc).
Package systemtray runs the OS system tray UI for a wick-powered app: start/stop the local HTTP server and the background job worker (both in-process via cancellable goroutines), and install or uninstall the app's MCP entry into detected MCP clients (Claude Desktop, Cursor, etc).
tools
Package tools is the central registry for every tool instance wick will mount.
Package tools is the central registry for every tool instance wick will mount.
tools/agents
Package agents backs /tools/agents — the Agents UI Manager.
Package agents backs /tools/agents — the Agents UI Manager.
tools/agents/view
templ: version: v0.3.1020
templ: version: v0.3.1020
tools/convert-text
Package converttext is a stateless text-conversion tool.
Package converttext is a stateless text-conversion tool.
tools/encfields
Package encfields backs /tools/encfields — the in-app form for minting and reversing wick_enc_ tokens.
Package encfields backs /tools/encfields — the in-app form for minting and reversing wick_enc_ tokens.
tools/external
Package external wraps third-party links as tool.Module entries so they show up on the home grid and palette alongside in-app tools.
Package external wraps third-party links as tool.Module entries so they show up on the home grid and palette alongside in-app tools.
tools/provider-storage
Package providerstorage mounts a Provider Storage Manager UI under /tools/provider-storage.
Package providerstorage mounts a Provider Storage Manager UI under /tools/provider-storage.
tools/webtty
Package webtty mounts a browser-based terminal under /tools/webtty.
Package webtty mounts a browser-based terminal under /tools/webtty.
tty
updater
Package updater downloads, verifies, and applies new release binaries from GitHub.
Package updater downloads, verifies, and applies new release binaries from GitHub.
userconfig
Package userconfig persists per-machine user preferences for the system tray (auto-start toggles, default project, self-update state) in a single JSON file under a hidden app directory in the user's home.
Package userconfig persists per-machine user preferences for the system tray (auto-start toggles, default project, self-update state) in a single JSON file under a hidden app directory in the user's home.
pkg
connector
Package connector defines the public contract every connector module must satisfy.
Package connector defines the public contract every connector module must satisfy.
conntest
Package conntest provides lightweight test helpers for writing connector unit tests.
Package conntest provides lightweight test helpers for writing connector unit tests.
entity
Package entity exposes shared entity types used in the public wick contract (tool/job registration).
Package entity exposes shared entity types used in the public wick contract (tool/job registration).
job
Package job defines the public contract every background job module must implement.
Package job defines the public contract every background job module must implement.
tool
Package tool defines the public contract every tool module must satisfy.
Package tool defines the public contract every tool module must satisfy.
connectors/crudcrud
Package crudcrud is the example connector shipped with the template.
Package crudcrud is the example connector shipped with the template.
jobs/auto-get-data
Package autogetdata is a template job that fetches a remote endpoint on a schedule.
Package autogetdata is a template job that fetches a remote endpoint on a schedule.
tools/convert-text
Package converttext is a stateless text-conversion tool.
Package converttext is a stateless text-conversion tool.
tools/external
Package external wraps third-party links as tool.Module entries so they show up on the home grid and palette alongside in-app tools.
Package external wraps third-party links as tool.Module entries so they show up on the home grid and palette alongside in-app tools.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL