feat: initial commit — openclaw-pai container image build files

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
This commit is contained in:
Falkan
2026-03-26 20:52:08 -04:00
commit 1bdb48f04b
8 changed files with 1569 additions and 0 deletions

246
claude-settings.json Normal file
View File

@@ -0,0 +1,246 @@
{
"$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
}
}