dropthejase gives Louis a reusable prompt library

Users can now upload markdown 'skill' files once and have the agent draw on them every turn - no more re-pasting the same context.

chat-uiknowledge-management

The fork adds a Skills surface to its main agent: upload a markdown file describing how you want a task handled, and the agent can list and read those files on demand. There's a folder tree, a file viewer, upload validation, and a tidied UI to go with it.

It's the most interesting agent-UX move in this fork. Think of it as a personal prompt library that sits beside the chat, so a lawyer who has spent an afternoon perfecting their preferred clause-review instructions doesn't have to retype them into every session. One small detail worth noting: the team explicitly decided not to auto-seed user accounts with the bundled demo skill - a quiet but sensible call, since surprise content in a user's library is hard to undo.

So what Anyone building an LLM tool for legal users should be watching this pattern - it's a cleaner path to repeatable work than prompt templates buried in docs.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

5 commits from dropthejase/louis, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
5641aca5 feat(skills): full Strands Skills support for louisMain agent Jason Lee 2026-05-15 ↗ GitHub
commit body
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
b135fc31 feat(skills): skills UI polish - font sizes, folder tree, file viewer, upload validation Jason Lee 2026-05-15 ↗ GitHub
commit body
- Bump description, file tree, info banner to text-sm (matches Projects/Workflows)
- Virtual folder tree from flat S3 paths (amber folder icons, expandable)
- File viewer modal: image/PDF/text preview; unsupported formats show message
- Right-click context menu delete; puzzle icon for skill rows
- Upload validates SKILL.md name matches folder name client-side
- Fix horizontal scroll (min-w-max → w-full); fixed height rows (h-14)
12445c9b feat: merge feature/skills - full Strands Skills support Jason Lee 2026-05-15 ↗ GitHub
commit body
Skills = read-only knowledge injection for louisMain. Users upload skill folders
via /skills page. Agent downloads to /tmp on session start, discovers via AgentSkills
plugin, reads reference files via read_local_file tool. No bash tool (MMDS risk).

Commits: 5641aca (core), b135fc3 (UI polish), 82dd664 (sharing buttons)
4a6d8664 docs(readme): add Additional Features section for Strands Skills Jason Lee 2026-05-15 ↗ GitHub
0aa79dee docs: clarify skill is demo sample not auto-seeded Jason Lee 2026-05-16 ↗ GitHub

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-352.md from inside the repo you want the changes in.

⬇ Download capture-thread-352.md