ellf-cli 19.0.4__tar.gz → 19.0.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (381) hide show
  1. {ellf_cli-19.0.4/ellf_cli.egg-info → ellf_cli-19.0.5}/PKG-INFO +1 -1
  2. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf.json +1 -1
  3. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +10 -7
  4. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +6 -7
  5. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +31 -8
  6. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/label_schemes.md +13 -13
  7. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +5 -3
  8. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +1 -1
  9. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +30 -7
  10. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +26 -0
  11. {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-project.coding → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-annotate.coding}/references/label_schemes.md +19 -8
  12. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +7 -1
  13. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +8 -6
  14. ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +34 -0
  15. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +33 -7
  16. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +8 -2
  17. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +29 -17
  18. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +41 -25
  19. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +76 -15
  20. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +77 -23
  21. ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +80 -0
  22. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +1 -1
  23. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +11 -3
  24. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +15 -19
  25. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +48 -17
  26. ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_service_recipe.py +91 -0
  27. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +41 -15
  28. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +31 -8
  29. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +195 -36
  30. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +71 -18
  31. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +48 -41
  32. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +18 -3
  33. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +24 -18
  34. ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/annotation_agents.md +100 -0
  35. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/label_schemes.md +13 -13
  36. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +13 -13
  37. ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-project.coding/references/annotation_agents.md +100 -0
  38. {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-annotate.coding → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-project.coding}/references/label_schemes.md +19 -8
  39. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +16 -3
  40. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +11 -7
  41. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +5 -5
  42. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +1 -1
  43. {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-train.coding → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-train.assistant}/references/model_selection.md +2 -2
  44. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +1 -1
  45. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +7 -8
  46. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +46 -12
  47. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +1 -1
  48. {ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-train.assistant → ellf_cli-19.0.5/ellf_cli/ellf_skills/skills/ellf-train.coding}/references/model_selection.md +2 -2
  49. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +1 -1
  50. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +25 -20
  51. ellf_cli-19.0.5/ellf_cli/version/19.0.4_2026-09-29-16-24-53_patch_9fe8ad2b-e3ec-4558-a5fc-9c44c5c266dc +3 -0
  52. {ellf_cli-19.0.4 → ellf_cli-19.0.5/ellf_cli.egg-info}/PKG-INFO +1 -1
  53. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/SOURCES.txt +4 -2
  54. ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/annotation_metrics.md +0 -26
  55. ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -48
  56. ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -87
  57. ellf_cli-19.0.4/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -87
  58. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/LICENSE +0 -0
  59. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/MANIFEST.in +0 -0
  60. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/README.md +0 -0
  61. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/__init__.py +0 -0
  62. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/__main__.py +0 -0
  63. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/about.json +0 -0
  64. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/about.py +0 -0
  65. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/appdirs.py +0 -0
  66. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/auth.py +0 -0
  67. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cli.py +0 -0
  68. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cloud/__init__.py +0 -0
  69. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cloud/gcp.py +0 -0
  70. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/cluster_config.py +0 -0
  71. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/__init__.py +0 -0
  72. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_cluster_select.py +0 -0
  73. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_org_select.py +0 -0
  74. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_project_scope.py +0 -0
  75. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_recipe_file.py +0 -0
  76. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_recipe_subcommand.py +0 -0
  77. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_state.py +0 -0
  78. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/_usage.py +0 -0
  79. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/actions.py +0 -0
  80. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/agents.py +0 -0
  81. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/assets.py +0 -0
  82. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/auth.py +0 -0
  83. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/clusters.py +0 -0
  84. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/config.py +0 -0
  85. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/datasets.py +0 -0
  86. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/__init__.py +0 -0
  87. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/cp.py +0 -0
  88. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/ls.py +0 -0
  89. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/rm.py +0 -0
  90. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/rsync.py +0 -0
  91. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/files/stats.py +0 -0
  92. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/general.py +0 -0
  93. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/import_export.py +0 -0
  94. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/__init__.py +0 -0
  95. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/_config_io.py +0 -0
  96. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/_helpers.py +0 -0
  97. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/configure.py +0 -0
  98. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/deploy.py +0 -0
  99. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/init.py +0 -0
  100. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/init_values.py +0 -0
  101. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/provision.py +0 -0
  102. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/register.py +0 -0
  103. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/setup.py +0 -0
  104. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/start.py +0 -0
  105. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/terraform.py +0 -0
  106. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/infra/tls.py +0 -0
  107. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/jobs.py +0 -0
  108. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/packages.py +0 -0
  109. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/paths.py +0 -0
  110. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/plans.py +0 -0
  111. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/projects.py +0 -0
  112. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/publish_code.py +0 -0
  113. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/publish_data.py +0 -0
  114. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/recipes.py +0 -0
  115. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/secrets.py +0 -0
  116. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/services.py +0 -0
  117. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/sessions.py +0 -0
  118. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/support.py +0 -0
  119. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/tasks.py +0 -0
  120. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/todos.py +0 -0
  121. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/commands/users.py +0 -0
  122. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/config.py +0 -0
  123. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
  124. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/.gitignore +0 -0
  125. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skill_variants.json +0 -0
  126. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
  127. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +0 -0
  128. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/annotation_metrics.md +0 -0
  129. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
  130. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
  131. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
  132. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
  133. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
  134. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
  135. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
  136. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
  137. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
  138. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
  139. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
  140. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
  141. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +0 -0
  142. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
  143. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
  144. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
  145. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
  146. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
  147. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
  148. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
  149. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
  150. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/errors.py +0 -0
  151. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/helm.py +0 -0
  152. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/interactivity.py +0 -0
  153. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/key_pair.py +0 -0
  154. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/main.py +0 -0
  155. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/messages.py +0 -0
  156. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/pypi_auth.py +0 -0
  157. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/query.py +0 -0
  158. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
  159. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
  160. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
  161. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
  162. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
  163. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
  164. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
  165. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
  166. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
  167. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
  168. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/testing/__init__.py +0 -0
  169. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ty.py +0 -0
  170. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/ui.py +0 -0
  171. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/url.py +0 -0
  172. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/util.py +0 -0
  173. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.114_2026-08-19-08-36-57__1a4e37c1-471e-4a81-b4d5-1ffe7dec3a61 +0 -0
  174. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.114_2026-08-19-09-25-21_patch_33ff1e26-0e5e-46d8-8052-ab1d032e8b6c +0 -0
  175. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.115_2026-08-19-09-27-13_patch_4ac728c3-0342-4a36-adbc-e28d2d99b1ba +0 -0
  176. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.116_2026-08-19-09-30-47_patch_c706fef6-6813-4183-b268-12e7b00d7d0b +0 -0
  177. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.117_2026-08-19-09-39-14_patch_c6b0495f-2f88-4aa8-9ebf-0a235b4c407e +0 -0
  178. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.118_2026-08-19-09-52-00_patch_b395655a-8d78-4344-9266-6901c20f6517 +0 -0
  179. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.119_2026-08-19-10-22-38_patch_8f95c49d-aedc-41b8-816d-ccb95f048831 +0 -0
  180. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.120_2026-08-19-10-26-58_patch_7fbf35e6-cc01-4b75-8c9a-f5d054bcaf93 +0 -0
  181. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.121_2026-08-19-10-42-02_patch_31a81b02-a886-4dea-84e0-67cc6ca412d5 +0 -0
  182. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.122_2026-08-19-11-16-49_patch_1c4d7307-48d4-493e-936d-80af799d644b +0 -0
  183. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.123_2026-08-19-11-47-32_patch_d3d78d04-9989-45b1-91b1-93b571d8814a +0 -0
  184. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.124_2026-08-20-08-03-17_patch_57f4c389-2d19-41ce-aca4-13b61c62f387 +0 -0
  185. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.125_2026-08-20-08-25-05_patch_7f368148-0d1c-4525-bbdf-c6d257ad861a +0 -0
  186. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.126_2026-08-20-14-51-36_patch_a99abcc8-3371-4c63-a759-bb7ea5b32432 +0 -0
  187. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.127_2026-08-21-05-48-58_patch_34b4ccee-7596-4f57-93e9-774973cca58e +0 -0
  188. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.128_2026-08-21-10-47-20_patch_693112b9-927c-4a8f-8553-b06eef86079d +0 -0
  189. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.129_2026-08-21-11-16-54_patch_7a981666-01d9-4d1b-9ba3-2129744e3bd5 +0 -0
  190. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.130_2026-08-21-13-09-36_patch_b7ad1a76-ce70-4d70-9d1a-7c414eba5bb4 +0 -0
  191. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.131_2026-08-21-14-31-10_patch_9128ef66-193e-4caf-8710-afd86128e638 +0 -0
  192. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.132_2026-08-24-08-59-34_patch_c600fc14-86a5-460f-9c4e-f0177056f756 +0 -0
  193. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.133_2026-08-24-10-28-29_patch_b6ce3e32-9d7b-48ac-981a-270c22c180dd +0 -0
  194. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.134_2026-08-24-11-00-51_patch_a4fc0484-4a64-46a2-94f8-aa805254c7b0 +0 -0
  195. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.135_2026-08-24-12-12-41_patch_a870a56f-9a65-49eb-92da-f572b26667d8 +0 -0
  196. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.136_2026-08-24-12-42-46_patch_9b399356-6482-4291-8da7-e748a99c4b53 +0 -0
  197. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.137_2026-08-24-12-53-57_patch_f7979348-1910-40cd-a535-90299eca84ee +0 -0
  198. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.138_2026-08-24-14-36-30_patch_ed0f8750-f663-498b-85e7-0d3f2213fcfe +0 -0
  199. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.139_2026-08-25-08-37-26_patch_3ba87e19-902b-4f76-b64c-90e5c0ca1fc6 +0 -0
  200. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.140_2026-08-25-09-52-45_patch_abc830f2-df15-4385-b797-cdaf72c10752 +0 -0
  201. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.141_2026-08-25-11-37-20_patch_1d9ec01e-06f6-4c8e-b095-af17d5b62b00 +0 -0
  202. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.142_2026-08-26-07-38-49_patch_3dd23e36-e7df-494c-986f-a412861a8d40 +0 -0
  203. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.143_2026-08-26-09-32-32_patch_7b7ebd34-de27-4b73-98a7-3e1501e16cd5 +0 -0
  204. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.144_2026-08-26-10-56-43_patch_166064f2-2208-4c9b-9e25-25dc4cd32084 +0 -0
  205. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.145_2026-08-26-11-37-29_patch_b997f3ee-d7d3-4408-9f2f-c8b6d08bdb3b +0 -0
  206. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.146_2026-08-26-12-15-20_patch_afbbb893-25db-468c-81db-2663ca373068 +0 -0
  207. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.147_2026-08-26-14-10-50_patch_fd753b1f-2fa1-4ddb-a9e7-de690da85254 +0 -0
  208. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.148_2026-08-27-09-08-35_patch_23814c0b-7f77-489c-b4a8-ceadd18146e3 +0 -0
  209. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.149_2026-08-27-09-40-17_patch_8879d72e-a3d8-4abc-a16a-d9dcf75f0fa1 +0 -0
  210. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.150_2026-08-27-10-57-25_patch_afbe60ed-3e23-4d88-be3c-f800d7002a7d +0 -0
  211. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.151_2026-08-28-09-02-46_patch_1d4ca23b-aeae-4ea8-96b1-8cf57371f29d +0 -0
  212. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.152_2026-08-28-15-37-24_patch_c9d0bdc1-a7e1-432b-92b9-92dc76fe0c78 +0 -0
  213. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.153_2026-08-29-09-03-27_patch_7531573a-1b33-4092-aa9c-0e65f47b201f +0 -0
  214. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.154_2026-08-29-11-56-35_patch_919f5787-39c8-4dc1-ae6a-f27c28380f21 +0 -0
  215. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.155_2026-08-29-15-15-59_patch_822f9ed8-c366-4e5f-9791-dee8467cf3ce +0 -0
  216. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.156_2026-08-29-16-19-01_patch_3ac2bf36-20f7-4c9f-9fdb-295d4466d59e +0 -0
  217. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.157_2026-08-30-17-32-17_patch_4302354c-c9c5-4be7-acd3-542872a748d8 +0 -0
  218. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.158_2026-08-31-09-28-33_patch_3523774f-c25d-4102-8c1a-92fff046a48d +0 -0
  219. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.159_2026-08-31-10-31-01_patch_fe3e6290-2553-4154-a0a0-8b8a418280ed +0 -0
  220. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.160_2026-08-31-11-23-39_patch_e701a085-3d23-4212-b0af-73b1d419a4c1 +0 -0
  221. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.161_2026-08-31-12-41-01_patch_074d7bde-c493-44db-bc15-e81fd91e2921 +0 -0
  222. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.162_2026-08-31-13-58-06_patch_84db1d60-4280-433b-bd3a-22e5611cd315 +0 -0
  223. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.163_2026-08-31-15-25-54_patch_1931c5ba-73df-48cb-8dcb-555ace0af267 +0 -0
  224. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.163_2026-08-31-15-44-37_patch_3962e805-2a92-494a-a87b-b6e6d66c40a0 +0 -0
  225. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.165_2026-08-31-19-48-59_patch_86e5b923-2b99-4b86-b542-469b197614be +0 -0
  226. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.166_2026-09-01-07-39-57_patch_c344892f-d542-4e7b-8f27-02365a411e15 +0 -0
  227. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.167_2026-09-01-08-21-53_patch_e199d419-282a-4dbb-8756-cf98b7037e2b +0 -0
  228. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.168_2026-09-01-09-12-31_patch_235c9fe0-da15-431d-bb56-01e2b9b15f4b +0 -0
  229. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.169_2026-09-01-11-54-19_patch_98b617ab-d130-42b5-93f2-19cae56d4c4c +0 -0
  230. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.170_2026-09-02-09-27-28_patch_e448d2e6-b7ec-4235-96bf-0173b3623c87 +0 -0
  231. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.171_2026-09-02-12-52-44_patch_e6a241c2-1d62-482c-a9eb-9e3373395c50 +0 -0
  232. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.172_2026-09-04-08-47-04_patch_daae079f-c104-4fcd-bb57-7bff68e80ad9 +0 -0
  233. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.173_2026-09-04-12-34-42_patch_399c4cbd-0c28-4dfd-a4ec-e569420a36e4 +0 -0
  234. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.174_2026-09-04-13-08-48_patch_f5cfe3d5-808e-45e4-bafc-00d0554838ee +0 -0
  235. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.175_2026-09-04-17-20-46_patch_1ef542fa-5d8e-4d90-aa15-9fc4cea3dfec +0 -0
  236. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.176_2026-09-05-08-25-05_patch_ced5521f-f9da-4640-a921-95fcb5cd2e6d +0 -0
  237. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.177_2026-09-05-09-00-16_patch_803c1ad4-a9af-4953-92c5-d882dec03ea2 +0 -0
  238. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.178_2026-09-05-09-30-34_patch_012f6259-2e3f-4591-9806-1920fd06cb1f +0 -0
  239. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.179_2026-09-05-09-33-43_patch_f4bdf28c-d584-47a5-b699-8c883330162c +0 -0
  240. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.180_2026-09-05-12-02-21_patch_34a14b01-d22d-44a8-ac63-be0370a61422 +0 -0
  241. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.181_2026-09-05-12-47-46_patch_56b18867-99f6-4d5c-8215-7b9d60d34010 +0 -0
  242. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.182_2026-09-05-13-35-18_patch_61b7d4d1-73c8-4603-9b0c-593e7405587f +0 -0
  243. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.183_2026-09-06-07-27-09_patch_d76331b2-e3a3-4c0b-8412-ecd131b6ac02 +0 -0
  244. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.184_2026-09-06-10-21-47_patch_7680b7a1-49f0-4eef-b12e-4c854407448c +0 -0
  245. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.185_2026-09-06-10-30-40_patch_e56c2183-77f8-44ef-a92e-7377ea6ce8c1 +0 -0
  246. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.186_2026-09-07-10-00-51_patch_67de5683-d208-4bc0-8fb6-7677377908e7 +0 -0
  247. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.187_2026-09-07-10-18-13_patch_2086cee2-276b-48f7-80ce-6a17397b9541 +0 -0
  248. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.188_2026-09-07-12-51-28_patch_d6590822-068f-4a19-814d-34bbf204ba6e +0 -0
  249. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.189_2026-09-07-12-55-23_patch_7e0fb04b-4d40-4490-974f-c74ba2ae55a1 +0 -0
  250. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.190_2026-09-08-08-58-03_patch_15e3ac1e-4475-4272-bdd8-d00bb0db8f17 +0 -0
  251. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.191_2026-09-08-09-55-58_patch_3d350e50-ee53-4282-bc75-d2251142c46e +0 -0
  252. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.192_2026-09-08-11-12-21_patch_0733223b-1ae2-4b5b-897f-dfc57574ff83 +0 -0
  253. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.193_2026-09-08-21-48-17_patch_8d07d4e6-3555-4720-85c9-9452570fae2d +0 -0
  254. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.194_2026-09-09-07-53-43_patch_69559429-aa42-4b62-9bd7-cdfded1c00d0 +0 -0
  255. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.195_2026-09-09-09-55-40_patch_bbf67f1d-3b9a-43a2-b1bc-22df3fed8a34 +0 -0
  256. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.196_2026-09-09-09-59-47_patch_70d76812-7b3c-4192-ad49-fcaccc29b0da +0 -0
  257. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.197_2026-09-09-13-06-06_patch_d455be0b-5421-492a-b952-fab0fd8110f8 +0 -0
  258. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.198_2026-09-09-13-14-34_patch_267f54e5-311e-435e-882f-8e19191325ea +0 -0
  259. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.199_2026-09-09-22-24-18_patch_81e3e453-ca0e-42fa-9c21-8f94d43c05f2 +0 -0
  260. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.200_2026-09-10-07-19-50_patch_911714fa-1fa3-4165-bfe6-d10c650bf5bf +0 -0
  261. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.201_2026-09-10-10-14-19_patch_864015f2-b0b0-4563-a1c8-155629cb9126 +0 -0
  262. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.202_2026-09-10-11-00-05_patch_18270ecf-e770-4e69-8bcf-e5143c39929b +0 -0
  263. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.203_2026-09-10-11-10-41_patch_ff273ab1-44f3-4bc0-b184-3396e943df04 +0 -0
  264. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.204_2026-09-10-13-02-02_patch_d4ee41e2-d13c-4941-8605-3f1a42b56b22 +0 -0
  265. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.205_2026-09-10-13-57-50_patch_284df67e-5957-4b0c-bc64-5581db6ddecc +0 -0
  266. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.206_2026-09-11-10-18-50_patch_1ac7e410-0e62-4eef-bbe4-ebf93c9d0869 +0 -0
  267. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/17.0.207_2026-09-11-15-26-02_major_3f1b3ed7-eaac-41f5-b740-0af3331595d9 +0 -0
  268. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.0_2026-09-12-10-01-10_patch_8995783a-a9fa-4c4e-90b3-6386a4c481eb +0 -0
  269. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.10_2026-09-14-16-09-38_patch_9403d562-eed0-4125-a8b3-09cd92a13298 +0 -0
  270. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.11_2026-09-15-09-05-57_patch_8b22dba2-d931-4c4d-ae60-db3238d5e73d +0 -0
  271. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.12_2026-09-15-11-18-52_patch_81314afa-e70d-4ad8-b45b-3f8d62b983e7 +0 -0
  272. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.13_2026-09-16-08-00-55_patch_bfa30fc0-3281-4de6-bb56-d7290c98d1c3 +0 -0
  273. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.14_2026-09-16-14-38-26_patch_aae6e9b0-88f4-4bcf-b611-3308c7fcd6eb +0 -0
  274. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.15_2026-09-17-07-58-54_patch_43d40582-effd-4925-a8bd-e70fecf1faab +0 -0
  275. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.16_2026-09-17-08-12-37_patch_b4db2d23-88f1-45c1-82d9-78d38014fcb6 +0 -0
  276. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.17_2026-09-18-09-38-19_patch_25697fc3-e9a8-4980-962b-e6cb0a4760c5 +0 -0
  277. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.18_2026-09-18-09-54-33_patch_d37d9c71-c469-4d94-90d7-4898915ee991 +0 -0
  278. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.19_2026-09-18-10-47-33_patch_47607b3c-d1b6-4864-b9b0-00a2a8d2ac32 +0 -0
  279. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.1_2026-09-12-17-33-30_patch_f6ea2c99-a715-4c4d-876a-23ed8c62a83d +0 -0
  280. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.20_2026-09-18-11-07-21_patch_5a336f91-63a6-4877-97ed-da89395cc8f5 +0 -0
  281. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.21_2026-09-18-13-34-52_patch_c56462e1-63d9-498f-a912-c80c5f0171d1 +0 -0
  282. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.22_2026-09-20-08-10-45_patch_6afa2c20-bcef-4b7d-8685-2c9815d8683f +0 -0
  283. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.23_2026-09-20-08-38-35_patch_a7f169e5-37ab-4ec0-bf89-d14770181303 +0 -0
  284. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.24_2026-09-20-15-49-27_patch_c1222081-ff44-4f20-aea2-5840b6d76efd +0 -0
  285. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.25_2026-09-21-06-11-40_patch_6df46dd9-e7d3-4e71-bec4-e5c93b4ac863 +0 -0
  286. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.26_2026-09-21-07-54-11_patch_cc52dd36-5eba-4094-a1b0-d6f79f103441 +0 -0
  287. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.27_2026-09-21-08-36-49_patch_a25fa125-9bcd-4317-8da5-851c1c329631 +0 -0
  288. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.28_2026-09-21-09-44-01_patch_4430a721-0b3c-4f6a-b9bc-a53e667161bb +0 -0
  289. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.29_2026-09-21-10-58-07_patch_83b2b942-60a4-4bef-afd1-99690ba52b69 +0 -0
  290. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.2_2026-09-13-06-36-33_patch_176bb944-1c49-4dd3-a001-8fce908825a0 +0 -0
  291. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.30_2026-09-21-12-51-16_patch_519b9a65-d400-4234-b113-36b46e315507 +0 -0
  292. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.31_2026-09-22-06-53-35_patch_5c45a235-81b6-4d05-801a-07dc7db61400 +0 -0
  293. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.32_2026-09-22-07-42-04_patch_f12c6415-8166-4063-9e5d-26601b929d63 +0 -0
  294. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.33_2026-09-22-08-12-32_patch_cec31bb0-a6cb-43e6-8407-25aba322b54c +0 -0
  295. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.34_2026-09-23-07-09-16_patch_659fccbb-c0a0-4f6f-bc87-e6abaa8815a7 +0 -0
  296. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.35_2026-09-23-09-38-52_patch_023f904d-807a-4833-8a40-570365e8ec06 +0 -0
  297. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.36_2026-09-23-10-05-33_patch_846fb491-2b1b-47ed-ac1f-ba40e744e199 +0 -0
  298. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.37_2026-09-23-13-08-30_patch_8e4b1d24-156e-4ffe-8e4a-b8740ec18588 +0 -0
  299. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.38_2026-09-24-06-41-37_patch_67adb1d6-3f49-4357-a67f-b1d48f23a972 +0 -0
  300. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.39_2026-09-24-15-24-32_patch_e5dd375d-5643-4514-9b65-8d877c4a2bb2 +0 -0
  301. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.3_2026-09-13-12-32-46_patch_58e5ce3a-f2a7-4789-b2cd-5cc75c72b6ec +0 -0
  302. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.40_2026-09-24-19-58-14_patch_ff18824b-be51-4a3d-a621-e96279e53c3e +0 -0
  303. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.41_2026-09-26-09-24-52_patch_b9979267-30f9-440a-a4ce-c611991d4886 +0 -0
  304. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.42_2026-09-28-12-39-34_patch_dda535d9-8922-4eb9-ab51-6ecff0650c10 +0 -0
  305. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.43_2026-09-28-13-35-27_minor_aca1168a-1286-4326-9d0c-2f2587c9fe92 +0 -0
  306. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.4_2026-09-13-12-45-14_patch_b6c79d55-8f85-4f47-a304-df52b122c38c +0 -0
  307. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.5_2026-09-13-14-11-18_patch_9b111116-5e62-472a-b72c-d1bbafa22c97 +0 -0
  308. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.5_2026-09-13-17-01-11_patch_d4bf61c0-83ac-4dd3-b512-a65805d298c8 +0 -0
  309. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.6_2026-09-14-11-31-04_patch_fd2ebda6-22cb-4e7d-9452-2f6f2640e828 +0 -0
  310. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.7_2026-09-13-17-06-08_patch_428af161-0b27-43c2-8751-e5f7874df120 +0 -0
  311. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.0.9_2026-09-14-12-37-42_patch_b2ca0529-4b67-4fa4-8fdc-5f5e9f5d5166 +0 -0
  312. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.1.0_2026-09-28-14-27-54_patch_324444f7-d24e-4189-b21f-1188894a3109 +0 -0
  313. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/18.1.1_2026-09-28-21-03-07_major_e266a14a-7d96-4ece-92a3-8f34e64438a5 +0 -0
  314. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.0_2026-09-29-11-05-31_patch_77d6f9f8-ead3-4d79-a4b2-b084b2dffc98 +0 -0
  315. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.1_2026-09-29-11-59-38_patch_bbf4753c-d641-4c2f-ac7c-02be6bd8e7c2 +0 -0
  316. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.2_2026-09-29-12-44-07_patch_19fdaa94-60dc-464b-93b8-c17607ebc7b6 +0 -0
  317. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/19.0.3_2026-09-29-14-16-00_patch_3cb60272-95cf-4311-8897-721e1b5c2c88 +0 -0
  318. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/__init__.py +0 -0
  319. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli/version/read_version.py +0 -0
  320. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/dependency_links.txt +0 -0
  321. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/entry_points.txt +0 -0
  322. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/not-zip-safe +0 -0
  323. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/requires.txt +0 -0
  324. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/ellf_cli.egg-info/top_level.txt +0 -0
  325. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/pyproject.toml +0 -0
  326. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/setup.cfg +0 -0
  327. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/setup.py +0 -0
  328. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_agents_info_stats.py +0 -0
  329. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_appdirs.py +0 -0
  330. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_auth.py +0 -0
  331. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_clusters_info_stats.py +0 -0
  332. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_config.py +0 -0
  333. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_datasets_export.py +0 -0
  334. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_errors.py +0 -0
  335. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_files_cp.py +0 -0
  336. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_files_cp_helpers.py +0 -0
  337. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_helm.py +0 -0
  338. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_import_export.py +0 -0
  339. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_info.py +0 -0
  340. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_config_io.py +0 -0
  341. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_configure.py +0 -0
  342. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_deploy_node_labels.py +0 -0
  343. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_get_terraform.py +0 -0
  344. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_init.py +0 -0
  345. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_provision.py +0 -0
  346. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_start_fixes.py +0 -0
  347. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_start_validation.py +0 -0
  348. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_state_bucket.py +0 -0
  349. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_infra_terraform_init.py +0 -0
  350. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_invalid_secrets.py +0 -0
  351. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_job_list_project_filter.py +0 -0
  352. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_jobs_info_hides_creator.py +0 -0
  353. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_jobs_list_unmatched.py +0 -0
  354. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_key_pair.py +0 -0
  355. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_login.py +0 -0
  356. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_logout.py +0 -0
  357. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_main.py +0 -0
  358. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_org_select.py +0 -0
  359. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_plans.py +0 -0
  360. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_projects.py +0 -0
  361. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_projects_delete_confirm.py +0 -0
  362. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_build_poll.py +0 -0
  363. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_data.py +0 -0
  364. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_import_root.py +0 -0
  365. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_publish_requirements.py +0 -0
  366. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_pypi_auth.py +0 -0
  367. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_query.py +0 -0
  368. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_recipe_file.py +0 -0
  369. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_recipes.py +0 -0
  370. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_sessions.py +0 -0
  371. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_state.py +0 -0
  372. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_support.py +0 -0
  373. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_todos.py +0 -0
  374. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_ty.py +0 -0
  375. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_ui.py +0 -0
  376. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_ui_extras.py +0 -0
  377. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_usage_counts.py +0 -0
  378. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_users_assign.py +0 -0
  379. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_users_info_stats.py +0 -0
  380. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_users_list.py +0 -0
  381. {ellf_cli-19.0.4 → ellf_cli-19.0.5}/tests/test_util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ellf-cli
3
- Version: 19.0.4
3
+ Version: 19.0.5
4
4
  Summary: Ellf Command Line Interface
5
5
  Home-page: https://prodi.gy
6
6
  Author: ExplosionAI GmbH
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "prog": "ellf",
3
3
  "help": "Ellf Command Line Interface.",
4
- "version": "19.0.4",
4
+ "version": "19.0.5",
5
5
  "extra_key": "_extra",
6
6
  "commands": {
7
7
  "actions": {
@@ -27,9 +27,9 @@ If the workflow requires a new custom recipe or custom interface, use
27
27
  methodology or schema work is needed, use `/ellf-project`.
28
28
 
29
29
  **Never narrate routing or argument inference to the user.** The user does
30
- not need to know that you're delegating to `/ellf-ops`, what `auto_start`
31
- value you inferred from their verb, or which cli-name you chose for which
32
- field. Say only what the user can act on: the outcome, the next step, the
30
+ not need to know that you're delegating to `/ellf-ops`, whether you
31
+ inferred from their verb that they want the task started, or which cli-name
32
+ you chose for which field. Say only what the user can act on: the outcome, the next step, the
33
33
  link. The audit summary is useful when something failed and the user needs
34
34
  to fix it; otherwise skip it and let the create tool's artifact (card,
35
35
  form link, or prerequisite link) do the talking.
@@ -118,17 +118,20 @@ mcp__pam__task_create(
118
118
  recipe_id=<from recipe_list>,
119
119
  args=<resolved scalar args>,
120
120
  name=<optional; PAM auto-names from recipe + timestamp when omitted>,
121
- auto_start=<true if the user said run/start/launch, false for create/save/set up>,
122
121
  )
123
122
  ```
124
123
 
124
+ Creating never starts the task. If the user said run/start/launch and the
125
+ create returned `status: "created"`, call `mcp__pam__task_start(id=<object.id>)`
126
+ next; for create/save/set up, stop after creation.
127
+
125
128
  If an annotation agent was also planned, call `mcp__pam__agent_create(...)`
126
129
  for the agent. After the agent is created and started, attach it to the
127
130
  task with `mcp__pam__task_assign_bot(task_id=..., agent_id=...)`.
128
131
 
129
132
  The create tool's internal validation routes every case to a useful
130
133
  user-facing artifact:
131
- - confirmation card (three buttons: `Create and start` / `Create only` / `Cancel`) on clean validation
134
+ - Allow/Deny confirmation card on clean validation (creates the task; it does not start it)
132
135
  - form-handoff link on missing scalars or complex JSON args
133
136
  - missing-prerequisite link on a referenced asset / dataset / secret that doesn't exist on the cluster
134
137
 
@@ -143,8 +146,8 @@ X, Y, Z", any pre-emptive validation reasoning).
143
146
  Once the user confirms the create card (or the form-handoff link is followed
144
147
  through to completion), help verify and run any follow-ups:
145
148
 
146
- - if the task wasn't auto-started (user clicked `Create only`): use `/ellf-ops`
147
- start workflow when the user is ready
149
+ - if the user didn't ask to run it yet: use the `/ellf-ops` start workflow when
150
+ they're ready
148
151
  - check cluster status with `mcp__cluster__job_status(id="<id>")` to confirm the
149
152
  task is running or healthy
150
153
  - provide the task link and tell the user where to open it in the app
@@ -1,7 +1,7 @@
1
1
  # Annotation Audit Reference
2
2
 
3
3
  Quick-reference for auditing an annotation plan before launching a recipe.
4
- This covers the checks ellf-annotate runs in Step 6. For deep strategic
4
+ This covers the checks ellf-annotate runs before launch. For deep strategic
5
5
  questions (team structure, agile workflow, full schema redesign), escalate to
6
6
  ellf-project.
7
7
 
@@ -112,12 +112,11 @@ These catch cases where a different recipe would be significantly more efficient
112
112
 
113
113
  | Situation | Suggestion |
114
114
  |---|---|
115
- | User picks `ner.manual` but has a trained model | Suggest `ner.correct` — faster (correct vs annotate from scratch) |
116
- | User picks `ner.manual` but has existing patterns | Use patterns for pre-annotation, then `ner.correct` to review |
117
- | User picks `textcat.manual` but has a trained classifier | Suggest `textcat.correct` |
118
- | User picks `spans.manual` but has a trained spans model | Suggest `spans.correct` |
119
- | Large dataset, no model assistance | Suggest active learning recipe (`.teach` variants) |
120
- | Complex UI needs (custom blocks, multiple views) | Delegate to ellf-prodigy for custom recipe |
115
+ | `ner` or `spans` with a blank model, but a trained pipeline exists | Pick the trained model in the recipe's **Model** field: the task shows its predictions to correct, faster than annotating from scratch |
116
+ | `ner` or `spans` without patterns, but patterns exist | Add them as a `patterns` asset in the **Patterns** field to pre-highlight matches |
117
+ | `textcat` without a model, but a trained classifier exists | Pick the classifier in the **Model** field to pre-select its predictions |
118
+ | Large dataset, no model assistance | Consider an annotation agent (`gemini_agent`) to pre-annotate, with humans correcting; see `builtin_ellf_annotation_recipes.md` |
119
+ | Complex UI needs (custom blocks, multiple views) | Hand the custom recipe to the coding agent with `/ellf-handoff` |
121
120
 
122
121
  ---
123
122
 
@@ -39,9 +39,27 @@ workflows.
39
39
  | `audio` | Audio annotation |
40
40
  | `video` | Video annotation |
41
41
  | `curate` | Data curation / exploration |
42
- | `review` | Review and correction of prior annotations |
42
+ | `review` | Review and correction of prior annotations (structured datasets only) |
43
43
  | `sent` | Sentence segmentation |
44
44
 
45
+ PDF task recipes (the `recipes_pdf` package; confirm the cluster lists them):
46
+
47
+ | Recipe | Use for |
48
+ |---|---|
49
+ | `pdf_image` | Bounding boxes and segments on PDF pages rendered as images |
50
+ | `pdf_spans` | Text spans in PDFs, from a `layout` asset made by the `pdf_layout_fetch` action |
51
+ | `pdf_ocr_correct` | OCR the boxes from a `pdf_image` dataset and correct the extracted text |
52
+
53
+ `pdf_image` and `pdf_ocr_correct` take a `pdf` asset (`pdf_ocr_correct` also the
54
+ `pdf_image` dataset); `pdf_spans` takes the `layout` asset that `pdf_layout_fetch`
55
+ makes from one. The `pdf_ingest` action renders a PDF annotation-ready
56
+ (it can also run on upload), and `pdf_layout_fetch` extracts its text and layout into the `layout`
57
+ asset `pdf_spans` needs.
58
+
59
+ `review` only reads datasets in structured storage. Datasets with examples from before
60
+ it must first go through the "Migrate dataset to structured" action
61
+ (`migrate_to_structured`). Its labels default to the ones found in the annotations.
62
+
45
63
  ## Label schemes
46
64
 
47
65
  Only `ner`, `spans` and `textcat` take a label scheme. No other built-in recipe accepts
@@ -61,7 +79,7 @@ for an existing one before writing a new one. Format and design advice:
61
79
 
62
80
  ## Annotation instructions
63
81
 
64
- Built-in task recipes take annotation instructions in their annotation settings
82
+ Built-in task recipes except `review` and `terms` take annotation instructions in their annotation settings
65
83
  (the **Instructions** field): an asset of kind `instructions` holding one Markdown
66
84
  document. HTML isn't accepted. Annotators open it in the annotation app from the help
67
85
  icon or with the H key.
@@ -108,15 +126,20 @@ them when the user asks for Hugging Face models or already has a suitable fine-t
108
126
  model.
109
127
  - `hf_model_agent` runs a model already fine-tuned for the task (from the Hub or an
110
128
  `hf_model` asset) on the cluster. It only serves `ner_manual` / `spans_manual`, binary
111
- `ner` / `spans`, `choice` and binary `classification` tasks. Every task label (or
112
- choice option) must map to a model label via `label_map`. If one doesn't, or the
113
- interface isn't supported (`blocks`, `html`, relations, image, audio), the agent stops
114
- on its first task with an error naming what's missing, rather than answering.
129
+ `ner` / `spans`, `choice` and binary `classification` tasks. Model labels with the
130
+ same name as a task label map automatically; map the others with `label_map` (model
131
+ label → task label). It stops on its first task with an error naming what's missing
132
+ when a manual spans or choice task has a label the model can't produce, when the
133
+ interface isn't supported, or when the model type doesn't fit the task (a
134
+ token-classification model on a choice task, say). Binary tasks whose label the model
135
+ doesn't have are answered "ignore" instead.
115
136
  - `hf_llm_agent` works like `gemini_agent` but uses a chat model from Hugging Face
116
137
  Inference Providers, and needs an `hf_token` secret. A bad token, missing credits or an
117
138
  unusable model stops it at startup with the reason.
118
139
 
119
- The LLM agents (`gemini_agent`, `hf_llm_agent`) include the task's annotation
140
+ The LLM agents (`gemini_agent`, `hf_llm_agent`) only annotate text: tasks without
141
+ text, and interfaces no prompt covers (relations, dependencies, `blocks`, image, audio),
142
+ are answered "ignore" and left to people. They include the task's annotation
120
143
  instructions in every prompt by default. Their **Agent annotation settings** add:
121
144
  - **Agent instructions**: an agent-only `instructions` asset, combined with the task's.
122
145
  Use it for guidance only the model needs, such as mistakes it keeps making.
@@ -143,4 +166,4 @@ definitions.
143
166
  annotations rather than creating annotations from scratch.
144
167
  - If the user needs a custom interface, multi-view workflow, unusual routing,
145
168
  or annotation logic the built-ins cannot express cleanly, delegate to
146
- `ellf-prodigy`.
169
+ `/ellf-handoff`, which hands the custom recipe to the coding agent.
@@ -9,10 +9,10 @@ into something a task can use, or when writing annotation guidelines for labels
9
9
  that already exist.
10
10
 
11
11
  **Only some recipes take a scheme.** A scheme is a recipe argument, and the only
12
- built-in recipes that have it are `ner`, `spans` and `textcat` (`--label-scheme`, or
13
- **Asset** on the **Labels** field). A custom recipe can take one too, if it implements
12
+ built-in recipes that have it are `ner`, `spans` and `textcat` (**Asset** on the
13
+ **Labels** field). A custom recipe can take one too, if it implements
14
14
  it with `props.label_scheme` (hand a new one off to the coding agent with `/ellf-handoff`). No other built-in recipe accepts a
15
- `labels` asset, so never suggest a scheme or `--label-scheme` for one of them. For
15
+ `labels` asset, so never suggest a scheme for one of them. For
16
16
  those, write the label definitions into the annotation guidelines (an `instructions`
17
17
  asset) instead, or build a custom recipe if the definitions need to reach annotators
18
18
  and agents label by label.
@@ -93,23 +93,23 @@ Show it to the user and settle the labels before publishing.
93
93
 
94
94
  ## Publishing and using a scheme
95
95
 
96
- - **Publish:** `ellf publish data scheme.json "<cluster_path>" --name "<name>" --kind labels`,
97
- or upload the file on the cluster's Assets page with the kind `labels`. Assets can be
98
- previewed from the Assets page and from the asset picker in recipe forms.
99
- - **Reuse:** check for an existing `labels` asset (`ellf assets list`, or the Assets
100
- page) before writing a new one. Use one scheme per label set, not one per task.
96
+ - **Publish:** the user uploads the file on the cluster's Assets page with the kind
97
+ `labels`. Assets can be previewed from the Assets page and from the asset picker in
98
+ recipe forms.
99
+ - **Reuse:** ask the user to check the Assets page for an existing `labels` asset
100
+ before writing a new one. Use one scheme per label set, not one per task.
101
101
  - **Tasks:** only the built-in `ner`, `spans` and `textcat` recipes (and custom recipes
102
- that implement it) take a scheme. They accept either a typed list of labels
103
- (`--label A,B`) or a scheme (`--label-scheme <asset>`). In the web form, the
104
- **Labels** field switches between **List** and **Asset**. Prefer a scheme whenever
102
+ that implement it) take a scheme. In the web form, their **Labels** field switches
103
+ between **List** (typed labels) and **Asset** (a scheme). Prefer a scheme whenever
105
104
  the labels need explaining, are reused across tasks, or agents will annotate.
106
105
  - **Annotators** see a label's description when they hover the label in the annotation
107
106
  app (and on choice options for text classification).
108
107
  - **Agents:** a task with a scheme passes its label definitions on to every LLM agent assigned to it
109
108
  (`gemini_agent`, `hf_llm_agent`), and they're included in each prompt: description,
110
109
  `do_not_mark` and the examples that fit the task type. An agent can have its own
111
- scheme on top (`--labels.scheme`), whose definitions replace the task's for the
112
- labels it defines, or ignore the task's definitions (`--labels.ignore-task-labels`).
110
+ scheme on top (its **Label scheme** setting), whose definitions replace the task's
111
+ for the labels it defines, or ignore the task's definitions (**Ignore label
112
+ definitions from task**).
113
113
  The agent always annotates the task's labels; labels only its scheme has are ignored.
114
114
  `hf_model_agent` doesn't use label definitions.
115
115
 
@@ -162,13 +162,15 @@ A launch is not complete until you verify that the annotation process is usable.
162
162
  ### Ellf cluster
163
163
 
164
164
  ```bash
165
- ellf tasks info "<name>" --json
166
- ellf tasks logs "<name>"
165
+ ellf tasks logs "<name>" --show-errors --json # state + structured errors
166
+ ellf tasks info "<name>" --json # url + stats
167
167
  ```
168
168
 
169
- Confirm the task exists and is running. If an agent was requested:
169
+ Confirm the task exists and its state is `running` or `ready` (`info --json` has no
170
+ state field). If an agent was requested:
170
171
 
171
172
  ```bash
173
+ ellf agents logs "<agent_name>" --show-errors --json
172
174
  ellf agents info "<agent_name>" --json
173
175
  ```
174
176
 
@@ -1,7 +1,7 @@
1
1
  # Annotation Audit Reference
2
2
 
3
3
  Quick-reference for auditing an annotation plan before launching a recipe.
4
- This covers the checks ellf-annotate runs in Step 6. For deep strategic
4
+ This covers the checks ellf-annotate runs before launch. For deep strategic
5
5
  questions (team structure, agile workflow, full schema redesign), escalate to
6
6
  ellf-project.
7
7
 
@@ -39,9 +39,27 @@ workflows.
39
39
  | `audio` | Audio annotation |
40
40
  | `video` | Video annotation |
41
41
  | `curate` | Data curation / exploration |
42
- | `review` | Review and correction of prior annotations |
42
+ | `review` | Review and correction of prior annotations (structured datasets only) |
43
43
  | `sent` | Sentence segmentation |
44
44
 
45
+ PDF task recipes (the `recipes_pdf` package; confirm the cluster lists them):
46
+
47
+ | Recipe | Use for |
48
+ |---|---|
49
+ | `pdf_image` | Bounding boxes and segments on PDF pages rendered as images |
50
+ | `pdf_spans` | Text spans in PDFs, from a `layout` asset made by the `pdf_layout_fetch` action |
51
+ | `pdf_ocr_correct` | OCR the boxes from a `pdf_image` dataset and correct the extracted text |
52
+
53
+ `pdf_image` and `pdf_ocr_correct` take a `pdf` asset (`pdf_ocr_correct` also the
54
+ `pdf_image` dataset); `pdf_spans` takes the `layout` asset that `pdf_layout_fetch`
55
+ makes from one. The `pdf_ingest` action renders a PDF annotation-ready
56
+ (`ellf publish data <file.pdf> --kind pdf --render` runs it on upload), and `pdf_layout_fetch` extracts its text and layout into the `layout`
57
+ asset `pdf_spans` needs.
58
+
59
+ `review` only reads datasets in structured storage. Datasets with examples from before
60
+ it must first go through the "Migrate dataset to structured" action
61
+ (`migrate_to_structured`). Its labels default to the ones found in the annotations.
62
+
45
63
  ## Label schemes
46
64
 
47
65
  Only `ner`, `spans` and `textcat` take a label scheme. No other built-in recipe accepts
@@ -61,7 +79,7 @@ for an existing one first with `ellf assets list`. Format and design advice:
61
79
 
62
80
  ## Annotation instructions
63
81
 
64
- Built-in task recipes take annotation instructions in their annotation settings
82
+ Built-in task recipes except `review` and `terms` take annotation instructions in their annotation settings
65
83
  (`--settings.instructions`): an asset of kind `instructions` holding one Markdown
66
84
  document. HTML isn't accepted. Annotators open it in the annotation app from the help
67
85
  icon or with the H key. Publish it with
@@ -109,15 +127,20 @@ them when the user asks for Hugging Face models or already has a suitable fine-t
109
127
  model.
110
128
  - `hf_model_agent` runs a model already fine-tuned for the task (from the Hub or an
111
129
  `hf_model` asset) on the cluster. It only serves `ner_manual` / `spans_manual`, binary
112
- `ner` / `spans`, `choice` and binary `classification` tasks. Every task label (or
113
- choice option) must map to a model label via `label_map`. If one doesn't, or the
114
- interface isn't supported (`blocks`, `html`, relations, image, audio), the agent stops
115
- on its first task with an error naming what's missing, rather than answering.
130
+ `ner` / `spans`, `choice` and binary `classification` tasks. Model labels with the
131
+ same name as a task label map automatically; map the others with `label_map` (model
132
+ label → task label). It stops on its first task with an error naming what's missing
133
+ when a manual spans or choice task has a label the model can't produce, when the
134
+ interface isn't supported, or when the model type doesn't fit the task (a
135
+ token-classification model on a choice task, say). Binary tasks whose label the model
136
+ doesn't have are answered "ignore" instead.
116
137
  - `hf_llm_agent` works like `gemini_agent` but uses a chat model from Hugging Face
117
138
  Inference Providers, and needs an `hf_token` secret. A bad token, missing credits or an
118
139
  unusable model stops it at startup with the reason.
119
140
 
120
- The LLM agents (`gemini_agent`, `hf_llm_agent`) include the task's annotation
141
+ The LLM agents (`gemini_agent`, `hf_llm_agent`) only annotate text: tasks without
142
+ text, and interfaces no prompt covers (relations, dependencies, `blocks`, image, audio),
143
+ are answered "ignore" and left to people. They include the task's annotation
121
144
  instructions in every prompt by default. Their agent settings add:
122
145
  - `--settings.instructions`: an agent-only `instructions` asset, combined with the
123
146
  task's. Use it for guidance only the model needs, such as mistakes it keeps making.
@@ -16,6 +16,7 @@ built-ins or an existing custom recipe are not enough.
16
16
  | `ner.correct` | Correct model predictions |
17
17
  | `ner.teach` | Active-learning binary review |
18
18
  | `ner.llm.correct` | Correct LLM-assisted predictions |
19
+ | `ner.silver-to-gold` | Turn binary (accept/reject) annotations into complete gold ones |
19
20
 
20
21
  ## Span Categorization
21
22
 
@@ -23,6 +24,7 @@ built-ins or an existing custom recipe are not enough.
23
24
  |---|---|
24
25
  | `spans.manual` | Manual overlapping span annotation |
25
26
  | `spans.correct` | Correct span predictions |
27
+ | `spans.llm.correct` | Correct LLM-assisted span predictions |
26
28
 
27
29
  ## Text Classification
28
30
 
@@ -60,6 +62,30 @@ built-ins or an existing custom recipe are not enough.
60
62
  |---|---|
61
63
  | `coref.manual` | Manual coreference annotation |
62
64
 
65
+ ## Image and audio
66
+
67
+ | Recipe | Use for |
68
+ |---|---|
69
+ | `image.manual` | Bounding boxes, polygons and freehand shapes on images |
70
+ | `audio.manual` | Label regions in audio or video |
71
+ | `audio.transcribe` | Transcribe audio or video |
72
+
73
+ ## Terminology
74
+
75
+ | Recipe | Use for |
76
+ |---|---|
77
+ | `terms.teach` | Build a terminology list from seed terms with word vectors |
78
+ | `terms.to-patterns` | Turn a terminology dataset into match patterns |
79
+
80
+ ## Pre-annotating and comparing
81
+
82
+ | Recipe | Use for |
83
+ |---|---|
84
+ | `ner.model-annotate` / `spans.model-annotate` / `textcat.model-annotate` | Save a model's predictions to a dataset, e.g. to review or compare |
85
+ | `ner.llm.fetch` / `spans.llm.fetch` / `textcat.llm.fetch` | Fetch LLM predictions for a whole corpus up front, then correct them |
86
+ | `compare` | Compare two sets of outputs side by side (A/B) |
87
+ | `ner.eval-ab` | A/B evaluation of two NER models |
88
+
63
89
  ## Relations and review
64
90
 
65
91
  | Recipe | Use for |
@@ -64,8 +64,10 @@ no plain list of labels.
64
64
  exactly the span's `text`.
65
65
 
66
66
  Unknown keys are an error (`"desc"` instead of `"description"`), and so is anything
67
- else that doesn't fit the format. The file is checked when a task or agent loads it,
68
- and every problem is reported at once, so fix them all in one go.
67
+ else that doesn't fit the format; a top-level `"$schema"` string is allowed. The file
68
+ is checked when it's published with `ellf publish data --kind labels` and again when a
69
+ task or agent loads it, and every problem is reported at once, so fix them all in one
70
+ go.
69
71
 
70
72
  ## Designing a scheme
71
73
 
@@ -99,25 +101,34 @@ user has annotated data for the labels, or can't settle the definitions up front
99
101
 
100
102
  - **From an existing dataset.** Export it with
101
103
  `ellf datasets export "<dataset>" -o annotations.jsonl` and derive the scheme from
102
- it, as described below.
104
+ it, as described below. Export refuses datasets that still hold examples from
105
+ before structured storage; run the "Migrate dataset to structured" action
106
+ (`migrate_to_structured`) on them first.
103
107
  - **Pilot first, then write the scheme.** If there's no data yet and the labels
104
108
  aren't settled, queue up a small batch with a plain list of labels (`--label A,B`)
105
109
  and flagging enabled (`"show_flag": true` in the Prodigy config), and ask the user
106
110
  to go through 50–100 examples, flagging the ones they're unsure about. Then build
107
- the scheme from that dataset, and restart the task, or create the next one, with
108
- `--label-scheme`, so annotators and agents see the definitions from then on. The
111
+ the scheme from that dataset, publish it, and create the next task with
112
+ `--label-scheme`, so annotators and agents see the definitions from then on (a
113
+ task's recipe args can't be changed after creation). The
109
114
  flagged examples are usually what `do_not_mark` and the boundary examples need.
110
115
 
116
+ The export is structured JSONL, one row per answer: the text is in `input.text`,
117
+ the annotation in `user_anns` (`user_anns.spans` for spans, `user_anns.label` for
118
+ text classification, `user_anns.accept` for choice; a key missing there comes from
119
+ `server_anns`, the suggestion as served), the answer in `answer`, and the flag in
120
+ `extras.flagged`. Rows don't record who annotated them.
121
+
111
122
  Derive the scheme from the exported JSONL:
112
123
  - **Labels and order:** the labels used in the data, most frequent first.
113
124
  - **`description`:** what the accepted spans or texts of each label have in common,
114
125
  written as a rule, not a summary of the data.
115
126
  - **`do_not_mark`:** the near misses. In binary (accept/reject) datasets, rejected
116
127
  suggestions are near misses. In manual datasets, look for the same kind of phrase
117
- annotated inconsistently, examples with `"flagged": true`, and texts that annotators
118
- answered differently (compare `_session_id`s on the same `_input_hash`).
128
+ annotated inconsistently, rows with `extras.flagged` set, and texts that got
129
+ different answers or annotations (rows sharing the same `input_hash`).
119
130
  - **`examples`:** one clear positive and one boundary case per label, copied from
120
- accepted answers. Prodigy spans already have `"start"` and `"end"`: keep them when
131
+ accepted answers. The spans in `user_anns.spans` already have `"start"` and `"end"`: keep them when
121
132
  the span text appears more than once in the example, and drop `token_start`,
122
133
  `token_end` and the other keys. Skip `"ignore"`d answers, and rejected answers in
123
134
  manual datasets, which mean the whole example was bad.
@@ -44,7 +44,6 @@ bound at session time.
44
44
  | Field | Value |
45
45
  |---|---|
46
46
  | **Request ID** | `<id from tool result>` |
47
- | **Project** | <project name> |
48
47
  | **Status** | planned |
49
48
  | **Description** | <description> |
50
49
 
@@ -53,3 +52,10 @@ bound at session time.
53
52
 
54
53
  Briefly explain what the task covers — enough for the user to understand,
55
54
  not a full implementation plan.
55
+
56
+ ## Later: checking status
57
+
58
+ When the user asks how a handoff went, call `todo_list()` (scoped to this
59
+ conversation). With more than one result, let the user pick via `AskUserQuestion`,
60
+ using each todo's description as the label. Then `todo_read(id=...)` returns its
61
+ status and the resolution the coding agent wrote.
@@ -55,7 +55,8 @@ If there are multiple plausible jobs, use `AskUserQuestion` to let the user choo
55
55
 
56
56
  Read:
57
57
  - `${CLAUDE_SKILL_DIR}/references/training_monitoring.md`
58
- - `${CLAUDE_SKILL_DIR}/../ellf-train/references/training_troubleshooting.md`
58
+ - `${CLAUDE_SKILL_DIR}/../ellf-train/references/diagnostics.md` when an alert needs a root cause
59
+
59
60
  Use cluster calls such as:
60
61
  ```text
61
62
  mcp__cluster__job_status(id="<id>")
@@ -79,9 +80,9 @@ Use cluster calls for job status and per-dataset counts; use PAM for dataset
79
80
  discovery:
80
81
  ```text
81
82
  mcp__cluster__job_status(id="<id>")
82
- mcp__pam__dataset_list(cluster_id="<id>") # discover datasets (org-wide, registered with PAM)
83
- mcp__cluster__dataset_example_count(name="<name>") # total examples in the dataset (per-cluster, via broker)
84
- mcp__cluster__dataset_session_counts(name="<name>") # per-annotator breakdown (keys are session_ids; null = bulk import)
83
+ mcp__pam__dataset_list() # discover datasets (org-wide), then pick the one you need by name
84
+ mcp__cluster__dataset_example_count(name="<name>") # {active, annotated, used, legacy} (per-cluster, via broker)
85
+ mcp__cluster__dataset_session_counts(name="<name>") # {counts: {<session>: {annotated, active, used}}, removed: [...]}
85
86
  ```
86
87
 
87
88
  `dataset_list` is a PAM read (org-wide registry), while the count tools talk to
@@ -95,7 +96,8 @@ Read when needed:
95
96
  Report:
96
97
  - task state
97
98
  - whether the task appears reachable and healthy
98
- - annotation count (from `dataset_example_count`)
99
+ - annotation count (from `dataset_example_count`: `active` for the dataset's size,
100
+ `annotated` for the work done)
99
101
  - per-annotator activity (from `dataset_session_counts`) when the user asks
100
102
  who annotated what or about active annotators
101
103
  - dataset growth
@@ -201,4 +203,4 @@ When you finish, state:
201
203
  |------|---------------|--------------|
202
204
  | `${CLAUDE_SKILL_DIR}/references/training_monitoring.md` | Training log interpretation, alert classification, metric extraction | Training actions |
203
205
  | `${CLAUDE_SKILL_DIR}/references/annotation_metrics.md` | Annotation progress signals, dataset growth, annotator activity | Annotation tasks |
204
- | `${CLAUDE_SKILL_DIR}/../ellf-train.assistant/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
206
+ | `${CLAUDE_SKILL_DIR}/../ellf-train/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
@@ -0,0 +1,34 @@
1
+ # Annotation Metrics
2
+
3
+ Use this reference to interpret annotation activity and quality signals.
4
+
5
+ ## What to watch
6
+
7
+ - Annotation count — from `mcp__cluster__dataset_example_count`: `active` is what the
8
+ dataset holds now (its size), `annotated` is all the work done, including versions
9
+ later edited over or removed. `legacy` > 0 means examples from before structured
10
+ storage that the counts leave out until the dataset is migrated.
11
+ - Dataset growth over time — compare counts across checks
12
+ - Who annotated what — from `mcp__cluster__dataset_session_counts`. Each key in
13
+ `counts` is a session dataset: `{dataset}-{task}-{user}` for an annotator's work on a
14
+ task, plus `-{session}` keys for single sittings. Each has `annotated`, `active` and
15
+ `used` (active and not ignored). The ids are user ids for people and agent ids for
16
+ agents (resolve them with `users_list` / `agent_list`). An annotator's figures and their sittings' overlap,
17
+ so count annotators from the `{dataset}-{task}-{user}` keys only and never add the
18
+ two kinds up. `removed` lists sittings removed from the dataset. Examples written
19
+ directly (e.g. via `db-in`) are in no session.
20
+ - Whether a running task is producing new examples — combine job status with
21
+ example count over time
22
+
23
+ ## Warning signals
24
+
25
+ - Very fast growth can indicate careless annotation
26
+ - Very slow or flat growth can indicate task reachability or assignment problems
27
+ - Frequent agent errors with no dataset growth usually mean the agent is failing to annotate
28
+ - Repeated pauses or restarts may indicate an unstable launch or worker issue
29
+
30
+ ## Interpretation rules
31
+
32
+ - Do not infer annotation quality from counts alone
33
+ - Use counts and status to describe activity, not to prove correctness
34
+ - If progress is suspicious, recommend operational checks first, then methodology review if needed
@@ -91,10 +91,16 @@ Use it when available because it keeps raw logs out of context and produces stru
91
91
 
92
92
  If needed, supplement with:
93
93
  ```bash
94
- ellf actions info "<name>" --json
94
+ ellf actions logs "<name>" --show-errors --json # state + structured errors
95
95
  ellf actions logs "<name>"
96
96
  ```
97
97
 
98
+ `info --json` has no state field; take state from `logs --show-errors --json`
99
+ (`pending`, `running`, `ready`, `succeeded`, `failed`, `stopped`, `cancelled`,
100
+ `not_found`, or `unknown` when the cluster can't be reached) or from the `state`
101
+ column of `ellf actions list --json`. For a job that was created with `--no-start` and
102
+ never started, `logs` fails; use `list --json` instead.
103
+
98
104
  For local runs, inspect:
99
105
  - `job_status.json`
100
106
  - `training_log.jsonl`
@@ -111,10 +117,20 @@ Report:
111
117
 
112
118
  Use:
113
119
  ```bash
114
- ellf tasks info "<name>" --json
115
- ellf tasks logs "<name>"
120
+ ellf tasks logs "<name>" --show-errors --json # state + structured errors
121
+ ellf tasks info "<name>" --json # url + stats (annotations, annotators, sessions)
122
+ ellf tasks logs "<name>" [--query "<text>"] # --query filters lines (needs Loki on the cluster)
123
+ ellf sessions list "<name>" --json # per session: annotator, annotated, active, status
116
124
  ```
117
125
 
126
+ `sessions list` answers "who annotated how much": `annotated` is the work done,
127
+ `active` how much of it the dataset still holds, and `status` shows excluded
128
+ sessions. Excluding or re-activating one is an operation: route it to `/ellf-ops`.
129
+
130
+ Don't use `ellf tasks questions` to peek at a live task: it reserves that batch for the
131
+ CLI's session, so annotators won't get those questions until they're answered or
132
+ stolen by another session.
133
+
118
134
  To check the linked dataset and confirm the output target:
119
135
  ```bash
120
136
  ellf datasets info "<dataset_name>" --json
@@ -133,7 +149,7 @@ Report:
133
149
 
134
150
  Use:
135
151
  ```bash
136
- ellf agents info "<name>" --json
152
+ ellf agents logs "<name>" --show-errors --json # state + structured errors
137
153
  ellf agents logs "<name>"
138
154
  ```
139
155
 
@@ -154,11 +170,21 @@ If a Hugging Face agent stopped soon after starting, its log's last error says w
154
170
  provider is left to automatic routing: store an HF token, or name the provider the
155
171
  key belongs to.
156
172
 
173
+ ## Orphaned workloads
174
+
175
+ If the cluster seems busy or a job won't go away, list what's actually running:
176
+
177
+ ```bash
178
+ ellf jobs list --unmatched --json # workloads with no matching task/action/agent/service in Ellf
179
+ ```
180
+
181
+ Stopping one (`ellf jobs stop <job_id>`) is an operation: route it to `/ellf-ops`.
182
+
157
183
  ## Generic actions
158
184
 
159
185
  Use:
160
186
  ```bash
161
- ellf actions info "<name>" --json
187
+ ellf actions logs "<name>" --show-errors --json # state + structured errors
162
188
  ellf actions logs "<name>"
163
189
  ```
164
190
 
@@ -247,5 +273,5 @@ When you finish, state:
247
273
  |------|---------------|--------------|
248
274
  | `${CLAUDE_SKILL_DIR}/references/training_monitoring.md` | Training log interpretation, alert classification, metric extraction | Training actions |
249
275
  | `${CLAUDE_SKILL_DIR}/references/annotation_metrics.md` | Annotation progress signals, dataset growth, annotator activity | Annotation tasks |
250
- | `${CLAUDE_SKILL_DIR}/../ellf-train.coding/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
251
- | `${CLAUDE_SKILL_DIR}/../ellf-train.coding/references/training_troubleshooting.md` | Error taxonomy with concrete fixes | Concrete setup or execution errors |
276
+ | `${CLAUDE_SKILL_DIR}/../ellf-train/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
277
+ | `${CLAUDE_SKILL_DIR}/../ellf-train/references/training_troubleshooting.md` | Error taxonomy with concrete fixes | Concrete setup or execution errors |
@@ -4,7 +4,7 @@ How to monitor training jobs, interpret alerts, and diagnose problems.
4
4
 
5
5
  ## The check script
6
6
 
7
- The ellf-train skill includes `scripts/check_training.py` — it reads local
7
+ This skill includes `scripts/check_training.py` — it reads local
8
8
  logs or cluster status and produces a structured JSON summary.
9
9
 
10
10
  ```bash
@@ -18,7 +18,7 @@ python ${CLAUDE_SKILL_DIR}/scripts/check_training.py --mode cluster --job-name n
18
18
  Output shape:
19
19
  ```json
20
20
  {
21
- "state": "running|completed|failed",
21
+ "state": "running|completed|failed|stopped|cancelled|pending|ready|not_found|unknown",
22
22
  "step": 800,
23
23
  "train_loss": 0.52,
24
24
  "dev_scores": {"ents_f": 0.79, "ents_p": 0.82, "ents_r": 0.76},
@@ -37,6 +37,12 @@ Output shape:
37
37
  | `plateau` | 8+ evals without score improvement | Present analysis | Yes |
38
38
  | `overfitting` | Dev score declining while train loss improves | Show best checkpoint info | Yes |
39
39
  | `completed` | Training finished normally | Report completion and results | No |
40
+ | `stopped` / `cancelled` | Cluster job was stopped or cancelled before finishing | Report it; ask whether it was intended | Yes |
41
+
42
+ `nan_loss`, `loss_spike`, `plateau` and `overfitting` come from the local
43
+ `training_log.jsonl` (ellf_logger). Cluster `train` has no such log, so cluster runs only
44
+ get the state alerts (`failed`, `stopped`, `cancelled`, `completed`); the step and best
45
+ score come from the last 200 lines of the job log.
40
46
 
41
47
  ## Diagnostics
42
48