feat(skills): full Strands Skills support for louisMain agent
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.