Includes: - Dockerfile (ubuntu:24.04 base, OpenClaw + PAI/Claude Code) - entrypoint.sh (three-way init, TLS, device auth, memory search baking) - openclaw.json (OpenClaw config template) - claude-settings.json (PAI settings template) - workspace-seed/ (AGENTS.md + BOOTSTRAP.md seeded into agent workspace) - deployment.yaml (Kubernetes PVC + Deployment + Service manifest) - openclaw-pai.env.fish (Fish shell env file for all container vars) Image: registry.nerdrage.cloud/spaceacemonkey/openclaw-pai:0.0.2
247 lines
7.1 KiB
JSON
247 lines
7.1 KiB
JSON
{
|
|
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
"env": {
|
|
"PAI_DIR": "${PAI_DIR}",
|
|
"PROJECTS_DIR": "${PROJECTS_DIR}",
|
|
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": "80000",
|
|
"BASH_DEFAULT_TIMEOUT_MS": "600000",
|
|
"PAI_CONFIG_DIR": "${PAI_CONFIG_DIR}",
|
|
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
|
|
"ANTHROPIC_BASE_URL": "${ANTHROPIC_BASE_URL}",
|
|
"ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
|
|
"ANTHROPIC_MODEL": "${ANTHROPIC_MODEL}",
|
|
"ANTHROPIC_SMALL_FAST_MODEL": "${ANTHROPIC_SMALL_FAST_MODEL}",
|
|
"VOICE_SERVER_URL": "${VOICE_SERVER_URL}"
|
|
},
|
|
"permissions": {
|
|
"allow": [
|
|
"Bash",
|
|
"Read",
|
|
"Write",
|
|
"Edit",
|
|
"MultiEdit",
|
|
"Glob",
|
|
"Grep",
|
|
"LS",
|
|
"WebFetch",
|
|
"WebSearch",
|
|
"NotebookRead",
|
|
"NotebookEdit",
|
|
"TodoWrite",
|
|
"ExitPlanMode",
|
|
"Task",
|
|
"Skill",
|
|
"mcp__*"
|
|
],
|
|
"deny": [],
|
|
"ask": [
|
|
"Bash(rm -rf /)",
|
|
"Bash(rm -rf /:*)",
|
|
"Bash(sudo rm -rf /)",
|
|
"Bash(sudo rm -rf /:*)",
|
|
"Bash(rm -rf ~)",
|
|
"Bash(rm -rf ~:*)",
|
|
"Bash(rm -rf ~/.claude)",
|
|
"Bash(rm -rf ~/.claude:*)",
|
|
"Bash(diskutil eraseDisk:*)",
|
|
"Bash(diskutil zeroDisk:*)",
|
|
"Bash(diskutil partitionDisk:*)",
|
|
"Bash(diskutil apfs deleteContainer:*)",
|
|
"Bash(diskutil apfs eraseVolume:*)",
|
|
"Bash(dd if=/dev/zero:*)",
|
|
"Bash(mkfs:*)",
|
|
"Bash(gh repo delete:*)",
|
|
"Bash(gh repo edit --visibility public:*)",
|
|
"Bash(git push --force:*)",
|
|
"Bash(git push -f:*)",
|
|
"Bash(git push origin --force:*)",
|
|
"Bash(git push origin -f:*)",
|
|
"Read(~/.ssh/id_*)",
|
|
"Read(~/.ssh/*.pem)",
|
|
"Read(~/.aws/credentials)",
|
|
"Read(~/.gnupg/private*)",
|
|
"Write(~/.claude/settings.json)",
|
|
"Edit(~/.claude/settings.json)",
|
|
"Write(~/.ssh/*)",
|
|
"Edit(~/.ssh/*)"
|
|
],
|
|
"defaultMode": "default"
|
|
},
|
|
"enableAllProjectMcpServers": true,
|
|
"enabledMcpjsonServers": [],
|
|
"hooks": {
|
|
"PreToolUse": [
|
|
{
|
|
"matcher": "Bash",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/SecurityValidator.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Edit",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/SecurityValidator.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Write",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/SecurityValidator.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Read",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/SecurityValidator.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "AskUserQuestion",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/SetQuestionTab.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Task",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/AgentExecutionGuard.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Skill",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/SkillGuard.hook.ts"}]
|
|
}
|
|
],
|
|
"PostToolUse": [
|
|
{
|
|
"matcher": "AskUserQuestion",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/QuestionAnswered.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Write",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/PRDSync.hook.ts"}]
|
|
},
|
|
{
|
|
"matcher": "Edit",
|
|
"hooks": [{"type": "command", "command": "${PAI_DIR}/hooks/PRDSync.hook.ts"}]
|
|
}
|
|
],
|
|
"SessionEnd": [
|
|
{
|
|
"hooks": [
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/WorkCompletionLearning.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/SessionCleanup.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/RelationshipMemory.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/UpdateCounts.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/IntegrityCheck.hook.ts"}
|
|
]
|
|
}
|
|
],
|
|
"UserPromptSubmit": [
|
|
{
|
|
"hooks": [
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/RatingCapture.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/UpdateTabTitle.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/SessionAutoName.hook.ts"}
|
|
]
|
|
}
|
|
],
|
|
"SessionStart": [
|
|
{
|
|
"hooks": [
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/KittyEnvPersist.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/LoadContext.hook.ts"},
|
|
{"type": "command", "command": "bun ${PAI_DIR}/hooks/handlers/BuildCLAUDE.ts"}
|
|
]
|
|
}
|
|
],
|
|
"Stop": [
|
|
{
|
|
"hooks": [
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/LastResponseCache.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/ResponseTabReset.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/VoiceCompletion.hook.ts"},
|
|
{"type": "command", "command": "${PAI_DIR}/hooks/DocIntegrity.hook.ts"}
|
|
]
|
|
}
|
|
]
|
|
},
|
|
"statusLine": {
|
|
"type": "command",
|
|
"command": "$PAI_DIR/statusline-command.sh"
|
|
},
|
|
"plansDirectory": "Plans/",
|
|
"loadAtStartup": {
|
|
"_docs": "Files force-loaded into session context at startup by LoadContext.hook.ts. Paths relative to PAI_DIR.",
|
|
"files": [
|
|
"PAI/AISTEERINGRULES.md",
|
|
"PAI/USER/AISTEERINGRULES.md",
|
|
"PAI/USER/PROJECTS/PROJECTS.md"
|
|
]
|
|
},
|
|
"dynamicContext": {
|
|
"_docs": "Dynamic context sections injected by LoadContext.hook.ts at session start.",
|
|
"relationshipContext": true,
|
|
"learningReadback": true,
|
|
"activeWorkSummary": true
|
|
},
|
|
"contextFiles": [],
|
|
"mcpServers": {},
|
|
"teammateMode": "in-process",
|
|
"daidentity": {
|
|
"name": "${PAI_AGENT_NAME}",
|
|
"fullName": "Seift — Personal AI",
|
|
"displayName": "SEIFT",
|
|
"color": "#3B82F6",
|
|
"voices": {
|
|
"main": {
|
|
"voiceId": "am_adam",
|
|
"stability": 0.35,
|
|
"similarityBoost": 0.8,
|
|
"style": 0.9,
|
|
"speed": 1.1
|
|
}
|
|
},
|
|
"personality": {
|
|
"enthusiasm": 75,
|
|
"energy": 80,
|
|
"expressiveness": 85,
|
|
"resilience": 85,
|
|
"composure": 70,
|
|
"optimism": 75,
|
|
"warmth": 70,
|
|
"formality": 30,
|
|
"directness": 80,
|
|
"precision": 95,
|
|
"curiosity": 90,
|
|
"playfulness": 45
|
|
},
|
|
"startupCatchphrase": "Seift here, ready to go",
|
|
"voiceId": "am_adam"
|
|
},
|
|
"principal": {
|
|
"name": "Shannon",
|
|
"timezone": "America/New_York"
|
|
},
|
|
"pai": {
|
|
"repoUrl": "https://github.com/danielmiessler/PAI",
|
|
"version": "4.0.3",
|
|
"algorithmVersion": "3.7.0"
|
|
},
|
|
"preferences": {
|
|
"temperatureUnit": "fahrenheit"
|
|
},
|
|
"contextDisplay": {
|
|
"compactionThreshold": 83
|
|
},
|
|
"techStack": {
|
|
"packageManager": "bun",
|
|
"language": "TypeScript"
|
|
},
|
|
"notifications": {
|
|
"ntfy": {"enabled": false},
|
|
"discord": {"enabled": false},
|
|
"twilio": {"enabled": false},
|
|
"thresholds": {"longTaskMinutes": 5},
|
|
"routing": {
|
|
"taskComplete": [],
|
|
"longTask": ["ntfy"],
|
|
"backgroundAgent": ["ntfy"],
|
|
"error": ["ntfy"],
|
|
"security": ["ntfy"]
|
|
}
|
|
},
|
|
"max_tokens": 16000,
|
|
"feedbackSurveyState": {
|
|
"lastShownTime": 1735430400000
|
|
}
|
|
}
|