[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-letta-generating-mod-envs":3,"mdc-wn0fi5-key":41,"related-org-letta-generating-mod-envs":1802,"related-repo-letta-generating-mod-envs":1953},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":12,"stars":23,"repoUrl":24,"updatedAt":25,"license":26,"forks":27,"topics":28,"repo":36,"sourceUrl":39,"mdContent":40},"generating-mod-envs","generate Letta mod learning environments","Generates and reviews mod learning env JSON files for Letta Code local mods. Use when asked to teach, learn, or optimize a mod behavior; create, draft, validate, improve, or explain envs for `\u002Fmods learn --env`; or design evaluation scenarios, memory fixtures, requiredResultMarkers, requiredTraceMarkers, negative controls, and candidate diversity hints.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},"letta","Letta","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fletta.png","letta-ai",[13,17,20],{"name":14,"slug":15,"type":16},"Configuration","configuration","tag",{"name":18,"slug":19,"type":16},"Agents","agents",{"name":21,"slug":22,"type":16},"AI Infrastructure","ai-infrastructure",2831,"https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code","2026-07-13T06:23:08.838181",null,329,[29,30,31,32,33,8,34,35],"agent-memory","ai","claude","codex","continual-learning","memgpt","stateful-agents",{"repoUrl":24,"stars":23,"forks":27,"topics":37,"description":38},[29,30,31,32,33,8,34,35],"Stateful agents that are like people, with memory, identity, and the ability to learn and adapt","https:\u002F\u002Fgithub.com\u002Fletta-ai\u002Fletta-code\u002Ftree\u002FHEAD\u002Fsrc\u002Fskills\u002Fbuiltin\u002Fgenerating-mod-envs","---\nname: generating-mod-envs\ndescription: Generates and reviews mod learning env JSON files for Letta Code local mods. Use when asked to teach, learn, or optimize a mod behavior; create, draft, validate, improve, or explain envs for `\u002Fmods learn --env`; or design evaluation scenarios, memory fixtures, requiredResultMarkers, requiredTraceMarkers, negative controls, and candidate diversity hints.\ndisable-model-invocation: true\nuser-invocable: true\n---\n\n# Generating mod learning envs\n\nUse this skill to create JSON envs consumed by `\u002Fmods learn --env=\u003Cpath>` or `bun scripts\u002Fmod-learning\u002Flearn-mod.ts --env \u003Cpath>`. An env describes the mod behavior to learn and the scenario-suite eval used to score candidates.\n\n## Workflow\n\n1. Define the behavior and eval before writing JSON.\n   - What should the mod do? Tool, turn event, tool event, provider, command, status, etc.\n   - What would a placebo\u002Fno-op mod fail?\n   - What unique sentinel strings make success unambiguous?\n2. Choose a path:\n   - Repo example: `docs\u002Fexamples\u002Fmods\u002Flearning\u002F\u003Cslug>.env.json`\n   - Local\u002Fprivate: any user-requested path\n3. Draft strict JSON. Start from `assets\u002Fmod-learning-env.template.json` if useful. No comments or trailing commas.\n4. Prefer `evaluation.scenarios` with at least:\n   - happy path\n   - discrimination\u002Fexact-target path\n   - negative control\n5. Validate:\n\n```bash\nbun src\u002Fskills\u002Fbuiltin\u002Fgenerating-mod-envs\u002Fscripts\u002Fvalidate-mod-env.ts path\u002Fto\u002Fenv.json\n```\n\nIf this skill is installed outside the source tree, run the same script from this skill directory: `scripts\u002Fvalidate-mod-env.ts`.\n\n6. If asked to run it:\n\n```text\n\u002Fmods learn --env=path\u002Fto\u002Fenv.json --model=auto --backend=api --out=\u002Ftmp\u002F\u003Cslug>-learn\n```\n\nThe raw `scripts\u002Fmod-learning\u002Flearn-mod.ts` dev script detaches by default. Add `--foreground` only when a blocking pass\u002Ffail exit code is needed.\n\nUse single-line `--flag=value` commands for TUI instructions.\n\n## Env shape\n\nRequired top-level fields:\n\n- `name`: human display name.\n- `slug`: stable kebab-case run\u002Fcandidate slug.\n- `objective`: one-paragraph target for the generation agent.\n- `requirements`: concrete pass\u002Ffail behavior constraints.\n- `evaluation`: either a single prompt eval or a scenario suite.\n\nCommon optional fields:\n\n- `targetModName`: display metadata for the intended mod filename. The harness still chooses the candidate filename from `slug` unless `--candidate-file-name` is passed.\n- `candidateDiversityHints`: strategies assigned across multi-candidate runs.\n- `modApiHints`: concise API reminders that prevent bad generated code.\n- `examples`: small input\u002Fexpected demos for the generation prompt.\n\nEvaluation fields:\n\n- `evaluation.outputFormat`: use `stream-json` when checking trace markers.\n- `evaluation.timeoutMs`, `evaluation.maxTurns`: per-scenario defaults.\n- `evaluation.memoryFiles`: files seeded under eval `$MEMORY_DIR`.\n- `evaluation.scenarios[]`: scenario-specific overrides and fixtures.\n- In scenario-suite envs, do not add a top-level `evaluation.prompt` unless that prompt must run for every scenario. Assertion-only scenarios should have `assertions` and no `prompt`; only scenarios that require model behavior should define `scenario.prompt`.\n- `requiredResultMarkers`: literal strings required in the final answer.\n- `requiredTraceMarkers`: literal strings required in raw stdout\u002Fstderr.\n- `forbiddenResultMarkers`: final-answer strings that fail the run.\n- `forbiddenTraceMarkers`: raw trace strings that fail the run.\n\n## Quality rules\n\n- Design the eval first. A useful env distinguishes success from a no-op mod.\n- Use unique sentinels, e.g. `MY-MOD-CANARY-OK`, not common phrases.\n- Seed `memoryFiles` rather than depending on real user memory or repo files.\n- Include negative controls for non-use. If behavior should be conditional, verify it stays silent when not triggered.\n- Include discrimination scenarios when paths, IDs, or sources matter. Put a tempting wrong sentinel in an irrelevant fixture and forbid it in the final answer.\n- Put load failures in `forbiddenTraceMarkers`, usually:\n  - `[mods] failed to load`\n  - `[extensions] failed to load`\n  - `loaded 0 mod(s)`\n  - `loaded 0 extension(s)`\n- For eval-facing tools, require `requiresApproval: false`, `parallelSafe: true`, and a strict no-argument schema when applicable.\n- Avoid over-brittle trace markers. Prefer stable substrings like the tool name plus `\"message_type\":\"tool_return_message\"`.\n- Keep requirements behavioral; put fragile implementation details in `modApiHints` only when needed.\n\n## Minimal scenario-suite example\n\n```json\n{\n  \"name\": \"Hello tool mod learner demo\",\n  \"slug\": \"hello-tool\",\n  \"objective\": \"Learn a trusted local mod that registers a read-only hello_mod_ping tool returning a fixed sentinel.\",\n  \"requirements\": [\n    \"Register a tool named hello_mod_ping.\",\n    \"The tool must accept no parameters, require no approval, be parallelSafe, and return the exact string HELLO-MOD-OK.\"\n  ],\n  \"candidateDiversityHints\": [\n    \"Use the smallest possible tool-only implementation.\",\n    \"Add explicit defensive checks around the tool schema.\"\n  ],\n  \"modApiHints\": [\n    \"Use export function activate(letta) or a default export.\",\n    \"Use letta.tools.register({ name, description, parameters, requiresApproval, parallelSafe, run }).\",\n    \"A no-argument tool schema is { \\\"type\\\": \\\"object\\\", \\\"properties\\\": {}, \\\"additionalProperties\\\": false }.\"\n  ],\n  \"evaluation\": {\n    \"outputFormat\": \"stream-json\",\n    \"timeoutMs\": 900000,\n    \"maxTurns\": 6,\n    \"forbiddenTraceMarkers\": [\"[mods] failed to load\", \"loaded 0 mod(s)\"],\n    \"scenarios\": [\n      {\n        \"name\": \"happy-path\",\n        \"prompt\": \"Call the hello_mod_ping tool, then answer with the exact text HELLO-MOD-OK.\",\n        \"requiredResultMarkers\": [\"HELLO-MOD-OK\"],\n        \"requiredTraceMarkers\": [\"hello_mod_ping\", \"\\\"message_type\\\":\\\"tool_return_message\\\"\"]\n      },\n      {\n        \"name\": \"negative-control\",\n        \"prompt\": \"Answer without calling tools: what is 2 + 2?\",\n        \"requiredResultMarkers\": [\"4\"],\n        \"forbiddenTraceMarkers\": [\"hello_mod_ping\"]\n      }\n    ]\n  }\n}\n```\n",{"data":42,"body":44},{"name":4,"description":6,"disable-model-invocation":43,"user-invocable":43},true,{"type":45,"children":46},"root",[47,56,79,86,188,222,235,244,254,275,288,294,299,357,362,424,429,579,585,724,730,1796],{"type":48,"tag":49,"props":50,"children":52},"element","h1",{"id":51},"generating-mod-learning-envs",[53],{"type":54,"value":55},"text","Generating mod learning envs",{"type":48,"tag":57,"props":58,"children":59},"p",{},[60,62,69,71,77],{"type":54,"value":61},"Use this skill to create JSON envs consumed by ",{"type":48,"tag":63,"props":64,"children":66},"code",{"className":65},[],[67],{"type":54,"value":68},"\u002Fmods learn --env=\u003Cpath>",{"type":54,"value":70}," or ",{"type":48,"tag":63,"props":72,"children":74},{"className":73},[],[75],{"type":54,"value":76},"bun scripts\u002Fmod-learning\u002Flearn-mod.ts --env \u003Cpath>",{"type":54,"value":78},". An env describes the mod behavior to learn and the scenario-suite eval used to score candidates.",{"type":48,"tag":80,"props":81,"children":83},"h2",{"id":82},"workflow",[84],{"type":54,"value":85},"Workflow",{"type":48,"tag":87,"props":88,"children":89},"ol",{},[90,115,139,152,183],{"type":48,"tag":91,"props":92,"children":93},"li",{},[94,96],{"type":54,"value":95},"Define the behavior and eval before writing JSON.\n",{"type":48,"tag":97,"props":98,"children":99},"ul",{},[100,105,110],{"type":48,"tag":91,"props":101,"children":102},{},[103],{"type":54,"value":104},"What should the mod do? Tool, turn event, tool event, provider, command, status, etc.",{"type":48,"tag":91,"props":106,"children":107},{},[108],{"type":54,"value":109},"What would a placebo\u002Fno-op mod fail?",{"type":48,"tag":91,"props":111,"children":112},{},[113],{"type":54,"value":114},"What unique sentinel strings make success unambiguous?",{"type":48,"tag":91,"props":116,"children":117},{},[118,120],{"type":54,"value":119},"Choose a path:\n",{"type":48,"tag":97,"props":121,"children":122},{},[123,134],{"type":48,"tag":91,"props":124,"children":125},{},[126,128],{"type":54,"value":127},"Repo example: ",{"type":48,"tag":63,"props":129,"children":131},{"className":130},[],[132],{"type":54,"value":133},"docs\u002Fexamples\u002Fmods\u002Flearning\u002F\u003Cslug>.env.json",{"type":48,"tag":91,"props":135,"children":136},{},[137],{"type":54,"value":138},"Local\u002Fprivate: any user-requested path",{"type":48,"tag":91,"props":140,"children":141},{},[142,144,150],{"type":54,"value":143},"Draft strict JSON. Start from ",{"type":48,"tag":63,"props":145,"children":147},{"className":146},[],[148],{"type":54,"value":149},"assets\u002Fmod-learning-env.template.json",{"type":54,"value":151}," if useful. No comments or trailing commas.",{"type":48,"tag":91,"props":153,"children":154},{},[155,157,163,165],{"type":54,"value":156},"Prefer ",{"type":48,"tag":63,"props":158,"children":160},{"className":159},[],[161],{"type":54,"value":162},"evaluation.scenarios",{"type":54,"value":164}," with at least:\n",{"type":48,"tag":97,"props":166,"children":167},{},[168,173,178],{"type":48,"tag":91,"props":169,"children":170},{},[171],{"type":54,"value":172},"happy path",{"type":48,"tag":91,"props":174,"children":175},{},[176],{"type":54,"value":177},"discrimination\u002Fexact-target path",{"type":48,"tag":91,"props":179,"children":180},{},[181],{"type":54,"value":182},"negative control",{"type":48,"tag":91,"props":184,"children":185},{},[186],{"type":54,"value":187},"Validate:",{"type":48,"tag":189,"props":190,"children":195},"pre",{"className":191,"code":192,"language":193,"meta":194,"style":194},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bun src\u002Fskills\u002Fbuiltin\u002Fgenerating-mod-envs\u002Fscripts\u002Fvalidate-mod-env.ts path\u002Fto\u002Fenv.json\n","bash","",[196],{"type":48,"tag":63,"props":197,"children":198},{"__ignoreMap":194},[199],{"type":48,"tag":200,"props":201,"children":204},"span",{"class":202,"line":203},"line",1,[205,211,217],{"type":48,"tag":200,"props":206,"children":208},{"style":207},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[209],{"type":54,"value":210},"bun",{"type":48,"tag":200,"props":212,"children":214},{"style":213},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[215],{"type":54,"value":216}," src\u002Fskills\u002Fbuiltin\u002Fgenerating-mod-envs\u002Fscripts\u002Fvalidate-mod-env.ts",{"type":48,"tag":200,"props":218,"children":219},{"style":213},[220],{"type":54,"value":221}," path\u002Fto\u002Fenv.json\n",{"type":48,"tag":57,"props":223,"children":224},{},[225,227,233],{"type":54,"value":226},"If this skill is installed outside the source tree, run the same script from this skill directory: ",{"type":48,"tag":63,"props":228,"children":230},{"className":229},[],[231],{"type":54,"value":232},"scripts\u002Fvalidate-mod-env.ts",{"type":54,"value":234},".",{"type":48,"tag":87,"props":236,"children":238},{"start":237},6,[239],{"type":48,"tag":91,"props":240,"children":241},{},[242],{"type":54,"value":243},"If asked to run it:",{"type":48,"tag":189,"props":245,"children":249},{"className":246,"code":248,"language":54,"meta":194},[247],"language-text","\u002Fmods learn --env=path\u002Fto\u002Fenv.json --model=auto --backend=api --out=\u002Ftmp\u002F\u003Cslug>-learn\n",[250],{"type":48,"tag":63,"props":251,"children":252},{"__ignoreMap":194},[253],{"type":54,"value":248},{"type":48,"tag":57,"props":255,"children":256},{},[257,259,265,267,273],{"type":54,"value":258},"The raw ",{"type":48,"tag":63,"props":260,"children":262},{"className":261},[],[263],{"type":54,"value":264},"scripts\u002Fmod-learning\u002Flearn-mod.ts",{"type":54,"value":266}," dev script detaches by default. Add ",{"type":48,"tag":63,"props":268,"children":270},{"className":269},[],[271],{"type":54,"value":272},"--foreground",{"type":54,"value":274}," only when a blocking pass\u002Ffail exit code is needed.",{"type":48,"tag":57,"props":276,"children":277},{},[278,280,286],{"type":54,"value":279},"Use single-line ",{"type":48,"tag":63,"props":281,"children":283},{"className":282},[],[284],{"type":54,"value":285},"--flag=value",{"type":54,"value":287}," commands for TUI instructions.",{"type":48,"tag":80,"props":289,"children":291},{"id":290},"env-shape",[292],{"type":54,"value":293},"Env shape",{"type":48,"tag":57,"props":295,"children":296},{},[297],{"type":54,"value":298},"Required top-level fields:",{"type":48,"tag":97,"props":300,"children":301},{},[302,313,324,335,346],{"type":48,"tag":91,"props":303,"children":304},{},[305,311],{"type":48,"tag":63,"props":306,"children":308},{"className":307},[],[309],{"type":54,"value":310},"name",{"type":54,"value":312},": human display name.",{"type":48,"tag":91,"props":314,"children":315},{},[316,322],{"type":48,"tag":63,"props":317,"children":319},{"className":318},[],[320],{"type":54,"value":321},"slug",{"type":54,"value":323},": stable kebab-case run\u002Fcandidate slug.",{"type":48,"tag":91,"props":325,"children":326},{},[327,333],{"type":48,"tag":63,"props":328,"children":330},{"className":329},[],[331],{"type":54,"value":332},"objective",{"type":54,"value":334},": one-paragraph target for the generation agent.",{"type":48,"tag":91,"props":336,"children":337},{},[338,344],{"type":48,"tag":63,"props":339,"children":341},{"className":340},[],[342],{"type":54,"value":343},"requirements",{"type":54,"value":345},": concrete pass\u002Ffail behavior constraints.",{"type":48,"tag":91,"props":347,"children":348},{},[349,355],{"type":48,"tag":63,"props":350,"children":352},{"className":351},[],[353],{"type":54,"value":354},"evaluation",{"type":54,"value":356},": either a single prompt eval or a scenario suite.",{"type":48,"tag":57,"props":358,"children":359},{},[360],{"type":54,"value":361},"Common optional fields:",{"type":48,"tag":97,"props":363,"children":364},{},[365,391,402,413],{"type":48,"tag":91,"props":366,"children":367},{},[368,374,376,381,383,389],{"type":48,"tag":63,"props":369,"children":371},{"className":370},[],[372],{"type":54,"value":373},"targetModName",{"type":54,"value":375},": display metadata for the intended mod filename. The harness still chooses the candidate filename from ",{"type":48,"tag":63,"props":377,"children":379},{"className":378},[],[380],{"type":54,"value":321},{"type":54,"value":382}," unless ",{"type":48,"tag":63,"props":384,"children":386},{"className":385},[],[387],{"type":54,"value":388},"--candidate-file-name",{"type":54,"value":390}," is passed.",{"type":48,"tag":91,"props":392,"children":393},{},[394,400],{"type":48,"tag":63,"props":395,"children":397},{"className":396},[],[398],{"type":54,"value":399},"candidateDiversityHints",{"type":54,"value":401},": strategies assigned across multi-candidate runs.",{"type":48,"tag":91,"props":403,"children":404},{},[405,411],{"type":48,"tag":63,"props":406,"children":408},{"className":407},[],[409],{"type":54,"value":410},"modApiHints",{"type":54,"value":412},": concise API reminders that prevent bad generated code.",{"type":48,"tag":91,"props":414,"children":415},{},[416,422],{"type":48,"tag":63,"props":417,"children":419},{"className":418},[],[420],{"type":54,"value":421},"examples",{"type":54,"value":423},": small input\u002Fexpected demos for the generation prompt.",{"type":48,"tag":57,"props":425,"children":426},{},[427],{"type":54,"value":428},"Evaluation fields:",{"type":48,"tag":97,"props":430,"children":431},{},[432,451,470,488,499,535,546,557,568],{"type":48,"tag":91,"props":433,"children":434},{},[435,441,443,449],{"type":48,"tag":63,"props":436,"children":438},{"className":437},[],[439],{"type":54,"value":440},"evaluation.outputFormat",{"type":54,"value":442},": use ",{"type":48,"tag":63,"props":444,"children":446},{"className":445},[],[447],{"type":54,"value":448},"stream-json",{"type":54,"value":450}," when checking trace markers.",{"type":48,"tag":91,"props":452,"children":453},{},[454,460,462,468],{"type":48,"tag":63,"props":455,"children":457},{"className":456},[],[458],{"type":54,"value":459},"evaluation.timeoutMs",{"type":54,"value":461},", ",{"type":48,"tag":63,"props":463,"children":465},{"className":464},[],[466],{"type":54,"value":467},"evaluation.maxTurns",{"type":54,"value":469},": per-scenario defaults.",{"type":48,"tag":91,"props":471,"children":472},{},[473,479,481,487],{"type":48,"tag":63,"props":474,"children":476},{"className":475},[],[477],{"type":54,"value":478},"evaluation.memoryFiles",{"type":54,"value":480},": files seeded under eval ",{"type":48,"tag":63,"props":482,"children":484},{"className":483},[],[485],{"type":54,"value":486},"$MEMORY_DIR",{"type":54,"value":234},{"type":48,"tag":91,"props":489,"children":490},{},[491,497],{"type":48,"tag":63,"props":492,"children":494},{"className":493},[],[495],{"type":54,"value":496},"evaluation.scenarios[]",{"type":54,"value":498},": scenario-specific overrides and fixtures.",{"type":48,"tag":91,"props":500,"children":501},{},[502,504,510,512,518,520,526,528,534],{"type":54,"value":503},"In scenario-suite envs, do not add a top-level ",{"type":48,"tag":63,"props":505,"children":507},{"className":506},[],[508],{"type":54,"value":509},"evaluation.prompt",{"type":54,"value":511}," unless that prompt must run for every scenario. Assertion-only scenarios should have ",{"type":48,"tag":63,"props":513,"children":515},{"className":514},[],[516],{"type":54,"value":517},"assertions",{"type":54,"value":519}," and no ",{"type":48,"tag":63,"props":521,"children":523},{"className":522},[],[524],{"type":54,"value":525},"prompt",{"type":54,"value":527},"; only scenarios that require model behavior should define ",{"type":48,"tag":63,"props":529,"children":531},{"className":530},[],[532],{"type":54,"value":533},"scenario.prompt",{"type":54,"value":234},{"type":48,"tag":91,"props":536,"children":537},{},[538,544],{"type":48,"tag":63,"props":539,"children":541},{"className":540},[],[542],{"type":54,"value":543},"requiredResultMarkers",{"type":54,"value":545},": literal strings required in the final answer.",{"type":48,"tag":91,"props":547,"children":548},{},[549,555],{"type":48,"tag":63,"props":550,"children":552},{"className":551},[],[553],{"type":54,"value":554},"requiredTraceMarkers",{"type":54,"value":556},": literal strings required in raw stdout\u002Fstderr.",{"type":48,"tag":91,"props":558,"children":559},{},[560,566],{"type":48,"tag":63,"props":561,"children":563},{"className":562},[],[564],{"type":54,"value":565},"forbiddenResultMarkers",{"type":54,"value":567},": final-answer strings that fail the run.",{"type":48,"tag":91,"props":569,"children":570},{},[571,577],{"type":48,"tag":63,"props":572,"children":574},{"className":573},[],[575],{"type":54,"value":576},"forbiddenTraceMarkers",{"type":54,"value":578},": raw trace strings that fail the run.",{"type":48,"tag":80,"props":580,"children":582},{"id":581},"quality-rules",[583],{"type":54,"value":584},"Quality rules",{"type":48,"tag":97,"props":586,"children":587},{},[588,593,606,619,624,629,680,700,712],{"type":48,"tag":91,"props":589,"children":590},{},[591],{"type":54,"value":592},"Design the eval first. A useful env distinguishes success from a no-op mod.",{"type":48,"tag":91,"props":594,"children":595},{},[596,598,604],{"type":54,"value":597},"Use unique sentinels, e.g. ",{"type":48,"tag":63,"props":599,"children":601},{"className":600},[],[602],{"type":54,"value":603},"MY-MOD-CANARY-OK",{"type":54,"value":605},", not common phrases.",{"type":48,"tag":91,"props":607,"children":608},{},[609,611,617],{"type":54,"value":610},"Seed ",{"type":48,"tag":63,"props":612,"children":614},{"className":613},[],[615],{"type":54,"value":616},"memoryFiles",{"type":54,"value":618}," rather than depending on real user memory or repo files.",{"type":48,"tag":91,"props":620,"children":621},{},[622],{"type":54,"value":623},"Include negative controls for non-use. If behavior should be conditional, verify it stays silent when not triggered.",{"type":48,"tag":91,"props":625,"children":626},{},[627],{"type":54,"value":628},"Include discrimination scenarios when paths, IDs, or sources matter. Put a tempting wrong sentinel in an irrelevant fixture and forbid it in the final answer.",{"type":48,"tag":91,"props":630,"children":631},{},[632,634,639,641],{"type":54,"value":633},"Put load failures in ",{"type":48,"tag":63,"props":635,"children":637},{"className":636},[],[638],{"type":54,"value":576},{"type":54,"value":640},", usually:\n",{"type":48,"tag":97,"props":642,"children":643},{},[644,653,662,671],{"type":48,"tag":91,"props":645,"children":646},{},[647],{"type":48,"tag":63,"props":648,"children":650},{"className":649},[],[651],{"type":54,"value":652},"[mods] failed to load",{"type":48,"tag":91,"props":654,"children":655},{},[656],{"type":48,"tag":63,"props":657,"children":659},{"className":658},[],[660],{"type":54,"value":661},"[extensions] failed to load",{"type":48,"tag":91,"props":663,"children":664},{},[665],{"type":48,"tag":63,"props":666,"children":668},{"className":667},[],[669],{"type":54,"value":670},"loaded 0 mod(s)",{"type":48,"tag":91,"props":672,"children":673},{},[674],{"type":48,"tag":63,"props":675,"children":677},{"className":676},[],[678],{"type":54,"value":679},"loaded 0 extension(s)",{"type":48,"tag":91,"props":681,"children":682},{},[683,685,691,692,698],{"type":54,"value":684},"For eval-facing tools, require ",{"type":48,"tag":63,"props":686,"children":688},{"className":687},[],[689],{"type":54,"value":690},"requiresApproval: false",{"type":54,"value":461},{"type":48,"tag":63,"props":693,"children":695},{"className":694},[],[696],{"type":54,"value":697},"parallelSafe: true",{"type":54,"value":699},", and a strict no-argument schema when applicable.",{"type":48,"tag":91,"props":701,"children":702},{},[703,705,711],{"type":54,"value":704},"Avoid over-brittle trace markers. Prefer stable substrings like the tool name plus ",{"type":48,"tag":63,"props":706,"children":708},{"className":707},[],[709],{"type":54,"value":710},"\"message_type\":\"tool_return_message\"",{"type":54,"value":234},{"type":48,"tag":91,"props":713,"children":714},{},[715,717,722],{"type":54,"value":716},"Keep requirements behavioral; put fragile implementation details in ",{"type":48,"tag":63,"props":718,"children":720},{"className":719},[],[721],{"type":54,"value":410},{"type":54,"value":723}," only when needed.",{"type":48,"tag":80,"props":725,"children":727},{"id":726},"minimal-scenario-suite-example",[728],{"type":54,"value":729},"Minimal scenario-suite example",{"type":48,"tag":189,"props":731,"children":735},{"className":732,"code":733,"language":734,"meta":194,"style":194},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"name\": \"Hello tool mod learner demo\",\n  \"slug\": \"hello-tool\",\n  \"objective\": \"Learn a trusted local mod that registers a read-only hello_mod_ping tool returning a fixed sentinel.\",\n  \"requirements\": [\n    \"Register a tool named hello_mod_ping.\",\n    \"The tool must accept no parameters, require no approval, be parallelSafe, and return the exact string HELLO-MOD-OK.\"\n  ],\n  \"candidateDiversityHints\": [\n    \"Use the smallest possible tool-only implementation.\",\n    \"Add explicit defensive checks around the tool schema.\"\n  ],\n  \"modApiHints\": [\n    \"Use export function activate(letta) or a default export.\",\n    \"Use letta.tools.register({ name, description, parameters, requiresApproval, parallelSafe, run }).\",\n    \"A no-argument tool schema is { \\\"type\\\": \\\"object\\\", \\\"properties\\\": {}, \\\"additionalProperties\\\": false }.\"\n  ],\n  \"evaluation\": {\n    \"outputFormat\": \"stream-json\",\n    \"timeoutMs\": 900000,\n    \"maxTurns\": 6,\n    \"forbiddenTraceMarkers\": [\"[mods] failed to load\", \"loaded 0 mod(s)\"],\n    \"scenarios\": [\n      {\n        \"name\": \"happy-path\",\n        \"prompt\": \"Call the hello_mod_ping tool, then answer with the exact text HELLO-MOD-OK.\",\n        \"requiredResultMarkers\": [\"HELLO-MOD-OK\"],\n        \"requiredTraceMarkers\": [\"hello_mod_ping\", \"\\\"message_type\\\":\\\"tool_return_message\\\"\"]\n      },\n      {\n        \"name\": \"negative-control\",\n        \"prompt\": \"Answer without calling tools: what is 2 + 2?\",\n        \"requiredResultMarkers\": [\"4\"],\n        \"forbiddenTraceMarkers\": [\"hello_mod_ping\"]\n      }\n    ]\n  }\n}\n","json",[736],{"type":48,"tag":63,"props":737,"children":738},{"__ignoreMap":194},[739,748,791,828,865,890,911,929,938,962,983,1000,1008,1032,1053,1074,1164,1172,1197,1234,1265,1295,1354,1379,1388,1426,1463,1504,1588,1597,1605,1642,1679,1720,1760,1769,1778,1787],{"type":48,"tag":200,"props":740,"children":741},{"class":202,"line":203},[742],{"type":48,"tag":200,"props":743,"children":745},{"style":744},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[746],{"type":54,"value":747},"{\n",{"type":48,"tag":200,"props":749,"children":751},{"class":202,"line":750},2,[752,757,762,767,772,777,782,786],{"type":48,"tag":200,"props":753,"children":754},{"style":744},[755],{"type":54,"value":756},"  \"",{"type":48,"tag":200,"props":758,"children":760},{"style":759},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[761],{"type":54,"value":310},{"type":48,"tag":200,"props":763,"children":764},{"style":744},[765],{"type":54,"value":766},"\"",{"type":48,"tag":200,"props":768,"children":769},{"style":744},[770],{"type":54,"value":771},":",{"type":48,"tag":200,"props":773,"children":774},{"style":744},[775],{"type":54,"value":776}," \"",{"type":48,"tag":200,"props":778,"children":779},{"style":213},[780],{"type":54,"value":781},"Hello tool mod learner demo",{"type":48,"tag":200,"props":783,"children":784},{"style":744},[785],{"type":54,"value":766},{"type":48,"tag":200,"props":787,"children":788},{"style":744},[789],{"type":54,"value":790},",\n",{"type":48,"tag":200,"props":792,"children":794},{"class":202,"line":793},3,[795,799,803,807,811,815,820,824],{"type":48,"tag":200,"props":796,"children":797},{"style":744},[798],{"type":54,"value":756},{"type":48,"tag":200,"props":800,"children":801},{"style":759},[802],{"type":54,"value":321},{"type":48,"tag":200,"props":804,"children":805},{"style":744},[806],{"type":54,"value":766},{"type":48,"tag":200,"props":808,"children":809},{"style":744},[810],{"type":54,"value":771},{"type":48,"tag":200,"props":812,"children":813},{"style":744},[814],{"type":54,"value":776},{"type":48,"tag":200,"props":816,"children":817},{"style":213},[818],{"type":54,"value":819},"hello-tool",{"type":48,"tag":200,"props":821,"children":822},{"style":744},[823],{"type":54,"value":766},{"type":48,"tag":200,"props":825,"children":826},{"style":744},[827],{"type":54,"value":790},{"type":48,"tag":200,"props":829,"children":831},{"class":202,"line":830},4,[832,836,840,844,848,852,857,861],{"type":48,"tag":200,"props":833,"children":834},{"style":744},[835],{"type":54,"value":756},{"type":48,"tag":200,"props":837,"children":838},{"style":759},[839],{"type":54,"value":332},{"type":48,"tag":200,"props":841,"children":842},{"style":744},[843],{"type":54,"value":766},{"type":48,"tag":200,"props":845,"children":846},{"style":744},[847],{"type":54,"value":771},{"type":48,"tag":200,"props":849,"children":850},{"style":744},[851],{"type":54,"value":776},{"type":48,"tag":200,"props":853,"children":854},{"style":213},[855],{"type":54,"value":856},"Learn a trusted local mod that registers a read-only hello_mod_ping tool returning a fixed sentinel.",{"type":48,"tag":200,"props":858,"children":859},{"style":744},[860],{"type":54,"value":766},{"type":48,"tag":200,"props":862,"children":863},{"style":744},[864],{"type":54,"value":790},{"type":48,"tag":200,"props":866,"children":868},{"class":202,"line":867},5,[869,873,877,881,885],{"type":48,"tag":200,"props":870,"children":871},{"style":744},[872],{"type":54,"value":756},{"type":48,"tag":200,"props":874,"children":875},{"style":759},[876],{"type":54,"value":343},{"type":48,"tag":200,"props":878,"children":879},{"style":744},[880],{"type":54,"value":766},{"type":48,"tag":200,"props":882,"children":883},{"style":744},[884],{"type":54,"value":771},{"type":48,"tag":200,"props":886,"children":887},{"style":744},[888],{"type":54,"value":889}," [\n",{"type":48,"tag":200,"props":891,"children":892},{"class":202,"line":237},[893,898,903,907],{"type":48,"tag":200,"props":894,"children":895},{"style":744},[896],{"type":54,"value":897},"    \"",{"type":48,"tag":200,"props":899,"children":900},{"style":213},[901],{"type":54,"value":902},"Register a tool named hello_mod_ping.",{"type":48,"tag":200,"props":904,"children":905},{"style":744},[906],{"type":54,"value":766},{"type":48,"tag":200,"props":908,"children":909},{"style":744},[910],{"type":54,"value":790},{"type":48,"tag":200,"props":912,"children":914},{"class":202,"line":913},7,[915,919,924],{"type":48,"tag":200,"props":916,"children":917},{"style":744},[918],{"type":54,"value":897},{"type":48,"tag":200,"props":920,"children":921},{"style":213},[922],{"type":54,"value":923},"The tool must accept no parameters, require no approval, be parallelSafe, and return the exact string HELLO-MOD-OK.",{"type":48,"tag":200,"props":925,"children":926},{"style":744},[927],{"type":54,"value":928},"\"\n",{"type":48,"tag":200,"props":930,"children":932},{"class":202,"line":931},8,[933],{"type":48,"tag":200,"props":934,"children":935},{"style":744},[936],{"type":54,"value":937},"  ],\n",{"type":48,"tag":200,"props":939,"children":941},{"class":202,"line":940},9,[942,946,950,954,958],{"type":48,"tag":200,"props":943,"children":944},{"style":744},[945],{"type":54,"value":756},{"type":48,"tag":200,"props":947,"children":948},{"style":759},[949],{"type":54,"value":399},{"type":48,"tag":200,"props":951,"children":952},{"style":744},[953],{"type":54,"value":766},{"type":48,"tag":200,"props":955,"children":956},{"style":744},[957],{"type":54,"value":771},{"type":48,"tag":200,"props":959,"children":960},{"style":744},[961],{"type":54,"value":889},{"type":48,"tag":200,"props":963,"children":965},{"class":202,"line":964},10,[966,970,975,979],{"type":48,"tag":200,"props":967,"children":968},{"style":744},[969],{"type":54,"value":897},{"type":48,"tag":200,"props":971,"children":972},{"style":213},[973],{"type":54,"value":974},"Use the smallest possible tool-only implementation.",{"type":48,"tag":200,"props":976,"children":977},{"style":744},[978],{"type":54,"value":766},{"type":48,"tag":200,"props":980,"children":981},{"style":744},[982],{"type":54,"value":790},{"type":48,"tag":200,"props":984,"children":986},{"class":202,"line":985},11,[987,991,996],{"type":48,"tag":200,"props":988,"children":989},{"style":744},[990],{"type":54,"value":897},{"type":48,"tag":200,"props":992,"children":993},{"style":213},[994],{"type":54,"value":995},"Add explicit defensive checks around the tool schema.",{"type":48,"tag":200,"props":997,"children":998},{"style":744},[999],{"type":54,"value":928},{"type":48,"tag":200,"props":1001,"children":1003},{"class":202,"line":1002},12,[1004],{"type":48,"tag":200,"props":1005,"children":1006},{"style":744},[1007],{"type":54,"value":937},{"type":48,"tag":200,"props":1009,"children":1011},{"class":202,"line":1010},13,[1012,1016,1020,1024,1028],{"type":48,"tag":200,"props":1013,"children":1014},{"style":744},[1015],{"type":54,"value":756},{"type":48,"tag":200,"props":1017,"children":1018},{"style":759},[1019],{"type":54,"value":410},{"type":48,"tag":200,"props":1021,"children":1022},{"style":744},[1023],{"type":54,"value":766},{"type":48,"tag":200,"props":1025,"children":1026},{"style":744},[1027],{"type":54,"value":771},{"type":48,"tag":200,"props":1029,"children":1030},{"style":744},[1031],{"type":54,"value":889},{"type":48,"tag":200,"props":1033,"children":1035},{"class":202,"line":1034},14,[1036,1040,1045,1049],{"type":48,"tag":200,"props":1037,"children":1038},{"style":744},[1039],{"type":54,"value":897},{"type":48,"tag":200,"props":1041,"children":1042},{"style":213},[1043],{"type":54,"value":1044},"Use export function activate(letta) or a default export.",{"type":48,"tag":200,"props":1046,"children":1047},{"style":744},[1048],{"type":54,"value":766},{"type":48,"tag":200,"props":1050,"children":1051},{"style":744},[1052],{"type":54,"value":790},{"type":48,"tag":200,"props":1054,"children":1056},{"class":202,"line":1055},15,[1057,1061,1066,1070],{"type":48,"tag":200,"props":1058,"children":1059},{"style":744},[1060],{"type":54,"value":897},{"type":48,"tag":200,"props":1062,"children":1063},{"style":213},[1064],{"type":54,"value":1065},"Use letta.tools.register({ name, description, parameters, requiresApproval, parallelSafe, run }).",{"type":48,"tag":200,"props":1067,"children":1068},{"style":744},[1069],{"type":54,"value":766},{"type":48,"tag":200,"props":1071,"children":1072},{"style":744},[1073],{"type":54,"value":790},{"type":48,"tag":200,"props":1075,"children":1077},{"class":202,"line":1076},16,[1078,1082,1087,1093,1098,1102,1107,1111,1116,1120,1124,1128,1133,1137,1142,1146,1151,1155,1160],{"type":48,"tag":200,"props":1079,"children":1080},{"style":744},[1081],{"type":54,"value":897},{"type":48,"tag":200,"props":1083,"children":1084},{"style":213},[1085],{"type":54,"value":1086},"A no-argument tool schema is { ",{"type":48,"tag":200,"props":1088,"children":1090},{"style":1089},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1091],{"type":54,"value":1092},"\\\"",{"type":48,"tag":200,"props":1094,"children":1095},{"style":213},[1096],{"type":54,"value":1097},"type",{"type":48,"tag":200,"props":1099,"children":1100},{"style":1089},[1101],{"type":54,"value":1092},{"type":48,"tag":200,"props":1103,"children":1104},{"style":213},[1105],{"type":54,"value":1106},": ",{"type":48,"tag":200,"props":1108,"children":1109},{"style":1089},[1110],{"type":54,"value":1092},{"type":48,"tag":200,"props":1112,"children":1113},{"style":213},[1114],{"type":54,"value":1115},"object",{"type":48,"tag":200,"props":1117,"children":1118},{"style":1089},[1119],{"type":54,"value":1092},{"type":48,"tag":200,"props":1121,"children":1122},{"style":213},[1123],{"type":54,"value":461},{"type":48,"tag":200,"props":1125,"children":1126},{"style":1089},[1127],{"type":54,"value":1092},{"type":48,"tag":200,"props":1129,"children":1130},{"style":213},[1131],{"type":54,"value":1132},"properties",{"type":48,"tag":200,"props":1134,"children":1135},{"style":1089},[1136],{"type":54,"value":1092},{"type":48,"tag":200,"props":1138,"children":1139},{"style":213},[1140],{"type":54,"value":1141},": {}, ",{"type":48,"tag":200,"props":1143,"children":1144},{"style":1089},[1145],{"type":54,"value":1092},{"type":48,"tag":200,"props":1147,"children":1148},{"style":213},[1149],{"type":54,"value":1150},"additionalProperties",{"type":48,"tag":200,"props":1152,"children":1153},{"style":1089},[1154],{"type":54,"value":1092},{"type":48,"tag":200,"props":1156,"children":1157},{"style":213},[1158],{"type":54,"value":1159},": false }.",{"type":48,"tag":200,"props":1161,"children":1162},{"style":744},[1163],{"type":54,"value":928},{"type":48,"tag":200,"props":1165,"children":1167},{"class":202,"line":1166},17,[1168],{"type":48,"tag":200,"props":1169,"children":1170},{"style":744},[1171],{"type":54,"value":937},{"type":48,"tag":200,"props":1173,"children":1175},{"class":202,"line":1174},18,[1176,1180,1184,1188,1192],{"type":48,"tag":200,"props":1177,"children":1178},{"style":744},[1179],{"type":54,"value":756},{"type":48,"tag":200,"props":1181,"children":1182},{"style":759},[1183],{"type":54,"value":354},{"type":48,"tag":200,"props":1185,"children":1186},{"style":744},[1187],{"type":54,"value":766},{"type":48,"tag":200,"props":1189,"children":1190},{"style":744},[1191],{"type":54,"value":771},{"type":48,"tag":200,"props":1193,"children":1194},{"style":744},[1195],{"type":54,"value":1196}," {\n",{"type":48,"tag":200,"props":1198,"children":1200},{"class":202,"line":1199},19,[1201,1205,1210,1214,1218,1222,1226,1230],{"type":48,"tag":200,"props":1202,"children":1203},{"style":744},[1204],{"type":54,"value":897},{"type":48,"tag":200,"props":1206,"children":1207},{"style":207},[1208],{"type":54,"value":1209},"outputFormat",{"type":48,"tag":200,"props":1211,"children":1212},{"style":744},[1213],{"type":54,"value":766},{"type":48,"tag":200,"props":1215,"children":1216},{"style":744},[1217],{"type":54,"value":771},{"type":48,"tag":200,"props":1219,"children":1220},{"style":744},[1221],{"type":54,"value":776},{"type":48,"tag":200,"props":1223,"children":1224},{"style":213},[1225],{"type":54,"value":448},{"type":48,"tag":200,"props":1227,"children":1228},{"style":744},[1229],{"type":54,"value":766},{"type":48,"tag":200,"props":1231,"children":1232},{"style":744},[1233],{"type":54,"value":790},{"type":48,"tag":200,"props":1235,"children":1237},{"class":202,"line":1236},20,[1238,1242,1247,1251,1255,1261],{"type":48,"tag":200,"props":1239,"children":1240},{"style":744},[1241],{"type":54,"value":897},{"type":48,"tag":200,"props":1243,"children":1244},{"style":207},[1245],{"type":54,"value":1246},"timeoutMs",{"type":48,"tag":200,"props":1248,"children":1249},{"style":744},[1250],{"type":54,"value":766},{"type":48,"tag":200,"props":1252,"children":1253},{"style":744},[1254],{"type":54,"value":771},{"type":48,"tag":200,"props":1256,"children":1258},{"style":1257},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[1259],{"type":54,"value":1260}," 900000",{"type":48,"tag":200,"props":1262,"children":1263},{"style":744},[1264],{"type":54,"value":790},{"type":48,"tag":200,"props":1266,"children":1268},{"class":202,"line":1267},21,[1269,1273,1278,1282,1286,1291],{"type":48,"tag":200,"props":1270,"children":1271},{"style":744},[1272],{"type":54,"value":897},{"type":48,"tag":200,"props":1274,"children":1275},{"style":207},[1276],{"type":54,"value":1277},"maxTurns",{"type":48,"tag":200,"props":1279,"children":1280},{"style":744},[1281],{"type":54,"value":766},{"type":48,"tag":200,"props":1283,"children":1284},{"style":744},[1285],{"type":54,"value":771},{"type":48,"tag":200,"props":1287,"children":1288},{"style":1257},[1289],{"type":54,"value":1290}," 6",{"type":48,"tag":200,"props":1292,"children":1293},{"style":744},[1294],{"type":54,"value":790},{"type":48,"tag":200,"props":1296,"children":1298},{"class":202,"line":1297},22,[1299,1303,1307,1311,1315,1320,1324,1328,1332,1337,1341,1345,1349],{"type":48,"tag":200,"props":1300,"children":1301},{"style":744},[1302],{"type":54,"value":897},{"type":48,"tag":200,"props":1304,"children":1305},{"style":207},[1306],{"type":54,"value":576},{"type":48,"tag":200,"props":1308,"children":1309},{"style":744},[1310],{"type":54,"value":766},{"type":48,"tag":200,"props":1312,"children":1313},{"style":744},[1314],{"type":54,"value":771},{"type":48,"tag":200,"props":1316,"children":1317},{"style":744},[1318],{"type":54,"value":1319}," [",{"type":48,"tag":200,"props":1321,"children":1322},{"style":744},[1323],{"type":54,"value":766},{"type":48,"tag":200,"props":1325,"children":1326},{"style":213},[1327],{"type":54,"value":652},{"type":48,"tag":200,"props":1329,"children":1330},{"style":744},[1331],{"type":54,"value":766},{"type":48,"tag":200,"props":1333,"children":1334},{"style":744},[1335],{"type":54,"value":1336},",",{"type":48,"tag":200,"props":1338,"children":1339},{"style":744},[1340],{"type":54,"value":776},{"type":48,"tag":200,"props":1342,"children":1343},{"style":213},[1344],{"type":54,"value":670},{"type":48,"tag":200,"props":1346,"children":1347},{"style":744},[1348],{"type":54,"value":766},{"type":48,"tag":200,"props":1350,"children":1351},{"style":744},[1352],{"type":54,"value":1353},"],\n",{"type":48,"tag":200,"props":1355,"children":1357},{"class":202,"line":1356},23,[1358,1362,1367,1371,1375],{"type":48,"tag":200,"props":1359,"children":1360},{"style":744},[1361],{"type":54,"value":897},{"type":48,"tag":200,"props":1363,"children":1364},{"style":207},[1365],{"type":54,"value":1366},"scenarios",{"type":48,"tag":200,"props":1368,"children":1369},{"style":744},[1370],{"type":54,"value":766},{"type":48,"tag":200,"props":1372,"children":1373},{"style":744},[1374],{"type":54,"value":771},{"type":48,"tag":200,"props":1376,"children":1377},{"style":744},[1378],{"type":54,"value":889},{"type":48,"tag":200,"props":1380,"children":1382},{"class":202,"line":1381},24,[1383],{"type":48,"tag":200,"props":1384,"children":1385},{"style":744},[1386],{"type":54,"value":1387},"      {\n",{"type":48,"tag":200,"props":1389,"children":1391},{"class":202,"line":1390},25,[1392,1397,1401,1405,1409,1413,1418,1422],{"type":48,"tag":200,"props":1393,"children":1394},{"style":744},[1395],{"type":54,"value":1396},"        \"",{"type":48,"tag":200,"props":1398,"children":1399},{"style":1257},[1400],{"type":54,"value":310},{"type":48,"tag":200,"props":1402,"children":1403},{"style":744},[1404],{"type":54,"value":766},{"type":48,"tag":200,"props":1406,"children":1407},{"style":744},[1408],{"type":54,"value":771},{"type":48,"tag":200,"props":1410,"children":1411},{"style":744},[1412],{"type":54,"value":776},{"type":48,"tag":200,"props":1414,"children":1415},{"style":213},[1416],{"type":54,"value":1417},"happy-path",{"type":48,"tag":200,"props":1419,"children":1420},{"style":744},[1421],{"type":54,"value":766},{"type":48,"tag":200,"props":1423,"children":1424},{"style":744},[1425],{"type":54,"value":790},{"type":48,"tag":200,"props":1427,"children":1429},{"class":202,"line":1428},26,[1430,1434,1438,1442,1446,1450,1455,1459],{"type":48,"tag":200,"props":1431,"children":1432},{"style":744},[1433],{"type":54,"value":1396},{"type":48,"tag":200,"props":1435,"children":1436},{"style":1257},[1437],{"type":54,"value":525},{"type":48,"tag":200,"props":1439,"children":1440},{"style":744},[1441],{"type":54,"value":766},{"type":48,"tag":200,"props":1443,"children":1444},{"style":744},[1445],{"type":54,"value":771},{"type":48,"tag":200,"props":1447,"children":1448},{"style":744},[1449],{"type":54,"value":776},{"type":48,"tag":200,"props":1451,"children":1452},{"style":213},[1453],{"type":54,"value":1454},"Call the hello_mod_ping tool, then answer with the exact text HELLO-MOD-OK.",{"type":48,"tag":200,"props":1456,"children":1457},{"style":744},[1458],{"type":54,"value":766},{"type":48,"tag":200,"props":1460,"children":1461},{"style":744},[1462],{"type":54,"value":790},{"type":48,"tag":200,"props":1464,"children":1466},{"class":202,"line":1465},27,[1467,1471,1475,1479,1483,1487,1491,1496,1500],{"type":48,"tag":200,"props":1468,"children":1469},{"style":744},[1470],{"type":54,"value":1396},{"type":48,"tag":200,"props":1472,"children":1473},{"style":1257},[1474],{"type":54,"value":543},{"type":48,"tag":200,"props":1476,"children":1477},{"style":744},[1478],{"type":54,"value":766},{"type":48,"tag":200,"props":1480,"children":1481},{"style":744},[1482],{"type":54,"value":771},{"type":48,"tag":200,"props":1484,"children":1485},{"style":744},[1486],{"type":54,"value":1319},{"type":48,"tag":200,"props":1488,"children":1489},{"style":744},[1490],{"type":54,"value":766},{"type":48,"tag":200,"props":1492,"children":1493},{"style":213},[1494],{"type":54,"value":1495},"HELLO-MOD-OK",{"type":48,"tag":200,"props":1497,"children":1498},{"style":744},[1499],{"type":54,"value":766},{"type":48,"tag":200,"props":1501,"children":1502},{"style":744},[1503],{"type":54,"value":1353},{"type":48,"tag":200,"props":1505,"children":1507},{"class":202,"line":1506},28,[1508,1512,1516,1520,1524,1528,1532,1537,1541,1545,1549,1553,1558,1562,1566,1570,1575,1579,1583],{"type":48,"tag":200,"props":1509,"children":1510},{"style":744},[1511],{"type":54,"value":1396},{"type":48,"tag":200,"props":1513,"children":1514},{"style":1257},[1515],{"type":54,"value":554},{"type":48,"tag":200,"props":1517,"children":1518},{"style":744},[1519],{"type":54,"value":766},{"type":48,"tag":200,"props":1521,"children":1522},{"style":744},[1523],{"type":54,"value":771},{"type":48,"tag":200,"props":1525,"children":1526},{"style":744},[1527],{"type":54,"value":1319},{"type":48,"tag":200,"props":1529,"children":1530},{"style":744},[1531],{"type":54,"value":766},{"type":48,"tag":200,"props":1533,"children":1534},{"style":213},[1535],{"type":54,"value":1536},"hello_mod_ping",{"type":48,"tag":200,"props":1538,"children":1539},{"style":744},[1540],{"type":54,"value":766},{"type":48,"tag":200,"props":1542,"children":1543},{"style":744},[1544],{"type":54,"value":1336},{"type":48,"tag":200,"props":1546,"children":1547},{"style":744},[1548],{"type":54,"value":776},{"type":48,"tag":200,"props":1550,"children":1551},{"style":1089},[1552],{"type":54,"value":1092},{"type":48,"tag":200,"props":1554,"children":1555},{"style":213},[1556],{"type":54,"value":1557},"message_type",{"type":48,"tag":200,"props":1559,"children":1560},{"style":1089},[1561],{"type":54,"value":1092},{"type":48,"tag":200,"props":1563,"children":1564},{"style":213},[1565],{"type":54,"value":771},{"type":48,"tag":200,"props":1567,"children":1568},{"style":1089},[1569],{"type":54,"value":1092},{"type":48,"tag":200,"props":1571,"children":1572},{"style":213},[1573],{"type":54,"value":1574},"tool_return_message",{"type":48,"tag":200,"props":1576,"children":1577},{"style":1089},[1578],{"type":54,"value":1092},{"type":48,"tag":200,"props":1580,"children":1581},{"style":744},[1582],{"type":54,"value":766},{"type":48,"tag":200,"props":1584,"children":1585},{"style":744},[1586],{"type":54,"value":1587},"]\n",{"type":48,"tag":200,"props":1589,"children":1591},{"class":202,"line":1590},29,[1592],{"type":48,"tag":200,"props":1593,"children":1594},{"style":744},[1595],{"type":54,"value":1596},"      },\n",{"type":48,"tag":200,"props":1598,"children":1600},{"class":202,"line":1599},30,[1601],{"type":48,"tag":200,"props":1602,"children":1603},{"style":744},[1604],{"type":54,"value":1387},{"type":48,"tag":200,"props":1606,"children":1608},{"class":202,"line":1607},31,[1609,1613,1617,1621,1625,1629,1634,1638],{"type":48,"tag":200,"props":1610,"children":1611},{"style":744},[1612],{"type":54,"value":1396},{"type":48,"tag":200,"props":1614,"children":1615},{"style":1257},[1616],{"type":54,"value":310},{"type":48,"tag":200,"props":1618,"children":1619},{"style":744},[1620],{"type":54,"value":766},{"type":48,"tag":200,"props":1622,"children":1623},{"style":744},[1624],{"type":54,"value":771},{"type":48,"tag":200,"props":1626,"children":1627},{"style":744},[1628],{"type":54,"value":776},{"type":48,"tag":200,"props":1630,"children":1631},{"style":213},[1632],{"type":54,"value":1633},"negative-control",{"type":48,"tag":200,"props":1635,"children":1636},{"style":744},[1637],{"type":54,"value":766},{"type":48,"tag":200,"props":1639,"children":1640},{"style":744},[1641],{"type":54,"value":790},{"type":48,"tag":200,"props":1643,"children":1645},{"class":202,"line":1644},32,[1646,1650,1654,1658,1662,1666,1671,1675],{"type":48,"tag":200,"props":1647,"children":1648},{"style":744},[1649],{"type":54,"value":1396},{"type":48,"tag":200,"props":1651,"children":1652},{"style":1257},[1653],{"type":54,"value":525},{"type":48,"tag":200,"props":1655,"children":1656},{"style":744},[1657],{"type":54,"value":766},{"type":48,"tag":200,"props":1659,"children":1660},{"style":744},[1661],{"type":54,"value":771},{"type":48,"tag":200,"props":1663,"children":1664},{"style":744},[1665],{"type":54,"value":776},{"type":48,"tag":200,"props":1667,"children":1668},{"style":213},[1669],{"type":54,"value":1670},"Answer without calling tools: what is 2 + 2?",{"type":48,"tag":200,"props":1672,"children":1673},{"style":744},[1674],{"type":54,"value":766},{"type":48,"tag":200,"props":1676,"children":1677},{"style":744},[1678],{"type":54,"value":790},{"type":48,"tag":200,"props":1680,"children":1682},{"class":202,"line":1681},33,[1683,1687,1691,1695,1699,1703,1707,1712,1716],{"type":48,"tag":200,"props":1684,"children":1685},{"style":744},[1686],{"type":54,"value":1396},{"type":48,"tag":200,"props":1688,"children":1689},{"style":1257},[1690],{"type":54,"value":543},{"type":48,"tag":200,"props":1692,"children":1693},{"style":744},[1694],{"type":54,"value":766},{"type":48,"tag":200,"props":1696,"children":1697},{"style":744},[1698],{"type":54,"value":771},{"type":48,"tag":200,"props":1700,"children":1701},{"style":744},[1702],{"type":54,"value":1319},{"type":48,"tag":200,"props":1704,"children":1705},{"style":744},[1706],{"type":54,"value":766},{"type":48,"tag":200,"props":1708,"children":1709},{"style":213},[1710],{"type":54,"value":1711},"4",{"type":48,"tag":200,"props":1713,"children":1714},{"style":744},[1715],{"type":54,"value":766},{"type":48,"tag":200,"props":1717,"children":1718},{"style":744},[1719],{"type":54,"value":1353},{"type":48,"tag":200,"props":1721,"children":1723},{"class":202,"line":1722},34,[1724,1728,1732,1736,1740,1744,1748,1752,1756],{"type":48,"tag":200,"props":1725,"children":1726},{"style":744},[1727],{"type":54,"value":1396},{"type":48,"tag":200,"props":1729,"children":1730},{"style":1257},[1731],{"type":54,"value":576},{"type":48,"tag":200,"props":1733,"children":1734},{"style":744},[1735],{"type":54,"value":766},{"type":48,"tag":200,"props":1737,"children":1738},{"style":744},[1739],{"type":54,"value":771},{"type":48,"tag":200,"props":1741,"children":1742},{"style":744},[1743],{"type":54,"value":1319},{"type":48,"tag":200,"props":1745,"children":1746},{"style":744},[1747],{"type":54,"value":766},{"type":48,"tag":200,"props":1749,"children":1750},{"style":213},[1751],{"type":54,"value":1536},{"type":48,"tag":200,"props":1753,"children":1754},{"style":744},[1755],{"type":54,"value":766},{"type":48,"tag":200,"props":1757,"children":1758},{"style":744},[1759],{"type":54,"value":1587},{"type":48,"tag":200,"props":1761,"children":1763},{"class":202,"line":1762},35,[1764],{"type":48,"tag":200,"props":1765,"children":1766},{"style":744},[1767],{"type":54,"value":1768},"      }\n",{"type":48,"tag":200,"props":1770,"children":1772},{"class":202,"line":1771},36,[1773],{"type":48,"tag":200,"props":1774,"children":1775},{"style":744},[1776],{"type":54,"value":1777},"    ]\n",{"type":48,"tag":200,"props":1779,"children":1781},{"class":202,"line":1780},37,[1782],{"type":48,"tag":200,"props":1783,"children":1784},{"style":744},[1785],{"type":54,"value":1786},"  }\n",{"type":48,"tag":200,"props":1788,"children":1790},{"class":202,"line":1789},38,[1791],{"type":48,"tag":200,"props":1792,"children":1793},{"style":744},[1794],{"type":54,"value":1795},"}\n",{"type":48,"tag":1797,"props":1798,"children":1799},"style",{},[1800],{"type":54,"value":1801},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1803,"total":1952},[1804,1818,1833,1845,1857,1871,1883,1894,1906,1920,1931,1937],{"slug":1805,"name":1805,"fn":1806,"description":1807,"org":1808,"tags":1809,"stars":23,"repoUrl":24,"updatedAt":1817},"acquiring-skills","discover and install agent skills","Discover and install skills from Hermes, ClawHub, GitHub, and other registries. Load this skill whenever a user asks for a capability you don't already have — image generation, social media, email, calendar, finance, DevOps, search, browser automation, etc.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1810,1811,1814],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},"Automation","automation",{"name":1815,"slug":1816,"type":16},"GitHub","github","2026-07-13T06:22:58.45767",{"slug":1819,"name":1820,"fn":1821,"description":1822,"org":1823,"tags":1824,"stars":23,"repoUrl":24,"updatedAt":1832},"context-doctor","Context Doctor","repair system prompt and memory degradation","Identify and repair degradation in system prompt, external memory, and skills preventing you from following instructions or remembering information as well as you should.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1825,1826,1829],{"name":18,"slug":19,"type":16},{"name":1827,"slug":1828,"type":16},"AI Context","ai-context",{"name":1830,"slug":1831,"type":16},"Debugging","debugging","2026-07-13T06:22:50.151002",{"slug":1834,"name":1834,"fn":1835,"description":1836,"org":1837,"tags":1838,"stars":23,"repoUrl":24,"updatedAt":1844},"converting-mcps-to-skills","connect MCP servers to create skills","Connect to MCP (Model Context Protocol) servers and create skills for repeated use. Load when a user wants to use an MCP server, connect to external tools via MCP, or when they mention MCP, model context protocol, or specific MCP servers.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1839,1840,1841],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1842,"slug":1843,"type":16},"MCP","mcp","2026-07-13T06:23:37.646079",{"slug":1846,"name":1846,"fn":1847,"description":1848,"org":1849,"tags":1850,"stars":23,"repoUrl":24,"updatedAt":1856},"creating-mods","create and edit Letta Code mods","Creates and edits trusted local Letta Code mods, including tools, slash commands, local-only model providers, lifecycle\u002Fturn events, scoped conversation helpers, panels, and capability-gated behavior. Use when asked to make a mod, add an agent-callable tool, add a slash command, add a local provider\u002Fmodel adapter, transform turns, react to app events, or add lightweight mod UI outside the dedicated \u002Fstatusline flow.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1851,1852,1853],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1854,"slug":1855,"type":16},"Coding","coding","2026-07-23T05:42:38.133565",{"slug":1858,"name":1858,"fn":1859,"description":1860,"org":1861,"tags":1862,"stars":23,"repoUrl":24,"updatedAt":1870},"creating-skills","create and update agent skills","Guide for creating effective skills. This skill should be used when users want to create a new skill (or update an existing skill) that extends Letta Code's capabilities with specialized knowledge, workflows, or tool integrations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1863,1864,1867],{"name":18,"slug":19,"type":16},{"name":1865,"slug":1866,"type":16},"Documentation","documentation",{"name":1868,"slug":1869,"type":16},"Plugin Development","plugin-development","2026-07-13T06:22:56.998659",{"slug":1872,"name":1872,"fn":1873,"description":1874,"org":1875,"tags":1876,"stars":23,"repoUrl":24,"updatedAt":1882},"customizing-commands","create and manage Letta slash commands","Creates, edits, and enables Letta Code mod-provided slash commands. Use when the user asks to add a custom \u002Fcommand, slash command, command shortcut, scoped conversation-backed command, or command-driven panel behavior.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1877,1878,1879],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1880,"slug":1881,"type":16},"CLI","cli","2026-07-13T06:23:18.266798",{"slug":1884,"name":1884,"fn":1885,"description":1886,"org":1887,"tags":1888,"stars":23,"repoUrl":24,"updatedAt":1893},"customizing-statusline","customize Letta Code statusline mods","Creates, edits, and migrates Letta Code statusline mods. Use when handling the \u002Fstatusline command or continuing work started by \u002Fstatusline.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1889,1890],{"name":1880,"slug":1881,"type":16},{"name":1891,"slug":1892,"type":16},"Engineering","engineering","2026-07-13T06:23:27.465985",{"slug":1895,"name":1895,"fn":1896,"description":1897,"org":1898,"tags":1899,"stars":23,"repoUrl":24,"updatedAt":1905},"dispatching-coding-agents","dispatch stateless coding agents","Dispatch stateless coding agents (Claude Code or Codex) via Bash. Use when you're stuck, need a second opinion, or need parallel research on a hard problem. They have no memory — you must provide all context.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1900,1901,1902],{"name":18,"slug":19,"type":16},{"name":1854,"slug":1855,"type":16},{"name":1903,"slug":1904,"type":16},"Multi-Agent","multi-agent","2026-07-26T05:46:56.388845",{"slug":1907,"name":1907,"fn":1908,"description":1909,"org":1910,"tags":1911,"stars":23,"repoUrl":24,"updatedAt":1919},"editing-letta-code-desktop-preferences","edit Letta Code Desktop preferences","Edits Letta Code Desktop (LCD) preferences by safely reading and updating ~\u002F.letta\u002Fdesktop_preferences.json. Use only when the user asks to change current Desktop\u002FLCD settings such as theme, default working directory, remote access preference, or remote environment name via the preferences JSON.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1912,1913,1916],{"name":14,"slug":15,"type":16},{"name":1914,"slug":1915,"type":16},"Desktop","desktop",{"name":1917,"slug":1918,"type":16},"Themes","themes","2026-07-13T06:23:41.407811",{"slug":1921,"name":1921,"fn":1922,"description":1923,"org":1924,"tags":1925,"stars":23,"repoUrl":24,"updatedAt":1930},"finding-agents","locate and manage agents on server","Find other agents on the same server. Use when the user asks about other agents, wants to migrate memory from another agent, or needs to find an agent by name or tags.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1926,1927],{"name":18,"slug":19,"type":16},{"name":1928,"slug":1929,"type":16},"Management","management","2026-07-16T06:02:17.297841",{"slug":4,"name":4,"fn":5,"description":6,"org":1932,"tags":1933,"stars":23,"repoUrl":24,"updatedAt":25},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1934,1935,1936],{"name":18,"slug":19,"type":16},{"name":21,"slug":22,"type":16},{"name":14,"slug":15,"type":16},{"slug":1938,"name":1938,"fn":1939,"description":1940,"org":1941,"tags":1942,"stars":23,"repoUrl":24,"updatedAt":1951},"image-generation","generate images from text prompts","Generate images from text prompts (and optionally edit\u002Fremix input images). Use when the user asks to create, generate, draw, render, or edit an image, illustration, logo, icon, diagram, or photo.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1943,1946,1949],{"name":1944,"slug":1945,"type":16},"Creative","creative",{"name":1947,"slug":1948,"type":16},"Graphics","graphics",{"name":1950,"slug":1938,"type":16},"Image Generation","2026-07-13T06:23:06.189403",69,{"items":1954,"total":1199},[1955,1961,1967,1973,1979,1985,1991],{"slug":1805,"name":1805,"fn":1806,"description":1807,"org":1956,"tags":1957,"stars":23,"repoUrl":24,"updatedAt":1817},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1958,1959,1960],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1815,"slug":1816,"type":16},{"slug":1819,"name":1820,"fn":1821,"description":1822,"org":1962,"tags":1963,"stars":23,"repoUrl":24,"updatedAt":1832},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1964,1965,1966],{"name":18,"slug":19,"type":16},{"name":1827,"slug":1828,"type":16},{"name":1830,"slug":1831,"type":16},{"slug":1834,"name":1834,"fn":1835,"description":1836,"org":1968,"tags":1969,"stars":23,"repoUrl":24,"updatedAt":1844},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1970,1971,1972],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1842,"slug":1843,"type":16},{"slug":1846,"name":1846,"fn":1847,"description":1848,"org":1974,"tags":1975,"stars":23,"repoUrl":24,"updatedAt":1856},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1976,1977,1978],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1854,"slug":1855,"type":16},{"slug":1858,"name":1858,"fn":1859,"description":1860,"org":1980,"tags":1981,"stars":23,"repoUrl":24,"updatedAt":1870},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1982,1983,1984],{"name":18,"slug":19,"type":16},{"name":1865,"slug":1866,"type":16},{"name":1868,"slug":1869,"type":16},{"slug":1872,"name":1872,"fn":1873,"description":1874,"org":1986,"tags":1987,"stars":23,"repoUrl":24,"updatedAt":1882},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1988,1989,1990],{"name":18,"slug":19,"type":16},{"name":1812,"slug":1813,"type":16},{"name":1880,"slug":1881,"type":16},{"slug":1884,"name":1884,"fn":1885,"description":1886,"org":1992,"tags":1993,"stars":23,"repoUrl":24,"updatedAt":1893},{"slug":8,"name":9,"logoUrl":10,"githubOrg":11},[1994,1995],{"name":1880,"slug":1881,"type":16},{"name":1891,"slug":1892,"type":16}]