feat(skills): full Strands Skills support for louisMain agent

↗ view on GitHub · Jason Lee · 2026-05-15 · 5641aca5

Full-stack implementation of read-only knowledge injection via Strands Skills.

Infra:
- storage-stack: skillsBucket (S3, BLOCK_ALL, CORS GET/HEAD/PUT for CF domain)
- api-stack: SKILLS_BUCKET_NAME env, grantReadWrite to API Lambda, read-only S3 policy on AgentCore role
- bin/app.ts: wire skillsBucket into ApiStack

Agent:
- lib/skills.ts: ensureSkillsDownloaded - lists S3 prefix, downloads to /tmp/<userId>/skills/, skips if cached
- tools/read-local-file.ts: path-sandboxed file reader, returns ImageBlock/DocumentBlock for supported types
- agent.ts: AgentSkills plugin (vended-plugins/skills), read_local_file tool, skillsBase param
- index.ts: ensureSkillsDownloaded runs in parallel with doc context + history load

API:
- routes/skills.ts: GET /skills, POST /skills/prepare, DELETE /skills/:skillName,
  GET /skills/:skillName/files, GET /skills/:skillName/file (presigned GetObject)

Frontend:
- SkillsList: folder-browser UI with virtual tree built from flat S3 paths,
  expandable skill rows (Puzzle icon), amber folder icons for subdirs,
  file viewer modal (image/PDF/text; "Preview not supported" for others),
  right-click context menu delete, upload validation (SKILL.md required,
  name must match folder name)
- mikeApi: listSkills, getSkillUploadUrl, deleteSkill, listSkillFiles, getSkillFileUrl
- App.tsx + AppSidebar: /skills route + nav item

Scripts:
- deploy-agent.sh: reads SkillsBucketName from CFN, passes as SKILLS_BUCKET_NAME to AgentCore
Repository dropthejase/louis
Author Jason Lee <12leeejk2@gmail.com>
Authored
Parents 29b80f48
Stats 15 files changed , +1057 , -4
Part of Strands Skills support in louisMain (skill files, UI, seed sample)

Capture this commit into my fork

Download a Markdown prompt that tells Claude how to port this exact commit into your working tree. Run it via claude -p < capture-commit-5641aca5.md from inside the repo you want the change in.

⬇ Download capture-commit-5641aca5.md