Configuration
Wallfacer is configured through the Settings UI, environment variables in ~/.wallfacer/.env, CLI flags, and file-based overrides for system prompts and workspace instructions. The .env file is auto-generated on first run with commented-out defaults; edit it directly or use the Settings UI. Most settings take effect on the next task run without restarting the server.
π Essentials
Opening Settings
Open the Settings modal by clicking the gear icon in the top-right corner of the task board. The modal contains six tabs: Appearance, Execution, Sandbox, Workspace, Trash, and About.
π¨ Appearance
Theme -- Choose between Light, Dark, or Auto (follows the operating system preference). The theme applies to the current browser session.
Done Column -- Toggle "Show archived tasks" to display or hide archived completed tasks on the board.
π Setting Up Sandbox Credentials
At minimum, you need one of these credentials configured in Settings > Sandbox:
Claude configuration:
- Sign in with Claude button -- starts an OAuth flow: opens your browser to authenticate, then stores the token automatically. This is the easiest way to set up credentials.
- OAuth Token (
CLAUDE_CODE_OAUTH_TOKEN) -- alternatively, paste a token fromclaude setup-token; takes precedence when both credentials are set - API Key (
ANTHROPIC_API_KEY) -- direct key from console.anthropic.com - Test button -- runs a quick sandbox connectivity check to verify your credentials work. If the test detects an invalid or expired token and OAuth is available, a Sign in again button appears inline.
Codex configuration: similarly, use the Sign in with OpenAI button for OAuth or paste an API key manually.
The sign-in buttons are hidden when a custom base URL is configured (custom endpoints don't use standard OAuth). On first launch with no credentials for any provider, a prompt guides you to set up credentials.
All changes are written to ~/.wallfacer/.env and take effect on the next task run. Leave token fields blank to preserve the existing value.
Container Images
The Container Images section at the top of Settings > Sandbox shows whether each sandbox image (Claude and Codex) is cached locally. Images are pulled automatically on first task run, but you can also manage them manually:
- Pull -- Download a missing image from the registry (~1 GB).
- Re-pull -- Update a cached image to the latest version.
- Pull progress streams live in the settings panel with a phase summary (resolving, downloading layers, writing manifest) and a layer counter.
You can also check image status from the command line with wallfacer doctor.
Key Environment Variables
All configuration lives in ~/.wallfacer/.env (auto-generated on first run). The server re-reads this file before each container launch, so changes take effect on the next task without a server restart.
| Variable | Required | Description |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN |
one of these two | OAuth token from claude setup-token (Claude Pro/Max subscription) |
ANTHROPIC_API_KEY |
one of these two | API key from console.anthropic.com (starts with sk-ant-...) |
WALLFACER_MAX_PARALLEL |
no (default: 5) |
Maximum concurrent tasks auto-promoted to In Progress |
CLI Basics
wallfacer run # Start server, restore last workspace group
wallfacer run -addr :9090 -no-browser # Custom port, no browser
wallfacer status # Print board state to terminal
wallfacer status -watch # Live-updating board state
wallfacer doctor # Check prerequisites and config
π Spec Mode
See Designing Specs for the full spec mode guide.
π¬ Planning Chat
See Exploring Ideas for the full planning chat guide.
β¨οΈ Keyboard Shortcuts
| Key | Context | Action |
|---|---|---|
N |
Board | Open new task form |
? |
Global | Show keyboard shortcuts help |
E |
Global | Toggle file explorer |
S |
Global | Toggle board/spec mode |
C |
Spec mode | Toggle chat pane |
D |
Spec mode | Dispatch focused spec as a task |
B |
Spec mode | Break down focused spec into sub-specs |
` |
Global | Toggle terminal panel |
π§ Advanced Topics
β‘ Execution Settings
Parallel Tasks -- Set the maximum number of tasks that run concurrently in the In Progress column (1--20). Corresponds to WALLFACER_MAX_PARALLEL.
Archived Tasks -- Number of archived task items to load per scroll page (1--200). Corresponds to WALLFACER_ARCHIVED_TASKS_PER_PAGE.
Oversight Interval -- Minutes between periodic oversight summary generation while a task is running (0--120). Setting this to 0 means oversight is only generated when the task reaches a terminal state. Corresponds to WALLFACER_OVERSIGHT_INTERVAL.
Auto Push -- Enable automatic git push after a task's commit pipeline completes. When enabled, an additional threshold field appears: push only triggers when the workspace is at least N commits ahead of upstream. Corresponds to WALLFACER_AUTO_PUSH and WALLFACER_AUTO_PUSH_THRESHOLD.
Brainstorm -- Enable the brainstorm (ideation) agent and set its recurrence interval. Options range from "immediately" to "every 24h". The brainstorm agent analyses repositories and proposes tasks tagged idea-agent. A "Run now" button triggers an immediate brainstorm.
Task Titles -- Select a batch limit (5, 10, 25, 50, or All) and click "Generate Missing" to auto-generate titles for untitled tasks using a lightweight model call.
Trace Oversight -- Select a batch limit and click "Generate Missing" to generate oversight summaries for tasks that lack them.
Codex Sandbox Configuration
Codex configuration:
- API Key (
OPENAI_API_KEY) -- optional when host~/.codex/auth.jsonis available - Base URL (
OPENAI_BASE_URL) -- optional custom OpenAI-compatible endpoint - Default Model (
CODEX_DEFAULT_MODEL) -- model for Codex tasks - Title Model (
CODEX_TITLE_MODEL) -- falls back to the Codex default model - Test button -- runs a Codex connectivity check
π¦ Sandbox Routing
Global Sandbox Routing -- Select the default sandbox type and override the sandbox for individual activities: Implementation, Testing, Refinement, Title generation, Oversight summary, Commit message, and Idea agent. Each dropdown offers the available sandbox types (claude, codex) or "default".
Wallfacer supports two sandbox types:
- Claude -- runs Claude Code CLI inside an Ubuntu-based container (
wallfacer:latest). Requires eitherCLAUDE_CODE_OAUTH_TOKENorANTHROPIC_API_KEY. - Codex -- runs OpenAI Codex CLI inside a companion image (
wallfacer-codex:latest). RequiresOPENAI_API_KEYor host~/.codex/auth.json.
Each task can be assigned a specific sandbox type when created or edited. The task-level sandbox selection overrides the global default for that task's implementation run.
Different agent activities can be routed to different sandbox types. For example, you could run implementation tasks on Claude but use Codex for title generation. Configure this in Settings > Sandbox > Global Sandbox Routing or via the WALLFACER_SANDBOX_* environment variables.
The seven configurable activities are:
- Implementation -- the main task execution
- Testing -- test verification agent
- Refinement -- prompt refinement agent
- Title generation -- automatic task title generation
- Oversight summary -- trace oversight analysis
- Commit message -- commit message generation
- Idea agent -- brainstorm/ideation agent
When an activity-specific override is not set, it falls back to WALLFACER_DEFAULT_SANDBOX. When that is also unset, the sandbox is determined by the task's own sandbox field or the server default (Claude).
Route specific agent activities to different sandbox types (claude or codex):
| Variable | Description |
|---|---|
WALLFACER_DEFAULT_SANDBOX |
Default sandbox for all activities |
WALLFACER_SANDBOX_IMPLEMENTATION |
Override for task implementation |
WALLFACER_SANDBOX_TESTING |
Override for test verification |
WALLFACER_SANDBOX_REFINEMENT |
Override for prompt refinement |
WALLFACER_SANDBOX_TITLE |
Override for title generation |
WALLFACER_SANDBOX_OVERSIGHT |
Override for oversight generation |
WALLFACER_SANDBOX_COMMIT_MESSAGE |
Override for commit message generation |
WALLFACER_SANDBOX_IDEA_AGENT |
Override for ideation agent |
π₯οΈ Container Resource Limits
Limit the CPU and memory available to each task container via WALLFACER_CONTAINER_CPUS and WALLFACER_CONTAINER_MEMORY. These correspond to the --cpus and --memory flags of podman run / docker run. Leave empty for no limit.
- Container CPUs (
WALLFACER_CONTAINER_CPUS) -- e.g.2.0; leave empty for no limit - Container Memory (
WALLFACER_CONTAINER_MEMORY) -- e.g.4g; leave empty for no limit
Fast Mode
When WALLFACER_SANDBOX_FAST is true (the default), Wallfacer passes fast-mode hints to the sandbox agent. Set to false to disable.
Enable /fast -- Toggle fast-mode sandbox hints (WALLFACER_SANDBOX_FAST).
π Full Environment Variables Reference
All configuration lives in ~/.wallfacer/.env (auto-generated on first run). The server re-reads this file before each container launch, so changes take effect on the next task without a server restart.
Authentication
| Variable | Required | Description |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN |
one of these two | OAuth token from claude setup-token (Claude Pro/Max subscription) |
ANTHROPIC_API_KEY |
one of these two | API key from console.anthropic.com (starts with sk-ant-...) |
ANTHROPIC_AUTH_TOKEN |
no | Bearer token for LLM gateway proxy authentication |
ANTHROPIC_BASE_URL |
no | Custom Anthropic-compatible API endpoint; when set, Wallfacer queries {base_url}/v1/models to populate the model dropdown |
Models
| Variable | Default | Description |
|---|---|---|
CLAUDE_DEFAULT_MODEL |
(Claude Code default) | Default model passed to task containers |
CLAUDE_TITLE_MODEL |
(falls back to CLAUDE_DEFAULT_MODEL) |
Model for background title generation |
OpenAI Codex
| Variable | Required | Description |
|---|---|---|
OPENAI_API_KEY |
no* | OpenAI API key; not required when valid host auth cache exists at ~/.codex/auth.json |
OPENAI_BASE_URL |
no | Custom OpenAI-compatible base URL |
CODEX_DEFAULT_MODEL |
no | Default model for Codex tasks |
CODEX_TITLE_MODEL |
no | Title generation model; falls back to CODEX_DEFAULT_MODEL |
* If host auth cache is unavailable, OPENAI_API_KEY plus a successful Test (Codex) is required.
Concurrency
| Variable | Default | Description |
|---|---|---|
WALLFACER_MAX_PARALLEL |
5 |
Maximum concurrent tasks auto-promoted to In Progress |
WALLFACER_MAX_TEST_PARALLEL |
(inherits from WALLFACER_MAX_PARALLEL) |
Maximum concurrent test runs |
Container
| Variable | Default | Description |
|---|---|---|
WALLFACER_SANDBOX_BACKEND |
local |
Sandbox backend selection (local for podman/docker) |
WALLFACER_CONTAINER_NETWORK |
-- | Container network name |
WALLFACER_CONTAINER_CPUS |
(no limit) | CPU limit per container, e.g. "2.0" |
WALLFACER_CONTAINER_MEMORY |
(no limit) | Memory limit per container, e.g. "4g" |
WALLFACER_CONTAINER_CB_THRESHOLD |
5 |
Consecutive container runtime failures before the circuit breaker opens |
WALLFACER_CONTAINER_CB_OPEN_SECONDS |
30 |
Seconds the circuit breaker stays open before probing |
WALLFACER_TASK_WORKERS |
true |
Enable per-task worker containers for container reuse. Each task gets a long-lived container that is reused across agent invocations (implementation turns, title, oversight, commit message). Set to false to always use ephemeral containers. |
WALLFACER_DEPENDENCY_CACHES |
false |
Mount named volumes for dependency caches (~/.npm, ~/.cache/pip, ~/.cargo/registry, ~/.cache/go-build) that persist across container restarts. Scoped per workspace group. |
Automation
| Variable | Default | Description |
|---|---|---|
WALLFACER_OVERSIGHT_INTERVAL |
0 |
Minutes between periodic oversight generation while a task runs (0 = only at completion) |
WALLFACER_AUTO_PUSH |
false |
Enable automatic git push after task completion |
WALLFACER_AUTO_PUSH_THRESHOLD |
1 |
Minimum commits ahead of upstream before auto-push triggers |
WALLFACER_SANDBOX_FAST |
true |
Enable fast-mode sandbox hints |
WALLFACER_TERMINAL_ENABLED |
true |
Enable the integrated host terminal panel. The Terminal button in the status bar opens an interactive shell running on the host machine via WebSocket + PTY. Supports multiple concurrent sessions with a tab bar β click "+" to add sessions, click tabs to switch, click x to close. Set to false to disable. |
Data & Pagination
| Variable | Default | Description |
|---|---|---|
WALLFACER_WORKSPACES |
-- | Workspace paths (colon-separated on Unix, semicolon on Windows); alternative to CLI arguments. On Windows, host paths are automatically translated for container volume mounts (Docker Desktop uses /c/ prefix, Podman Desktop uses /mnt/c/). |
WALLFACER_ARCHIVED_TASKS_PER_PAGE |
20 |
Pagination size for archived tasks |
WALLFACER_TOMBSTONE_RETENTION_DAYS |
7 |
Days to retain soft-deleted task data before permanent removal |
Security
| Variable | Default | Description |
|---|---|---|
WALLFACER_SERVER_API_KEY |
-- | Bearer token for server API authentication; when set, all API requests must include Authorization: Bearer <key> |
π System Prompt Templates
Wallfacer uses eight built-in Go template files to instruct agent activities:
| Template | Purpose |
|---|---|
title.tmpl |
Task title generation |
commit.tmpl |
Commit message generation |
test.tmpl |
Test verification agent |
refinement.tmpl |
Prompt refinement agent |
oversight.tmpl |
Oversight summary generation |
ideation.tmpl |
Brainstorm/ideation agent |
conflict.tmpl |
Merge conflict resolution |
instructions.tmpl |
Workspace instructions (AGENTS.md) generation |
Viewing and Editing
Open Settings > Workspace > System Prompt Templates > Manage to view all templates. Each template shows whether a user override exists. Click a template name to view its content and edit it.
Overrides are validated as Go templates before saving. If the template is invalid, the save is rejected with a parse error message.
Override Storage
User overrides are stored as .tmpl files in ~/.wallfacer/prompts/. For example, overriding the title template creates ~/.wallfacer/prompts/title.tmpl.
Restoring Defaults
Delete a user override via the template editor or the API (DELETE /api/system-prompts/{name}) to restore the embedded default.
Workspace Instructions (AGENTS.md)
What AGENTS.md Is
Each unique set of workspaces gets its own AGENTS.md file stored in ~/.wallfacer/instructions/. This file is mounted read-only into every task container at /workspace/AGENTS.md, where the agent picks it up automatically as context.
How Fingerprinting Works
The instructions file is identified by a SHA-256 hash of the sorted, absolute workspace paths. This means switching to workspaces ~/a and ~/b (in any order) shares the same instructions file, while ~/a, ~/b, and ~/c together gets a separate one.
Initial Generation
On first run with a new workspace set, Wallfacer creates the AGENTS.md from:
- A built-in default template with general agent guidance.
- A reference list of per-repository
AGENTS.md(or legacyCLAUDE.md) file paths so agents can read them on demand.
Editing
Open Settings > Workspace > AGENTS.md > Edit to modify the instructions in the web UI. Changes are saved to the fingerprinted file in ~/.wallfacer/instructions/.
Re-Initializing
Click Re-init (or call POST /api/instructions/reinit) to regenerate the instructions from the default template and current repository files, discarding any manual edits.
Prompt Templates
Prompt templates are reusable named prompt fragments for common task patterns.
Creating a Template
Open Settings > Workspace > Prompt Templates > Manage. Enter a name and body, then save. Templates are stored in ~/.wallfacer/templates.json.
Using Templates
When creating a new task, select a template from the template picker to insert its body into the prompt field. You can then edit the inserted text before submitting.
Managing Templates
From the template manager, you can view all templates sorted by creation date and delete templates you no longer need.
π₯οΈ CLI Reference
wallfacer run
Start the task board server and open the web UI.
wallfacer run [flags] [workspace...]
Positional arguments:
workspace-- directories to mount in the sandbox (default: current directory)
Flags:
| Flag | Env Var | Default | Description |
|---|---|---|---|
-addr |
ADDR |
:8080 |
Listen address |
-data |
DATA_DIR |
~/.wallfacer/data |
Task data directory |
-container |
CONTAINER_CMD |
auto-detected | Container runtime command (podman or docker) |
-image |
SANDBOX_IMAGE |
ghcr.io/changkun/wallfacer:latest |
Sandbox image name |
-env-file |
ENV_FILE |
~/.wallfacer/.env |
Env file passed to containers |
-no-browser |
-- | false |
Skip auto-opening the browser |
-log-format |
LOG_FORMAT |
text |
Log output format: text or json |
Container runtime auto-detection order: /opt/podman/bin/podman, then podman on $PATH, then docker on $PATH.
wallfacer status
Print the current board state to the terminal.
wallfacer status [flags]
| Flag | Default | Description |
|---|---|---|
-addr |
http://localhost:8080 |
Server address (or ADDR env var) |
-watch |
false |
Re-render every 2 seconds until Ctrl-C |
-json |
false |
Emit raw JSON from /api/tasks for scripting |
Examples:
wallfacer status # Snapshot of current state
wallfacer status -watch # Live-updating view
wallfacer status -json # Machine-readable JSON output
wallfacer status -addr :9090 # Connect to a different server
wallfacer doctor
Check prerequisites and configuration. Displays config paths, then verifies credentials, container runtime (including responsiveness), sandbox images, and Git.
wallfacer doctor
Output uses [ok] for passing checks, [!] for issues that need fixing, and [ ] for optional items that are not configured. Credential values are masked.
wallfacer exec
Attach an interactive shell to a running task container, or open a shell in a new sandbox container.
wallfacer exec <task-id-prefix> [-- command...]
wallfacer exec --sandbox <claude|codex> [-- command...]
<task-id-prefix>-- the first 8 or more hex characters of the task UUID (shown on task cards)--sandbox-- open a fresh sandbox container with the current directory mounted, without attaching to an existing taskcommand-- command to run inside the container (default:bash; falls back toshif bash is unavailable)
Examples:
wallfacer exec a1b2c3d4 # Attach to running task container
wallfacer exec a1b2c3d4 -- sh # Use sh instead of bash
wallfacer exec --sandbox claude # Open shell in a new Claude sandbox
wallfacer exec --sandbox codex # Open shell in a new Codex sandbox
π‘οΈ Security
Server API Key Authentication
Set WALLFACER_SERVER_API_KEY to require bearer-token authentication on all API requests. When configured, every request must include the header:
Authorization: Bearer <your-api-key>
SSE (Server-Sent Events) endpoints accept the token as a ?token= query parameter instead, since EventSource does not support custom headers.
The root page (GET /) is exempt from authentication to allow loading the UI, which then uses the token for subsequent API calls.
CSRF Protection
Wallfacer validates the Origin or Referer header on all state-changing requests (POST, PUT, PATCH, DELETE). The header host must match the server's listen address. Requests without either header (e.g., from non-browser clients like curl) are allowed through.
SSRF Hardening
Custom API base URLs (ANTHROPIC_BASE_URL, OPENAI_BASE_URL) are validated before being persisted:
- Only HTTPS URLs are accepted
- Bare IP addresses are rejected
- Single-label hostnames (e.g.,
localhost) are rejected - Hostnames that resolve to private, loopback, or link-local IP addresses are rejected
Request Body Size Limits
Request bodies are limited to prevent abuse:
| Endpoint Category | Limit |
|---|---|
| Default | 1 MiB |
| Instructions (AGENTS.md) | 5 MiB |
| Feedback | 512 KiB |
ποΈ Trash Management
View soft-deleted tasks that are within the retention window (default: 7 days, controlled by WALLFACER_TOMBSTONE_RETENTION_DAYS). Each entry shows the task prompt and deletion timestamp. You can:
- Restore a task to return it to its pre-deletion state
- Wait for the retention window to expire for automatic permanent removal
Access via Settings > Trash.
About
Displays version information, the project link (github.com/changkun/wallfacer), and license details.
Access via Settings > About.
π Workspace Settings
Active Workspaces -- Lists the directories currently mounted into task containers. Click Change to open the workspace picker and select different directories.
Saved Workspace Groups -- Previously used workspace combinations are saved automatically. Switch back to any saved group without rebuilding the folder set.
See Also
- Getting Started -- initial setup and first task
- Usage Guide -- task creation, feedback, autopilot, and results
- Circuit Breakers -- container launch failure protection
- Refinement & Ideation -- prompt refinement and brainstorm agents
- Architecture -- system design for contributors