feat: Claude Code Monitor — lanes, pipelines and a merged workspace

Internal SmartGift build of a Claude Code monitoring dashboard.

Lanes: a durable unit of parallel agent work, one per working directory,
tracked across session restarts. Managed lanes are git worktrees the
dashboard provisions and can reset or remove behind a three-check destroy
guard and a counted preflight; adopted lanes are directories you already
own and are never destroyable.

Pipelines: a lane moves through pipeline stages. A stage the agent declares
with evidence renders green; a stage inferred from the tool-event stream
renders dashed amber and never counts as done. Detection is forward-only
within a 30-minute window, and never writes the declared stage.

Workspace: one page at /run with a lane grid, the selected lane's pipeline,
and a full Claude console behind a disclosure.
This commit is contained in:
2026-07-29 17:07:45 +07:00
commit 57dc91585d
783 changed files with 221743 additions and 0 deletions
@@ -0,0 +1,36 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
metadata:
name: agent-monitor-dev
namespace: agent-monitor
resources:
- ../../base
images:
- name: ${IMAGE_REGISTRY}/agent-monitor
newName: agent-monitor
newTag: dev
configMapGenerator:
- name: agent-monitor-config
behavior: merge
literals:
- NODE_ENV=development
- LOG_LEVEL=debug
patches:
# Disable HPA in dev (single replica, no autoscaling needed)
- target:
kind: HorizontalPodAutoscaler
name: agent-monitor
patch: |
$patch: delete
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: agent-monitor
# Deployment overrides for dev
- path: patches/deployment-patch.yaml
@@ -0,0 +1,22 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: agent-monitor
namespace: agent-monitor
spec:
# Single replica for dev
replicas: 1
template:
spec:
# Remove anti-affinity in dev (single node is fine)
affinity: null
topologySpreadConstraints: []
containers:
- name: agent-monitor
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "256Mi"
cpu: "250m"
@@ -0,0 +1,26 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
metadata:
name: agent-monitor-production
namespace: agent-monitor
resources:
- ../../base
patches:
- path: patches/deployment-patch.yaml
- path: patches/hpa-patch.yaml
images:
- name: ${IMAGE_REGISTRY}/agent-monitor
newName: agent-monitor
newTag: latest
configMapGenerator:
- name: agent-monitor-config
behavior: merge
literals:
- NODE_ENV=production
- LOG_LEVEL=warn
@@ -0,0 +1,42 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: agent-monitor
namespace: agent-monitor
spec:
replicas: 3
template:
spec:
# Production: require spreading across nodes
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app.kubernetes.io/name
operator: In
values:
- agent-monitor
topologyKey: kubernetes.io/hostname
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app.kubernetes.io/name: agent-monitor
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app.kubernetes.io/name: agent-monitor
containers:
- name: agent-monitor
resources:
requests:
memory: "256Mi"
cpu: "200m"
limits:
memory: "1Gi"
cpu: "1000m"
@@ -0,0 +1,26 @@
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: agent-monitor
namespace: agent-monitor
spec:
minReplicas: 3
maxReplicas: 20
behavior:
scaleDown:
stabilizationWindowSeconds: 600
policies:
- type: Pods
value: 1
periodSeconds: 120
selectPolicy: Min
scaleUp:
stabilizationWindowSeconds: 60
policies:
- type: Pods
value: 4
periodSeconds: 60
- type: Percent
value: 100
periodSeconds: 60
selectPolicy: Max
@@ -0,0 +1,25 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
metadata:
name: agent-monitor-staging
namespace: agent-monitor
resources:
- ../../base
patches:
- path: patches/deployment-patch.yaml
images:
- name: ${IMAGE_REGISTRY}/agent-monitor
newName: agent-monitor
newTag: staging
configMapGenerator:
- name: agent-monitor-config
behavior: merge
literals:
- NODE_ENV=staging
- LOG_LEVEL=info
@@ -0,0 +1,18 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: agent-monitor
namespace: agent-monitor
spec:
replicas: 2
template:
spec:
containers:
- name: agent-monitor
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "500m"