Skip to content

Coming from Loom's SAM deploy

llms.txt lists every page for a coding agent.

Optional: hand this page to your coding agentThe steps work by hand too.
Show the prompt
Read https://intentius.io/loomster/guides/coming-from-upstream-loom/ and, from the person's Loom checkout (shared/etc/common.sh and the environment.sh files), write the LOOM_* exports that match their settings using the page's settings table.
List each setting with no loomster equivalent and what the page says to do instead. Don't deploy.
Never run `chant approve` or `just grant`, never deploy to or delete from a real AWS account unless the person asked for that in this session, never register an identity provider in Loom, and never push or edit the `chant/lifecycle` branch.

The same Loom v1.9.0 you deploy with make and SAM, deployed from typed source with one command per tier, with your settings carried over as build parameters.

Where Loom’s DEPLOYMENT.md has you copy four environment.sh files, fill in shared/etc/common.sh, and run make per stack across three directories with make outputs between them, loomster is:

git clone https://github.com/INTENTIUS/loomster && cd loomster && npm install
export LOOM_TIER=production LOOM_VPC_ID=... LOOM_PUBLIC_SUBNET_IDS=... LOOM_PRIVATE_SUBNET_IDS=...
export LOOM_DOMAIN_NAME=loom.example.com LOOM_DB_PASSWORD=...
npm run vendor
npx chant run --components all --env prod

The stacks deploy in dependency order and pass outputs to each other; there is no outputs.sh. Deploy to production on AWS is the full runbook.

To do thisLoomloomster
Configure a deploymentshared/etc/common.sh plus etc/environment.sh in shared/, backend/, frontend/LOOM_* build parameters (settings below)
Once per accountmake agentcore.init, make ecs.initjust bootstrap
Pass outputs between stacksmake outputs, then include etc/outputs.shautomatic: stackOutput(...) between components
Hosted zone and NS delegationmake dns, make dns.outputsnpm run dns-setup (creates the zone, prints the NS records, waits for the delegation)
S3, ECR, ACM, ALBmake infrashared-foundation
ECS clustermake ecs (shared)shared-foundation
PrivateLinkmake privatelinkshared-foundation on the production tiers (LOOM_PRIVATELINK)
Cognito pool, groups, scopes, clientsmake cognitoloom-cognito
An agent execution rolemake role with P_AGENT_NAMEjust agent-role <agent> <group>, which also registers it in Loom (guide); the shared role is in shared-foundation
Code Interpreter rolemake ci-roleLOOM_AGENT_ROLE_CODE_INTERPRETER=true on loom-agent-role
RDS and RDS Proxymake rds in backend/loom-db
Bastion and tunnel to the databasemake ec2, make tunneljust tunnel-host, then just tunnel (guide)
Build, push and deploy the servicesmake deploy (podman build and push by git sha, sam deploy per service)chant run --components loom-backend and loom-frontend: build, publish by digest, deploy, wait for steady state and /health, roll back on failure
Everything, in orderabout ten targets across three directoriesnpx chant run --components all
A token for the APImake cognito.get-tokensjust cognito-token, a throwaway admin with the MFA challenge handled on the production tiers
Client idsmake cognito.get-client-idjust cognito-client-id
First-sign-in passwordsmake cognito.set-passwordsLOOM_COGNITO_PASSWORD=... just set-passwords [users]
Copy a SQLite Loom into Postgresmake migratejust import-sqlite <loom.db>, gated
Fix sequencesmake fix-sequencesjust fix-sequences
Wipe the databasemake reset-dbjust reset-db: snapshot first, gated
Run locallyPhase 1: SQLite, make run and make dev, Cognito in AWSjust local-up: Postgres and Cognito on Floci, no AWS account
Fill a fresh Loom (role, authorizer)ONBOARDING.md steps by handnpm run seed (Seed and validate a deploy)
Remove everythingmake *.delete in reverse, per directorychant run loom-teardown, gated (Tear down a deployment)
List AgentCore credential providersmake agentcore.credentials.listjust credentials
Delete themmake agentcore.credentials.delete-all (every provider in the account)just credentials-delete: only the ones this Loom recorded, gated
Inspect AgentCore memorymake agentcore.memory.list, get, records, records-by-namespace, extraction-jobsjust memory [query] [id] [who]

Loom make targets has every operator target and how each verb differs from it.

Loom settingWhereloomster
AWS_PROFILE, AWS_REGIONcommon.shyour AWS CLI configuration, AWS_REGION
ACCOUNTIDcommon.shAWS_ACCOUNT_ID
BUCKET (SAM artifacts)common.shnone: chant applies templates without a SAM bucket
VPC_ID, PUBLIC_SUBNET_IDS, PRIVATE_SUBNET_IDScommon.shLOOM_VPC_ID, LOOM_PUBLIC_SUBNET_IDS, LOOM_PRIVATE_SUBNET_IDS
PUBLIC_FQDNcommon.shLOOM_DOMAIN_NAME
RDS_ALLOWED_CIDRcommon.shLOOM_DB_ALLOWED_CIDR
COGNITO_POOL_NAME, COGNITO_DOMAINcommon.shderived from {project}-{env}-{instance} (Naming and tagging)
LOOM_ARTIFACT_BUCKETcommon.shcreated and named by shared-foundation
LOOM_LOGGING_BUCKETcommon.sh (required)LOOM_LOGGING_BUCKET_NAME (optional)
RDS_PASSWORDcommon.shLOOM_DB_PASSWORD
SUPER_ADMIN_PASSWORD, DEMO_USER_*_PASSWORDcommon.shnone: loomster creates no users
P_TAG_OWNEReach environment.shLOOM_OWNER
P_RDS_INSTANCE_CLASS, P_RDS_ALLOCATED_STORAGEbackend/LOOM_DB_INSTANCE_CLASS, LOOM_DB_ALLOCATED_STORAGE
P_RDS_MULTI_AZ, P_RDS_ENABLE_PROXYbackend/the tier: Proxy on production, Proxy and Multi-AZ on production-ha
P_ECS_BACKEND_CPU, _MEMORY, _DESIRED_COUNT, _MAX_COUNTbackend/LOOM_BACKEND_CPU, _MEMORY, _DESIRED_COUNT, _MAX_COUNT
P_ECS_FRONTEND_CPU, _MEMORY, _DESIRED_COUNTfrontend/LOOM_FRONTEND_CPU, _MEMORY, _DESIRED_COUNT
LOOM_ALLOWED_ORIGINS, LOOM_REGISTRY_IDbackend/the same names
P_LITELLM_*backend/LOOM_LITELLM_*
P_INFRA_ALB_INGRESS_CIDRshared/LOOM_ALB_INGRESS_CIDR
P_AGENT_NAME, P_MEMORY_ARN, P_BEDROCK_MODEL_ARNS, P_ENABLE_CODE_INTERPRETERshared/ (role)LOOM_AGENT_ROLE_AGENT, _MEMORY_ARN, _BEDROCK_MODEL_ARNS, _CODE_INTERPRETER

Every parameter is in Build parameters.

  • Defaults are smaller. Loom’s example runs three backend tasks, Multi-AZ RDS and an RDS Proxy. loomster sizes by tier: one backend task on light and production, two on production-ha; Multi-AZ only on production-ha.
  • On the production tiers both services run in private subnets with no public IP; Loom’s example puts the frontend in public subnets.
  • Images deploy by digest, not by git sha tag, and a failed service deploy rolls back to the previous task definition.
  • Like Loom’s podman.build.frontend, the frontend build passes the Cognito end-user client id, so the served app signs in on every tier. Loom’s pool creates demo users; loomster’s creates none, so you add the first admin yourself. The production tiers’ pool defaults to optional MFA, since the web app can’t answer an MFA challenge (Loom’s own pool leaves MFA off).
  • The tunnel host is optional and off until you run just tunnel-host. The database Ops (import-sqlite, fix-sequences, reset-db) don’t need it: they run as one-off tasks of the backend inside the VPC.
  • Upgrades are an Op that snapshots first, and on the production tiers waits for approval (Upgrade Loom).
  • Users: point loomster at your existing pool with LOOM_COGNITO_MODE=reference-existing and its ids, and every user and group stays (Share a Cognito pool).
  • Data: point loom-db at your existing database with LOOM_DB_MODE=reference-existing, LOOM_DB_ENDPOINT and the secret Loom’s rds.yaml created (Bring your own KMS, ECR and database). Record its schema as the v1.9.0 baseline with just db baseline, so later Loom versions arrive as reviewed migrations (Migrate Loom’s database). A Phase 1 Loom’s loom.db comes across with just import-sqlite loom.db.
  • Agent roles: they keep working; register any Loom created on demand before v1.9.0 under Security > IAM roles.
Not hereIn Loomloomster’s ruleDo this instead
The 12 demo groups and 22 demo userscognito.yaml, make cognito.set-passwordsit doesn’t invent an org structure or usersLOOM_COGNITO_RESOURCE_GROUPS_JSON and LOOM_COGNITO_DEMO_SEED_USERS_JSON, or reference your pool
SQLitePhase 1 local developmentevery run, local included, uses Postgresjust local-up; bring a SQLite Loom’s data across with just import-sqlite
A laptop backend on cloud RDSPhase 2 hybridthe backend runs where its database isjust local-up, or a deployed tier
make refresh-models on a running deploybackend/makefilethe model list arrives with a Loom releasebump the pinned Loom (Upgrade Loom)
make ci-roleshared/makefile, with a template Loom doesn’t shipthe generated pipelines’ own credentials (CI providers)
Deleting every credential provider in the accountmake agentcore.credentials.delete-allanother instance’s providers aren’t this one’s to deletejust credentials-delete