feat(agent-pod): deploy pi coding-agent pod for in-cluster harness

Namespace + Deployment (2-4 CPU, 4-8Gi mem) running node:20-slim with
pi installed at startup, wired to the homelab-ornith/reasoning/qwen
model providers via the existing model-invoke-apikey. Placeholder
node:20-slim image for now, real harness image to follow.
This commit is contained in:
Story Crater Bot
2026-08-16 00:23:30 -07:00
parent 9b75b15aa3
commit 3620b4929c
5 changed files with 139 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: pi-config
namespace: agent-pod
data:
config.json: |
{
"autoLoadSkills": [
"caveman",
"karpathy-guidelines"
],
"skillsPath": "~/.pi/skills",
"enforceRules": {
"karpathyGuidelines": {
"enabled": true,
"strict": true,
"rules": [
"Think before coding - surface assumptions and tradeoffs",
"Simplicity first - minimum code that solves the problem",
"Surgical changes - touch only what you must",
"Goal-driven execution - define verifiable success criteria"
]
}
},
"projectSpecific": {
"homelab": {
"gitOpsOnly": true,
"noManualKubectl": true,
"rebaseOnly": true,
"cnpgPattern": "unified-app-user"
}
}
}
settings.json: |
{
"defaultModel": "qwen2.5:3b-instruct",
"defaultProvider": "homelab-qwen",
"defaultThinkingLevel": "medium",
"theme": "light"
}
+46
View File
@@ -0,0 +1,46 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: agent-pod
namespace: agent-pod
spec:
replicas: 1
selector:
matchLabels:
app: agent-pod
template:
metadata:
labels:
app: agent-pod
spec:
containers:
- name: pi
image: node:20-slim
command:
- sh
- -c
- "npm install -g @earendil-works/[email protected] && sleep infinity"
resources:
requests:
cpu: "2"
memory: 4Gi
limits:
cpu: "4"
memory: 8Gi
volumeMounts:
- name: pi-config
mountPath: /root/.pi/config.json
subPath: config.json
- name: pi-config
mountPath: /root/.pi/agent/settings.json
subPath: settings.json
- name: pi-models
mountPath: /root/.pi/agent/models.json
subPath: models.json
volumes:
- name: pi-config
configMap:
name: pi-config
- name: pi-models
secret:
secretName: pi-models
+6
View File
@@ -0,0 +1,6 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: agent-pod
resources:
- deployment.yaml
- configmap.yaml
+23
View File
@@ -84,6 +84,29 @@ spec:
syncOptions:
- CreateNamespace=true
---
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: agent-pod
namespace: argocd
annotations:
argocd.argoproj.io/sync-wave: "8"
spec:
project: homelab
source:
repoURL: https://github.com/Riotpiaole/riotpiao.homelab.com.git
targetRevision: main
path: k8s/apps/agent-pod
destination:
server: https://kubernetes.default.svc
namespace: agent-pod
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true
---
# iMessage/SMS delivery. Raw manifests: a privileged macOS VM (Docker-OSX)
# running the BlueBubbles server, plus its dedicated local StorageClass.
#
@@ -0,0 +1,23 @@
apiVersion: ENC[AES256_GCM,data:14E=,iv:Yn6YBsUfovWOVtf1hnEs1Ik51lZMp6/xxqnvzoxMgKo=,tag:cK5OnF87og+gqtg0Z34hLQ==,type:str]
kind: ENC[AES256_GCM,data:0jXc1dAD,iv:LvMgwGEQ0BRXElkr6jZVrr7j+WsFUKwB6tlHu/pnc1g=,tag:FOpJOzJobFaZuj4h2LsQqQ==,type:str]
metadata:
name: ENC[AES256_GCM,data:1qwIvq1m5NDH,iv:qRno92eJrWQ9m7gdudfNw/lUGQiDVI7tKXfIA2ePW5Q=,tag:l4IjZ5lzY7pYg9NuMRTOQw==,type:str]
namespace: ENC[AES256_GCM,data:Jxb8Rc91TtRA,iv:Fb1NzwxL4g/T5IsnFpPeAgG6VowM5m5jIwtyc9KfwMk=,tag:T0dg51rZ+0TRREo7J/NK9A==,type:str]
type: ENC[AES256_GCM,data:utgCSGXC,iv:GukJ0oAORZS24IxS0TnK9kuFbK8IEoC2NIPQV0OGpYc=,tag:BjjIAzYio1HHrgbiSXETug==,type:str]
stringData:
models.json: ENC[AES256_GCM,data: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,iv:wPOMkbODxIVYHyzQ61EGujK3/gvjPkBSaZ80plmY8Ug=,tag:a1yxmGj7pnwoXq2HjXBlFg==,type:str]
sops:
age:
- enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBKdUZQcXoyUFFUOGQ5TUw4
WTVyTWZoWUQ4YkYwV2FFMENpbko4QUlzN0YwCnpZZm9TYnB0TjdJRzV6OVREM0Qy
OGJXdUJJejdJQjEyQWpkZEJMKzF3VlEKLS0tIGxoSndLdkZPTWNUZ3IyKzlrTnZu
aG0yS1o1VmFmcjdBVlc3eHNqazU3SG8KjOkqI4Qmaoyr0RTV8bFbuaaGoYKmbWCY
ZZz3kcax8PuoS8clzYFIgBTnV/jCspODsuWLVDQXs8iKysnI6w+GPg==
-----END AGE ENCRYPTED FILE-----
recipient: age1e5fq3hwxy78psus2nfvmtmua36g0u3suk78ephw6246l974d2utsvn0hla
lastmodified: "2026-08-16T07:20:03Z"
mac: ENC[AES256_GCM,data:LucvLtHREgLD5k4f50Zy6Isix2GbuMhz0Li4JRMY9Q/4vEKikX6ArtgJmNR2hySit7tj7tsptNTMyheaeRfVjQ3EtkQDokbYw7CdSWyD6J3+rrIo9Pe8WdilNjz1u+TDjhIQWQjgjJskewjp95ofnVJ2WtwFnENRWNdL8aJe/hI=,iv:vDbhjRyRU3QvOTUfxlp2C/2p5mmehqDixc8yyr0Sk2A=,tag:ABnWz2Dl2d4rQNdfIfN7/g==,type:str]
unencrypted_suffix: _unencrypted
version: 3.13.2