5.5 KiB
CLAUDE.md
Guidance for Claude Code working in this repo. Read this first.
What this is
A demo (not production) of a reversible PII de-identification round trip for HNCB: advisor query with a real name → tokenized before it leaves for the cloud → Amazon Bedrock AgentCore agent reasons on tokens only → identity restored on-prem before the advisor sees the answer. Everything runs in one AWS account; "on-prem" is a logical, tag-labelled zone standing in for the branch data centre. The demo proves data-flow behaviour, not physical residency.
Critical context
- Fusion is a shared SaaS instance. DO NOT build, host, or Terraform it. It is
configured in the Amplify AI Gateway console (see
fusion/POLICY_SETUP.md). Because it is SaaS, anything it calls must be a public HTTPS endpoint with auth — it cannot reach private VPC resources or use local AWS creds. - This means the AWS side's job is to expose two endpoints Fusion will call:
/tokenize(ingress) and/restore(egress), plus host the detector, vault, RAG tool, and agent. See the task backlog below. - Detection ≠ redaction. The detector returns typed findings; our code owns minting tokens, writing the vault, and restoring. Never redact-and-discard.
- Tokens must be random per request and stored in the vault keyed by session.
Architecture (maps to the customer's 8 steps)
Advisor UI → Fusion SaaS → [/tokenize: detect (Presidio) + mint + vault-write]
→ AgentCore Runtime (Bedrock model) → tool call via AgentCore Gateway → RAG Lambda
(resolve token → de-identified evidence) → agent talking points → Fusion SaaS
→ [/restore: vault lookup] → Advisor UI.
Repo map
terraform/ DynamoDB (vault + customers), RAG Lambda, IAM, Presidio hosting
lambda_rag/ RAG tool (real): token resolve -> evidence package
gateway_api/ TODO: /tokenize and /restore HTTPS endpoints Fusion calls (T1, T2)
agent/ Strands agent for AgentCore Runtime + tool schema
presidio/ detector service (typed findings) + Dockerfile
seed/ fake customer (Wang Xiaoming) + seed script
ui/ advisor UI (restored-vs-tokenized split view)
scripts/ deploy.sh, agentcore_setup.sh, teardown.sh
fusion/ POLICY_SETUP.md (SaaS console config — human does this, not you)
Commands
- Deploy core infra:
bash scripts/deploy.sh(review first) - Seed data:
VAULT_TABLE=... CUSTOMERS_TABLE=... python seed/seed.py --with-demo-token - AgentCore:
bash scripts/agentcore_setup.sh(verify againstagentcore --help) - Teardown (do this to stop spend):
bash scripts/teardown.sh - Terraform: run all
terraformcommands with-chdir=terraform.
Conventions & guardrails
- Region default
us-east-1(best Bedrock/AgentCore quotas). Keep it a variable. - Never commit AWS creds, tokens, or real PII. Seed data is synthetic only.
- Python: standard library + boto3; keep handlers small and dependency-light.
- Pin
bedrock-agentcore/strands-agentsversions beforeagentcore launch— these SDKs move fast; verify signatures against installed versions, don't assume. - Prefer Lambda Function URLs (with auth) or API Gateway for the public endpoints.
- After any infra change, remind the human to
teardownwhen done recording.
Task backlog (pick these up)
Each task: keep it demo-grade, add a note in the file, and update this list.
- T1 —
/tokenizeendpoint (gateway_api/tokenize/). HTTPS endpoint Fusion calls with{query}. Steps: POST query to Presidio/analyze; for each finding mint a random token (CUST_<rand>for PERSON→customer,TW_<rand>for TW_ROC_ID); write vault items{token, type, value, session_id, expires_at}; splice tokens into the text. Return{deidentified_prompt, session_id}. Accept: real name in → tokenized text + session_id out; vault rows written; same input yields different tokens on repeat calls. - T2 —
/restoreendpoint (gateway_api/restore/). Input{session_id, text}. Look up this session's tokens in the vault, re-attach identity (envelope-level: prepend the real name; also swap any inline tokens). Return{final}. Accept: tokenized answer + session_id → answer with王小明restored. - T3 — reachability from SaaS. Make Presidio (or fold detection into T1 so only
/tokenize+/restoreare public) reachable from Fusion SaaS with auth. Accept: Fusion SaaS can call the endpoints over HTTPS; nothing else is public. - T4 — AgentCore Gateway target. Wire the RAG Lambda as the MCP tool; confirm
the agent can call
get_customer_activity_summary(CUST_000123)and get the package. Accept: a manualagentcoreinvoke returns the evidence package. - T5 — Agent runtime. Pin deps,
agentcore launch, capture the Runtime ARN. Accept: invoking the runtime with a tokenized prompt returns talking points. - T6 — UI wiring. Point
ui/index.htmlGATEWAY_URL at the Fusion SaaS entry (or/tokenizefor a Fusion-less dry run); host on S3+CloudFront. Accept: the split view renders restored vs tokenized. - T7 — E2E rehearsal. Run the full script in README; confirm the Bedrock/
AgentCore trace shows only tokens. Then verify
teardown.shleaves nothing paid-for.
Known caveats (don't "fix" these silently)
- zh-TW detection is demo-narrow (tuned to the scripted entities), not production recall.
- The agentic token-resolution loop (T4) is custom orchestration by design.
- If you touch
fusion/, it's documentation for a human — do not try to automate SaaS config.