尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Your always-on platform engineer — from service provisioning to incident resolution. AWS/GCP/Azure.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Your always-on platform engineer — from service provisioning to incident resolution.
AWS-native platform agent that covers both Day 1 and Day 2 workflows: provision infrastructure, validate deployments, track service health, and respond to incidents.
Status: personal research project, not a product. Some paths have been run end to end against
real infrastructure, others are implemented and unit-tested only — see
Verification status and Known limitations.
The current, dated state lives in docs/STATUS.md.
Slack / Jira / GitHub / Alarm
→ Router Agent
→ Provisioning Agent (CDK + IAM + cost estimate)
→ Deployment Agent (smoke test + canary + rollback)
→ Operations Agent (detect + analyze + decide + execute)
→ Guardian Agent (policy-as-code gatekeeper)
Natural Language Request
→ Strands Agent (AWS — Bedrock Claude)
→ ADK Agent (GCP — Gemini 3.5 Flash)
→ MS Agent Framework (Azure — AI Foundry)
→ On-Prem Agent (On-Prem — local Qwen3-Coder-30B-A3B via MLX, or an API key)
→ Guardian Agent (Policy: APPROVE / AUTO / REJECT)
→ E2E Pipeline DAG (plan→guard→build→push→deploy→validate→report)
Most AWS tooling solves only one slice of the platform lifecycle. platform-agent connects the full loop.
| Tool | What it does |
|---|---|
| PagerDuty / OpsGenie | Pages a human |
| CloudWatch Alarms | Emits an incident signal |
| Internal platform scripts | Provision or deploy one step at a time |
| platform-agent | Provisions → validates deploys → tracks SLOs → responds to incidents |
Slack / Jira / GitHub / Alarm
│
▼
Router Agent + Overnight Harness
│
├─ Provisioning Agent
│ CDK generation, IAM design, cost estimation
│
├─ Deployment Agent
│ Smoke test, canary analysis, rollback decision
│
└─ Operations Agent
Detector → Analyzer → Decision → Executor
CloudWatch Logs/X-Ray → Bedrock RCA → SSM/Slack
Key service choices (SAP-aligned):
More detail: docs/ARCHITECTURE.md · flow walkthrough: GUIDE.md (Korean).
| Alarm type | Runbook | Auto actions |
|---|---|---|
| EKS pod OOM / restart loop | eks-pod-oom | Restart pod → Scale node group |
| Lambda throttling | lambda-throttle | Increase reserved concurrency |
| RDS CPU high | rds-cpu-high | Scale instance → Add read replica |
| Kafka consumer lag | kafka-lag-spike | Scale consumer group → Rebalance |
| Disk full | disk-full | Cleanup disk → Expand volume |
| Health check failure | health-check-failure | Restart workload → Rollback release |
| Certificate expiry | certificate-expiry | Renew certificate → Notify ops |
| Network latency high | network-latency-high | Drain node → Scale out |
| Any other alarm | generic-recovery | Slack alert only |
Runbooks are capability-based (src/agents/runbooks/catalog.py), so the same plan resolves to
provider-specific actions. Custom runbooks can be registered in DynamoDB (incident-runbooks table);
deployments seed the built-in catalog into that table by default.
Scheduled reporting jobs generate daily SLO summaries, weekly on-call reports, and monthly capacity recommendations.
| Severity | Mode | Behaviour |
|---|---|---|
| P1 | AUTO | SSM executes immediately, polls to completion |
| P2 | APPROVE | Slack interactive approval request sent, Step Functions waits up to 1h |
| P3 | MANUAL | No execution — incident recorded, Slack notified |
Safety override: any action containing Delete, Drop, or Terminate is forced to APPROVE regardless of severity.
Notification-type actions run in-process in the executor rather than as SSM documents
(D17).
Long-lived cloud keys are avoided where the code path allows it.
The remediation executor retries in a standby location when the primary fails:
AWS_FAILOVER_REGION for SSM, GCP_FAILOVER_CLUSTER_NAME for GKE / Cloud Run,
AZURE_FAILOVER_CLUSTER_ID for AKS / Function Apps. Covered by unit tests; no live regional
failover drill has been run.
dashboard/)Admin, Operator, Viewer, mapped through a DynamoDB override table; the /users
panel prevents an admin from demoting themselves./audit.make dev-up starts a local MLX model server (Qwen3-Coder-30B-A3B, Apple Silicon), a tool-call
proxy, the router API, the on-prem Alertmanager webhook, and the dashboard. On a local kind cluster
the agent provisions, deploys, verifies, and rolls back workloads behind an approval gate.
Kubernetes add-ons (GitOps, Argo Rollouts, logging, tracing, PSS restricted) and kagent A2A are wired
in for the on-prem path.
What was actually run, as opposed to what is implemented. Dates are when it was observed, not a
claim about the current remote state. docs/evidence/ holds the raw logs.
| Area | What was run | Evidence |
|---|---|---|
| AWS pipeline + Slack approval | CDK deploy; alarm → Bedrock RCA → Slack Approve/Reject → Step Functions resume; real LLM severities P1/P2/P3 observed (2026-07-19) | slack-interactive-approval-live.log |
| Dashboard OIDC deploy trigger | Vercel OIDC → AWS, dashboard-triggered deploy (2026-07-18) | oauth-deploy-trigger-live.log |
| Terraform reference module | terraform apply → verify EKS → destroy (2026-07-19) | terraform-aws-production-apply-live.log |
| Helm chart / state store | kind install with RBAC checks; Alertmanager → multi-replica shared state | helm-kind-live-install.log, state-store-alertmanager-live.log |
| On-prem deploy loop | local kind: 3 normal deploys, 2 identity rejections, 2 recoveries after failure, 2 mid-run reloads (2026-10-03) | dogfood-20261003/README.md |
| On-prem add-ons | GitOps, rollouts + analysis, logging, tracing, netpol tenancy, PSS restricted | onprem-*-e2e.log |
| Azure AI Foundry hosting adapter | Foundry project + model deployment + Responses API query (2026-07) | docs/archive/progress-2026-07.md |
| GCP / Azure remediation runners | REST runners for GKE / Cloud Run / AKS — unit tests only | tests/test_multicloud_runners.py |
| MS Agent Framework deployer | Fixed to the library's real FoundryChatClient and checked against the installed library — no Azure call (2026-10-25) | msft-deployer-20261025/ |
| Local-model diagnosis | Repeated cold/warm and sampled runs; format and citation checks pass, semantic quality does not meet the bar | diagnosis-20261020/ |
Gate: make check → 3390 passed, 3 skipped (2026-10-25, local macOS, Python 3.13.5). CI runs the gate on every PR to main.
Passing tests verify the code paths they cover; they are not evidence of live behaviour.
execution_authorized: false.
Marked injected instructions (e.g. SYSTEM:) in supplied logs are refused by code; unmarked ones
are not detected (STATUS Risk 14). Diagnoses go to human review and never trigger execution.requires-python = ">=3.13")aws configure) for the AWS pathgit clone https://github.com/men16922/platform-agent
cd platform-agent
# Python dependencies
pip install -e ".[dev]"
# CDK dependencies
cd src/stacks && npm install && cd ../..
make check # the gate: full pytest suite, including the TypeScript/CDK checks it drives
make mlx-setup # one-time: MLX venv
make local-cluster # kind cluster + local registry
make dev-up # MLX + proxy + router + webhook + dashboard → http://localhost:3000
make dev-status # check; make dev-down to stop
cp .env.example .env
# Edit .env:
# SLACK_WEBHOOK_URL = your Slack incoming webhook
# SLACK_SIGNING_SECRET = your Slack app signing secret
# AWS_REGION = your target region
cd src/stacks
export CDK_DEFAULT_ACCOUNT=$(aws sts get-caller-identity --query Account --output text)
export CDK_DEFAULT_REGION=ap-northeast-2
npx cdk deploy -c vercelTeamSlug=<your-vercel-team> -c vercelProjectName=<your-vercel-project>
Always pass the Vercel context: deploying without it once deleted the dashboard's OIDC provider
(STATUS Risk 1). After deploy, set the ApprovalBridgeFunctionUrl CloudFormation output as your
Slack app's Interactivity Request URL so the Approve / Reject buttons can call back into the
pipeline (docs/SLACK_APP_SETUP.md).
# Trigger a test alarm manually
aws cloudwatch set-alarm-state \
--alarm-name "your-alarm-name" \
--state-value ALARM \
--state-reason "Manual test"
platform-agent/
├── scripts/overnight/ # Overnight harness state (gate, settings, logs)
│ ├── overnight-settings.json # Claude permission boundary
│ ├── opencode.json # opencode permission config
│ └── Makefile.harness.snippet # Makefile integration
│
├── infra/
│ ├── local/ # kind cluster for on-prem testing
│ ├── helm/platform-agent/ # Helm chart
│ └── terraform/aws-production/ # Reference module (verified once, then destroyed)
│
├── .claude/harness-config.json # Per-repo harness config (doc paths, gate, engine)
├── .kiro/ # Kiro CLI agent profile + steering docs
├── .codex/rules/overnight.rules # Codex permission rules
│
├── src/
│ ├── agents/
│ │ ├── models.py # Shared dataclasses (AlarmContext → ExecutorOutput)
│ │ ├── provisioning/ # Day 1: CDK gen + manifest gen + CLI
│ │ ├── deployment/ # Smoke/canary/rollback helpers
│ │ ├── operations/ # Canonical Day 2 handlers + reporting
│ │ ├── runbooks/ # Capability-based runbook catalog + schema
│ │ ├── adapters/deployment/ # Multi-cloud adapters (onprem/aws/gcp/azure)
│ │ └── ai/
│ │ ├── strands_deployer.py # Strands Agent (AWS/Local — Bedrock)
│ │ ├── adk_deployer.py # ADK Agent (GCP — Gemini)
│ │ ├── msft_deployer.py # MS Agent Framework (Azure — Foundry)
│ │ ├── local_deployer.py # On-prem agent (local model)
│ │ ├── model_router.py # Request routing + tool-call tracing
│ │ ├── snapshot_diagnosis.py # Supplied-snapshot diagnosis contract
│ │ ├── guardian.py # Guardian Agent (policy gatekeeper)
│ │ ├── policy_engine.py # YAML policy parser/evaluator
│ │ ├── pipeline.py # E2E Pipeline DAG
│ │ ├── orchestrator.py # CLI entry point
│ │ ├── a2a_card.json # A2A protocol Agent Card
│ │ ├── policies/ # deploy-policy.yaml
│ │ ├── tools/ # @tool functions (build/push/deploy/validate/rollback)
│ │ └── gateway/ # MCP Server + A2A Server + Bridge
│ ├── stacks/ # CDK v2 TypeScript
│ └── step_functions/ # State machine JSON
│
├── dashboard/ # Next.js operations console
│
├── docs/
│ ├── AGENT_BRIEF.md · STATUS.md · NEXT_PLAN.md # current state (entry points)
│ ├── ARCHITECTURE.md · DECISIONS.md # design + decision log
│ ├── evidence/ # raw logs of live runs and measurements
│ └── plans/ # dated plans
│
├── examples/
│ └── orders-api.yaml # ServiceSpec example
│
└── tests/ # pytest suite (see gate count above)
Docs index: docs/README.md.
Each agent has its own IAM role. No shared execution role.
| Agent | Permissions |
|---|---|
| Detector | logs:StartQuery, xray:GetTraceSummaries, cloudwatch:GetMetricStatistics |
| Analyzer | bedrock:InvokeModel (scoped to model ARN), dynamodb:GetItem on incident table |
| Decision | dynamodb:GetItem on runbook table, sns:Publish on alert topic |
| Executor | ssm:StartAutomationExecution (scoped to specific document prefixes), dynamodb:PutItem |
Defined in src/stacks/incident_agent_stack.ts.
This project uses the claude-overnight-harness plugin for unattended AI-assisted development loops.
The harness drives a headless coding agent (Claude, Codex, opencode, AGY, or Kiro) one iteration at a time, verifying a gate command after each commit.
# Install the plugin (Claude surface)
/plugin marketplace add https://github.com/men16922/claude-overnight-harness.git
/plugin install overnight-harness@overnight-harness
# Run a single iteration (smoke test)
MAX_ITER=1 GATE_CMD="pytest tests/ -v" make overnight-once
# Run overnight loop
ENGINE=kiro KIRO_AGENT=overnight-harness MAX_ITER=20 make overnight
# Check status
make overnight-status
make overnight-logs
make overnight-stop
Config: .claude/harness-config.json | Permissions: scripts/overnight/overnight-settings.json
See the plugin repository for details.
Done:
Open:
The authoritative open-work list is docs/NEXT_PLAN.md.
MIT