Create a Domain Repo
One command. Full project. Ready for terraform init.
Run the Scaffolder
Open any terminal and paste:
bash <(curl -sL https://raw.githubusercontent.com/The-Cloud-Clockwork/tcc-aws-agent-platform/main/scripts/create-domain.sh)
It asks two questions:
Domain name (e.g., logistics, finops, healthcare): my-project
Org prefix (e.g., myco, acme): acme
That’s it. You get a full project at acme-my-project/.
What You Get
acme-my-project/
├── agents/ ← Your AI agents (shared Docker image)
│ ├── Dockerfile
│ ├── pyproject.toml
│ ├── src/my_project_agents/
│ │ ├── app.py ← 5-line entrypoint (identical for all domains)
│ │ └── agent_configs.py ← Register your prompt builders here
│ ├── blueprints/
│ │ ├── agents/
│ │ │ └── example-agent.yaml ← Your first agent — edit this
│ │ ├── strategies/
│ │ └── workflows/
│ └── prompts/
│ └── my_project/
│ └── example-agent.txt ← Your first system prompt — edit this
│
├── mcps/ ← Your MCP tool servers (one Dockerfile each)
│ ├── blueprints/
│ └── example-service/
│ ├── Dockerfile
│ ├── pyproject.toml
│ └── src/.../server.py ← Example MCP with a hello() tool
│
├── lambdas/ ← Lambda functions for workflow steps
│ └── stubs/handler.py
│
├── infra/ ← Terraform (consumes platform modules)
│ ├── main.tf ← 3 modules: platform → agents → workflows
│ ├── variables.tf ← All variables with sensible defaults
│ ├── providers.tf ← AWS provider configuration
│ ├── backend.tf ← S3 backend (edit the bucket name)
│ └── envs/
│ ├── dev.tfvars ← Development config
│ ├── staging.tfvars ← Staging config
│ └── production.tfvars ← Production config
│
├── .gitignore
├── pyproject.toml
└── ruff.toml
~30 files, all wired together, git initialized with a first commit.
Deploy
1. Edit the state bucket
Open infra/backend.tf and replace the placeholder bucket name:
terraform {
backend "s3" {
bucket = "acme-my-project-infra" # ← your actual S3 bucket
key = "terraform.tfstate"
region = "us-east-1" # ← your primary region
}
}
2. Initialize Terraform
cd acme-my-project/infra
terraform init
This downloads the platform modules from GitHub.
3. Plan
terraform plan -var-file=envs/dev.tfvars
Review the resources that will be created: KMS keys, DynamoDB tables, SQS queue, S3 buckets, Gateway, Memory, ECR repo, CodeBuild project, and Runtime registration.
4. Apply
terraform apply -var-file=envs/dev.tfvars
5. Build the agent image
terraform apply -var-file=envs/dev.tfvars -var="build_enabled=true"
This builds the Docker image via CodeBuild and pushes to ECR.
Customize Your Agent
Edit the blueprint
Open agents/blueprints/agents/example-agent.yaml:
id: example-agent # ← rename to kebab-case
name: Example Agent # ← rename
version: "1.0.0"
prompt_ref: "my_project/example-agent" # ← matches prompts/ path
# Switch provider by changing these two fields — no other changes needed.
# provider defaults to "bedrock". Use "litellm", "anthropic", or "vertex"
# for other inference backends.
model:
provider: bedrock
model_id: us.anthropic.claude-sonnet-4-20250514-v1:0
temperature: 0.7
max_tokens: 4096
runtime:
type: agentcore
network_mode: PRIVATE # PRIVATE = runs inside your VPC
idle_timeout_minutes: 15
tools: [] # ← add MCP tools here
memory:
strategies: [] # ← add memory strategies here
event_expiry_days: 30
Edit the system prompt
Open agents/prompts/my_project/example-agent.txt and write your agent’s personality and instructions.
Add tools
tools:
- mcp: my-data-service-mcp
tools: [query_data, get_report]
- builtin: code_interpreter
network_mode: PRIVATE
Add memory
memory:
strategies:
- type: SEMANTIC
name: FactExtractor
namespace: "{actorId}/facts/"
- type: SUMMARY
name: Summarizer
namespace: "{actorId}/{sessionId}/summaries/"
event_expiry_days: 30
short_term_k: 5
Switch to a LiteLLM proxy
To use an OpenAI-compatible proxy instead of Bedrock, change the model block:
model:
provider: litellm
model_id: claude-sonnet-4-6 # name the proxy expects; passed through unchanged
temperature: 0.7
max_tokens: 4096
base_url: ${LITELLM_BASE_URL}
api_key_env: LITELLM_API_KEY
No other changes to the blueprint or handler are needed.
Add More Agents
- Create a new YAML file in
agents/blueprints/agents/ - Create a matching prompt in
agents/prompts/my_project/ - Run
terraform apply— the platform creates all resources automatically
Each YAML file equals one agent runtime. No handler code changes required.
Add an MCP Server
- Create a blueprint in
mcps/blueprints/my-service-mcp.yaml - Create
mcps/my-service/with aDockerfileandsrc/ - Add the MCP module to
infra/main.tf:
module "mcps" {
source = "git::https://github.com/The-Cloud-Clockwork/tcc-aws-agent-platform.git//modules/agents?ref=v1.0.0"
depends_on = [module.platform]
resource_prefix = "${var.resource_prefix}-mcp"
blueprint_dir = "${path.module}/../mcps/blueprints"
source_dir = "${path.root}/../mcps"
source_layout = "polyrepo"
polyrepo_suffix = "-mcp"
# Wire platform outputs (same pattern as the agents module)
gateway_id = module.platform.gateway_id
vpc_id = module.platform.vpc_id
private_subnet_ids = module.platform.private_subnet_ids
data_kms_key_arn = module.platform.data_kms_key_arn
}
The blueprint ID minus the suffix must match the subdirectory name. Blueprint
my-service-mcpwith suffix-mcplooks formcps/my-service/Dockerfile.
Scaffolder CLI Options
Skip the interactive prompts with flags:
bash <(curl -sL https://raw.githubusercontent.com/The-Cloud-Clockwork/tcc-aws-agent-platform/main/scripts/create-domain.sh) \
--name my-project \
--prefix acme \
--region us-east-1 \
--bedrock-region us-west-2
| Flag | Default | Description |
|---|---|---|
--name | (asks) | Domain name |
--prefix | (asks) | Org prefix |
--region | (asks) | Primary AWS region |
--bedrock-region | (asks) | Bedrock model region (may differ from primary) |
--platform-ref | main | Git ref for platform module sources |
Next Steps
- Quickstart — install the SDK and CLI
- First Agent — detailed tutorial with memory, tools, and policy
- Inference Providers — configure Bedrock, LiteLLM, Anthropic, or Vertex
- Agent Blueprint Spec — every YAML field documented
- Infrastructure — Terraform module reference