You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -468,23 +468,25 @@ Zero IT friction. Employees self-service in 30 seconds. Admins see all connectio
468
468
469
469
---
470
470
471
-
**What you're deploying:** A multi-tenant enterprise AI platform — a gateway layer (Tenant Router + Admin Console) routes requests to isolated Firecracker microVMs via AWS Bedrock AgentCore. Two Docker images, two Runtimes (Standard + Executive), one DynamoDB table, one S3 bucket. Optional ECS Fargate always-on agents for scheduled tasks and direct IM.
471
+
**What you're deploying:** A multi-tenant enterprise AI platform — a gateway layer (Tenant Router + Admin Console) routes requests to isolated Firecracker microVMs via AWS Bedrock AgentCore. One Docker image serves both AgentCore (serverless) and ECS Fargate (always-on). 4 AgentCore Runtimes (Standard/Restricted/Engineering/Executive), one DynamoDB table, one S3 bucket, one ECS cluster with 4 tier services.
472
472
473
-
**Run Docker builds on the gateway EC2, not the user's local machine.**After Step 1 creates the EC2, use SSM to build on it — the EC2 is ARM64 Graviton, has Docker pre-installed, and has fast internal network to ECR. Building ARM64 images locally via QEMU emulation is slow and error-prone. Use `enterprise/agent-container/build-on-ec2.sh` for the standard image; adapt the same pattern for exec-agent (Step 1.5).
473
+
**Run Docker builds on the gateway EC2, not the user's local machine.**`deploy.sh` handles this automatically — packages source → S3 → EC2 builds via SSM (ARM64 Graviton). No local Docker required.
474
474
475
475
**Critical — these will silently break deployment if missed:**
476
476
477
-
1.**The `openclaw` npm package is pinned to `2026.3.24`** in `agent-container/Dockerfile` and `exec-agent/Dockerfile` — do not upgrade. Newer versions changed the Gateway response delivery mechanism and break IM channel integration. (The single-user EC2 template supports `2026.4.5+` but Enterprise remains on `2026.3.24`.)
478
-
2.**Build both Docker images** — `agent-container/` (standard) and `exec-agent/` (executive). Don't skip exec even if only standard agents are needed initially.
479
-
3.**Docker build takes 10–15 min** — `clawhub install` installs skills one by one. This is normal.
480
-
4.**After `update-agent-runtime`**, poll until `status: READY` before testing.
481
-
5.**DynamoDB is in `us-east-2` by default** (AgentCore is `us-east-1`). This is intentional — DynamoDB cross-region access is free and `us-east-2` avoids hitting AgentCore's region during heavy load.
477
+
1.**OpenClaw is pinned to `2026.3.24`** in `agent-container/Dockerfile` and `exec-agent/Dockerfile` — do not upgrade. Newer versions changed Gateway response delivery and break IM channel integration. (The single-user EC2 template supports `2026.4.5+` but Enterprise remains on `2026.3.24`.)
478
+
2.**Docker build takes 10–15 min** — `clawhub install` installs skills one by one. This is normal.
479
+
3.**After `update-agent-runtime`**, poll until `status: READY` before testing.
480
+
4.**DynamoDB is in `us-east-2` by default** (AgentCore is `us-east-1`). This is intentional — DynamoDB cross-region access is free.
481
+
5.**deploy.sh creates 4 Fargate tier services** with `desiredCount=0`. Admin activates per-employee always-on from Security Center UI.
482
+
6.**All 20 seed employees share one `ADMIN_PASSWORD`** — each must change on first login. Roles are seeded separately by `seed_roles.py`.
- Playground → Ryan Park (SDE) → "run git status" → executes (Engineering tier)
488
+
- Portal → Carol Zhang → Chat → "Who are you?" → "Finance Analyst Agent at ACME Corp"
489
+
- Security Center → 4 runtimes all READY
488
490
489
491
**If AgentCore returns 500:** check CloudWatch group `/aws/bedrock-agentcore/runtimes/<runtime-id>-DEFAULT` for `openclaw returned empty output` — wrong openclaw version. Rebuild with `openclaw@2026.3.24`.
490
492
@@ -512,9 +514,9 @@ Zero IT friction. Employees self-service in 30 seconds. Admins see all connectio
512
514
>**No local Docker required** — the agent container image is built on the gateway EC2 (ARM64 Graviton) via SSM.
513
515
514
516
**AWS requirements:**
515
-
- Bedrock model access: Nova 2 Lite (default) + Anthropic Claude (exec tier + Admin Assistant)
517
+
- Bedrock model access is automatic — no manual enablement required
516
518
- Bedrock AgentCore available in: `us-east-1`, `us-west-2`
|**emp-ada**|**Ada**|**Executive**|**exec-agent · Sonnet 4.6**|**All tools · Full IAM · Feishu + Telegram 🔓**|
842
-
|**emp-wjd**|**WJD**|**Executive**|**exec-agent · Sonnet 4.6**|**All tools · Full IAM · Feishu + Telegram 🔓**|
843
-
| emp-jiade | JiaDe Wang | Admin | standard | Discord → SA Agent ✨ |
844
-
| emp-chris | Chris Morgan | Admin | standard | DevOps Agent (shell + infra tools) |
845
-
| emp-peter | Peter Wu | Manager | standard | Portal/Discord → Executive Agent ✨ |
846
-
| emp-alex | Alex Rivera | Manager | standard | Product dept manager view |
847
-
| emp-mike | Mike Johnson | Manager | standard | Sales dept manager · CRM tools |
848
-
| emp-ryan | Ryan Park | Employee | standard | Slack/Discord → SDE Agent (shell/code) |
849
-
| emp-carol | Carol Zhang | Employee | standard | Telegram → Finance Agent |
850
-
| emp-david | David Park | Employee | standard | Slack → Finance Agent ✨ |
851
-
|**emp-admin**|**Demo Admin**|**Employee**|**exec-agent**|**Unrestricted test account · All tools · install_skill**|
852
-
853
-
> 🔓 = No tool restrictions · ✨ = Cross-session memory via S3
836
+
## Seed Accounts
837
+
838
+
> The seed data creates 20 employees across 11 positions. Roles are assigned by `seed_roles.py`: 2 admins, 3 managers, 15 employees. All share the initial `ADMIN_PASSWORD` and must change it on first login.
839
+
840
+
| Employee ID | Name | Role | Position | Dept | Runtime Tier | Channels |
|`AWS_REGION`| Yes | Deployment region for EC2, SSM, ECR, AgentCore (default: `us-east-1`) |
862
-
|`GATEWAY_INSTANCE_ID`| Yes | EC2 instance ID — required for always-on container start/stop via SSM. Set in `/etc/openclaw/env`. Falls back to IMDSv2 if not set. |
863
-
|`PUBLIC_URL`| No | Base URL for Digital Twin links (default: `https://openclaw.awspsa.com`) — **set this** for correct twin URLs |
864
-
|`AGENT_ECR_IMAGE`| No | ECR image URI for always-on containers. Auto-built from `$ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$STACK_NAME-multitenancy-agent:latest` if not set. |
865
-
|`CONSOLE_PORT`| No | Admin Console port (default: `8099`) |
866
-
|`TENANT_ROUTER_URL`| No | Tenant Router URL (default: `http://localhost:8090`) |
867
-
|`DYNAMODB_TABLE`| No | Table name — **must equal STACK_NAME** (IAM policy scoped to `table/${StackName}`). Default: same as STACK_NAME |
868
-
|`DYNAMODB_REGION`| No | DynamoDB region if different from `AWS_REGION` (default: `us-east-2`) |
871
+
### .env (deploy.sh input)
872
+
873
+
| Variable | Required | Default | Description |
874
+
|----------|----------|---------|-------------|
875
+
|`STACK_NAME`| Yes |`openclaw-enterprise`| Names ALL AWS resources. Unique per account/region. |
876
+
|`REGION`| Yes |`us-east-1`| AWS region (must have Bedrock + AgentCore: `us-east-1` or `us-west-2`) |
877
+
|`ADMIN_PASSWORD`| Yes | — | Initial password for all accounts. Stored in SSM SecureString. Employees must change on first login. |
878
+
|`JWT_SECRET`| No | auto-generated | JWT signing key. Auto-generated with `openssl rand -hex 32` if empty. |
879
+
|`MODEL`| No |`global.amazon.nova-2-lite-v1:0`| Default Bedrock model ID for standard agents |
880
+
|`INSTANCE_TYPE`| No |`c7g.large`| EC2 Graviton ARM instance type |
881
+
|`KEY_PAIR`| No | — | EC2 key pair name for emergency SSH |
882
+
|`EXISTING_VPC_ID`| No | — | Reuse existing VPC instead of creating new |
883
+
|`EXISTING_SUBNET_ID`| No | — | Reuse existing subnet |
884
+
|`CREATE_VPC_ENDPOINTS`| No |`false`| Add Bedrock/SSM VPC endpoints (~$22/mo) |
885
+
|`DYNAMODB_TABLE`| No | same as STACK_NAME | Table name — **must equal STACK_NAME** (IAM policy scoped to `table/${StackName}`) |
886
+
|`DYNAMODB_REGION`| No |`us-east-2`| DynamoDB region if different from `REGION`|
887
+
|`WORKSPACE_BUCKET_NAME`| No | auto | S3 bucket name — set if multi-stack same account |
0 commit comments