Most skills configuration lives under skills in
~/.apus/apus.json. Agent-specific visibility lives under
agents.defaults.skills and agents.entries.*.skills.
{
skills: {
allowBundled: ["gemini", "peekaboo"],
load: {
extraDirs: ["~/path/to/agent-scripts/skills"],
allowSymlinkTargets: ["~/path/to/skills"],
watch: true,
},
install: {
preferBrew: true,
nodeManager: "npm",
allowUploadedArchives: false,
},
workshop: {
autonomous: { mode: "auto" },
maxSkillBytes: 40000,
},
entries: {
"image-lab": {
enabled: true,
apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" },
env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
},
peekaboo: { enabled: true },
sag: { enabled: false },
},
},
}
For built-in image generation, use agents.defaults.mediaModels.image
plus the core image_generate tool instead of skills.entries. Skill
entries are for custom or third-party skill workflows only.
Loading (skills.load)
skills.load.extraDirs string[]
Additional skill directories to scan, at the lowest precedence (below
bundled and plugin skills). Paths are expanded with ~ support.
skills.load.allowSymlinkTargets string[]
Trusted real target directories that symlinked skill folders may resolve
into, even when the symlink lives outside the configured root. Use this for
intentional sibling-repo layouts such as
<workspace>/skills/manager -> ~/path/to/skills. Keep this list
narrow — do not point at broad roots like ~ or a whole projects directory.
skills.load.watch boolean
Watch skill folders and refresh the skills snapshot when SKILL.md files
change. Covers nested files under grouped skill roots.
Install (skills.install)
skills.install.preferBrew boolean
Prefer Homebrew installers when brew is available.
skills.install.nodeManager "npm" | "pnpm" | "yarn" | "bun"
Node package manager preference for skill installs. This only affects skill
installs. Node remains the primary and recommended Apus runtime; Bun 1.4+
with WAL-reset-safe node:sqlite is supported as an explicit runtime opt-in.
apus setup --node-manager and apus onboard --node-manager accept
npm, pnpm, or bun; set "yarn" directly in config for Yarn-backed skill
installs. Setup preserves this preference unless you pass --node-manager;
fresh configurations default to npm.
skills.install.allowUploadedArchives boolean
Allow trusted operator.admin Gateway clients to install private zip
archives staged through skills.upload.*. Normal ClawHub installs do not
need this setting.
Operator Install Policy (security.installPolicy)
Use security.installPolicy when operators need a trusted local command to
approve or block skill and plugin installs with host-specific policy. The
policy runs after Apus has staged source material and before the install
or update continues. It applies to ClawHub skills, uploaded skills, Git/local
skills, skill dependency installers, and plugin install/update sources.
{
security: {
installPolicy: {
enabled: true,
// Omit targets to cover every supported target.
targets: ["skill", "plugin"],
exec: {
source: "exec",
command: "/usr/local/bin/apus-install-policy",
args: ["--json"],
timeoutMs: 10000,
noOutputTimeoutMs: 10000,
maxOutputBytes: 1048576,
passEnv: ["APUS_STATE_DIR", "PATH"],
env: { POLICY_MODE: "strict" },
trustedDirs: ["/usr/local/bin"],
},
},
},
}
security.installPolicy.enabled boolean
Enables operator-owned install policy. When enabled without a valid exec
command, installs fail closed.
security.installPolicy.targets ("skill" | "plugin")[]
Optional target filter. When omitted, policy applies to every supported target so new installs do not unexpectedly fail open.
security.installPolicy.exec.command string
Absolute path to the trusted policy executable. Apus runs it without a shell and validates the path before use.
security.installPolicy.exec.args string[]
Static arguments passed after command.
security.installPolicy.exec.timeoutMs number
Maximum wall-clock runtime for one policy decision.
security.installPolicy.exec.noOutputTimeoutMs number
Maximum time without stdout or stderr output before the policy fails closed.
security.installPolicy.exec.maxOutputBytes number
Maximum combined stdout and stderr bytes accepted from the policy process.