Architecture assumptions
- MiChat is profile-driven:
profiles/<profile>/holdsprofile.json,system_prompt.txt,skills/,ui.json. - Agent skills are
SKILL.mdfiles underprofiles/<profile>/skills/<slug>/SKILL.md. - Tool capability boundaries are enforced by toolsets +
enabled_toolsetsinprofile.json. - MiChat requires a profile; no legacy root
./skillsfallback exists.
Implementation loop
Follow the steps in order. Do not improvise or skip steps. If anything is unclear or missing, ask for clarification before editing.
A) Decide placement
- Decide if this is a new toolset or belongs to an existing toolset.
- Choose which profiles should get it (toolset enablement + skill file).
B) Implement code
- Add/update the Python tool implementation.
- Register the tool in the correct toolset (toolsets registry).
- Ensure only profiles that enable the toolset can see/use the tool.
C) Add MiChat agent skill files
Create/edit
SKILL.mdunder the relevant profile(s) only.YAML frontmatter: require only
nameanddescription.If
allowed_toolsis used (per spec), list only tool names that exist in enabled toolsets for that profile.
D) Wire and sanity check
- Ensure manifest injection lists available skills for the active profile.
- Ensure
read_skillreads from the selected profile skills dir only.
E) Output verification steps (for Nicholas)
- Provide exact commands, e.g.:
python -m michat.shell --profile <name> --debugpython -m michat.chat --profile <name> --debug
- State exactly what to check (tool list, skill list, expected behavior).
- Use the repo’s current run entrypoints; the examples above are current as of this repo state.
House rules / constraints
- Follow the steps above as written; do not improvise or skip steps.
- Ask for clarification when information is missing or ambiguous.
- Never create/copy secrets or tokens; never commit
token.jsonorclient_secret*.json. - Do not use AppData or write outside the repo/exe folder; runtime state belongs under ./data and profile resources under profiles//...
- Keep changes small and reversible; avoid refactors unless asked.
- If behavior depends on runtime UI, ask Nicholas to run and paste logs instead of guessing.