ellf-cli 5.0.7__tar.gz → 5.0.9__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.
- {ellf_cli-5.0.7/ellf_cli.egg-info → ellf_cli-5.0.9}/PKG-INFO +1 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/about.json +1 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf.json +27 -27
- ellf_cli-5.0.9/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +170 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/SKILL.md +8 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-handoff/SKILL.md +3 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md +41 -23
- {ellf_cli-5.0.7/ellf_cli/ellf_skills/skills/ellf-monitor.coding → ellf_cli-5.0.9/ellf_cli/ellf_skills/skills/ellf-monitor.assistant}/references/annotation_metrics.md +7 -4
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/references/training_monitoring.md +1 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/SKILL.md +26 -2
- ellf_cli-5.0.9/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +369 -0
- ellf_cli-5.0.9/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +161 -0
- ellf_cli-5.0.9/ellf_cli/ellf_skills/skills/ellf-ops.coding/references/data_infra_cli.md +156 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-patterns/references/pattern_strategies.md +3 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.assistant/SKILL.md +42 -20
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.coding/SKILL.md +43 -21
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-support.assistant/SKILL.md +5 -4
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-support.coding/SKILL.md +13 -12
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-todo/SKILL.md +2 -2
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.assistant/SKILL.md +7 -7
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/workflow.md +21 -40
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/SKILL.md +1 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9/ellf_cli.egg-info}/PKG-INFO +1 -1
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli.egg-info/SOURCES.txt +1 -2
- ellf_cli-5.0.7/ellf_cli/ellf_skills/bin/write-current-session.py +0 -71
- ellf_cli-5.0.7/ellf_cli/ellf_skills/hooks/hooks.json +0 -37
- ellf_cli-5.0.7/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/SKILL.md +0 -168
- ellf_cli-5.0.7/ellf_cli/ellf_skills/skills/ellf-ops.assistant/SKILL.md +0 -210
- ellf_cli-5.0.7/ellf_cli/ellf_skills/skills/ellf-ops.coding/SKILL.md +0 -321
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/LICENSE +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/MANIFEST.in +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/README.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/__main__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/about.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/appdirs.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/auth.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/cli.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/cloud/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/cloud/gcp.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/cluster_config.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/_cluster_select.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/_recipe_file.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/_recipe_subcommand.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/_state.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/actions.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/agents.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/assets.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/auth.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/clusters.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/config.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/datasets.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/files/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/files/cp.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/files/ls.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/files/rm.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/files/rsync.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/files/stats.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/general.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/import_export.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/_helpers.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/deploy.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/init_values.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/provision.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/register.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/setup.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/start.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/terraform.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/infra/tls.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/jobs.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/packages.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/paths.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/plans.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/projects.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/publish_code.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/publish_data.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/recipes.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/secrets.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/support.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/tasks.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/commands/todos.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/config.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/.claude-plugin/plugin.json +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/.gitignore +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skill_variants.json +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/annotation_audit.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate.assistant/references/builtin_ellf_annotation_recipes.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/annotation_audit.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_ellf_annotation_recipes.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-annotate.coding/references/builtin_prodigy_recipes.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-ask/SKILL.md +0 -0
- {ellf_cli-5.0.7/ellf_cli/ellf_skills/skills/ellf-monitor.assistant → ellf_cli-5.0.9/ellf_cli/ellf_skills/skills/ellf-monitor.coding}/references/annotation_metrics.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/references/training_monitoring.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor.coding/scripts/check_training.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-ops.coding/scripts/run_job.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-patterns/SKILL.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/SKILL.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_action_recipe.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_agent_recipe.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_blocks_ui.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_correct.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_custom_ui.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_manual.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_pages_ui.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_routing.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_task_recipe.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/assets/templates/template_teach.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/builtin_recipes.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/ellf_recipe_sdk.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/lint_recipe.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/prodigy_recipe_api.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-prodigy/references/template_index.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/consulting_patterns.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/explosion_strategy.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.assistant/references/prodigy_llm_bot.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/consulting_patterns.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/explosion_strategy.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-project.coding/references/prodigy_llm_bot.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/diagnostics.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/evaluation_guide.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/model_selection.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.assistant/references/training_paradigms.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_advanced.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_architectures.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/config_training.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/diagnostics.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/evaluation_guide.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/experiment_patterns.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/model_selection.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_paradigms.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/training_troubleshooting.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/references/workflow.md +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-train.coding/scripts/ellf_logger.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/errors.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/helm.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/key_pair.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/main.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/messages.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/query.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/cookiecutter.json +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/.gitignore +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/README.md.tmpl +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements-dev.in +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/requirements.in +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/setup.py.tmpl +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/about.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/recipes_cookiecutter/{{cookiecutter.package_dir}}/{{cookiecutter.package_name}}/recipes/example_task.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/testing/__init__.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ty.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ui.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/url.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/util.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli.egg-info/dependency_links.txt +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli.egg-info/entry_points.txt +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli.egg-info/not-zip-safe +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli.egg-info/requires.txt +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli.egg-info/top_level.txt +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/pyproject.toml +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/setup.cfg +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/setup.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_appdirs.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_auth.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_config.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_errors.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_files_cp.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_files_cp_helpers.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_info.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_invalid_secrets.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_key_pair.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_login.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_main.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_plans.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_projects.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_query.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_recipe_file.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_recipes.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_state.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_support.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_ty.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_ui.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_ui_extras.py +0 -0
- {ellf_cli-5.0.7 → ellf_cli-5.0.9}/tests/test_util.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"prog": "ellf",
|
|
3
3
|
"help": "Ellf Command Line Interface.",
|
|
4
|
-
"version": "5.0.
|
|
4
|
+
"version": "5.0.8",
|
|
5
5
|
"extra_key": "_extra",
|
|
6
6
|
"commands": {
|
|
7
7
|
"actions": {
|
|
@@ -217,7 +217,7 @@
|
|
|
217
217
|
"orig_type": "bool"
|
|
218
218
|
}
|
|
219
219
|
],
|
|
220
|
-
"description": "\
|
|
220
|
+
"description": "\n Log in to your Ellf account. You normally don't need to call this\n manually. It will automatically authenticate when needed.\n ",
|
|
221
221
|
"allow_extra": false,
|
|
222
222
|
"parent": null,
|
|
223
223
|
"is_placeholder": false
|
|
@@ -270,7 +270,7 @@
|
|
|
270
270
|
"orig_type": "Literal[api, cluster, id, ci]"
|
|
271
271
|
}
|
|
272
272
|
],
|
|
273
|
-
"description": "\
|
|
273
|
+
"description": "\n Return an auth token for the current user\n ",
|
|
274
274
|
"allow_extra": false,
|
|
275
275
|
"parent": null,
|
|
276
276
|
"is_placeholder": false
|
|
@@ -346,7 +346,7 @@
|
|
|
346
346
|
"orig_type": "list[Literal[tasks, actions, assets, datasets, paths]]"
|
|
347
347
|
}
|
|
348
348
|
],
|
|
349
|
-
"description": "\
|
|
349
|
+
"description": "\n Save the state of the current app JSON file. If an assets directory is\n provided, assets will be downloaded and referenced in the JSON accordingly.\n ",
|
|
350
350
|
"allow_extra": false,
|
|
351
351
|
"parent": null,
|
|
352
352
|
"is_placeholder": false
|
|
@@ -381,7 +381,7 @@
|
|
|
381
381
|
"orig_type": "bool"
|
|
382
382
|
}
|
|
383
383
|
],
|
|
384
|
-
"description": "\
|
|
384
|
+
"description": "\n Populate Ellf with data for projects, tasks, actions, assets and paths.\n ",
|
|
385
385
|
"allow_extra": false,
|
|
386
386
|
"parent": null,
|
|
387
387
|
"is_placeholder": false
|
|
@@ -458,7 +458,7 @@
|
|
|
458
458
|
"orig_type": "List[str]"
|
|
459
459
|
}
|
|
460
460
|
],
|
|
461
|
-
"description": "\
|
|
461
|
+
"description": "\n Create a new action. The available action recipes are fetched from your\n cluster and are added as dynamic subcommands. You can see more details\n and available arguments by calling the subcommand with --help, e.g. create\n [name] --help\n ",
|
|
462
462
|
"allow_extra": true,
|
|
463
463
|
"parent": "actions",
|
|
464
464
|
"is_placeholder": false
|
|
@@ -493,7 +493,7 @@
|
|
|
493
493
|
"orig_type": "bool"
|
|
494
494
|
}
|
|
495
495
|
],
|
|
496
|
-
"description": "\
|
|
496
|
+
"description": "\n List the actions on the cluster. By default, this includes their ID, name\n and current state, e.g. created or completed\n ",
|
|
497
497
|
"allow_extra": false,
|
|
498
498
|
"parent": "actions",
|
|
499
499
|
"is_placeholder": false
|
|
@@ -939,7 +939,7 @@
|
|
|
939
939
|
"orig_type": "List[str]"
|
|
940
940
|
}
|
|
941
941
|
],
|
|
942
|
-
"description": "\
|
|
942
|
+
"description": "\n Create a new agent. The available agent recipes are fetched from your\n cluster and are added as dynamic subcommands. You can see more details\n and available arguments by calling the subcommand with --help, e.g. create\n [name] --help\n ",
|
|
943
943
|
"allow_extra": true,
|
|
944
944
|
"parent": "agents",
|
|
945
945
|
"is_placeholder": false
|
|
@@ -1048,7 +1048,7 @@
|
|
|
1048
1048
|
"orig_type": "bool"
|
|
1049
1049
|
}
|
|
1050
1050
|
],
|
|
1051
|
-
"description": "\
|
|
1051
|
+
"description": "\n List the agents on the cluster. By default, this includes their ID, name\n and current state, e.g. created or completed\n ",
|
|
1052
1052
|
"allow_extra": false,
|
|
1053
1053
|
"parent": "agents",
|
|
1054
1054
|
"is_placeholder": false
|
|
@@ -1542,7 +1542,7 @@
|
|
|
1542
1542
|
"orig_type": "bool"
|
|
1543
1543
|
}
|
|
1544
1544
|
],
|
|
1545
|
-
"description": "\
|
|
1545
|
+
"description": "\n Get detailed info for an asset uploaded to the cluster and registered\n with Ellf\n ",
|
|
1546
1546
|
"allow_extra": false,
|
|
1547
1547
|
"parent": "assets",
|
|
1548
1548
|
"is_placeholder": false
|
|
@@ -1642,7 +1642,7 @@
|
|
|
1642
1642
|
"orig_type": "bool"
|
|
1643
1643
|
}
|
|
1644
1644
|
],
|
|
1645
|
-
"description": "\
|
|
1645
|
+
"description": "\n Create an asset on the cluster and register it with Ellf. Assets\n point to files or directories you control. The Ellf server only has\n a reference to them. This command doesn't transfer any data. See `ellf files`\n for utilities to transfer files to and from your cluster\n ",
|
|
1646
1646
|
"allow_extra": false,
|
|
1647
1647
|
"parent": "assets",
|
|
1648
1648
|
"is_placeholder": false
|
|
@@ -1713,7 +1713,7 @@
|
|
|
1713
1713
|
"import": {
|
|
1714
1714
|
"name": "import",
|
|
1715
1715
|
"args": [],
|
|
1716
|
-
"description": "Read a serialised FileSecrets blob from stdin and write it to\
|
|
1716
|
+
"description": "Read a serialised FileSecrets blob from stdin and write it to\n the local secrets file.\n\n Counterpart to ``ellf auth push``. Existing local auth state is\n overwritten; the file is written 0600 by FileSecrets.save.\n ",
|
|
1717
1717
|
"allow_extra": false,
|
|
1718
1718
|
"parent": "auth",
|
|
1719
1719
|
"is_placeholder": false
|
|
@@ -1748,7 +1748,7 @@
|
|
|
1748
1748
|
"orig_type": "str"
|
|
1749
1749
|
}
|
|
1750
1750
|
],
|
|
1751
|
-
"description": "Push local auth state to a remote machine via SSH.\n\
|
|
1751
|
+
"description": "Push local auth state to a remote machine via SSH.\n\n Reads the local FileSecrets, JSON-serialises it, and pipes it to\n ``<remote_ellf> auth import`` over an SSH connection to *host*.\n Authentication is delegated to ssh \u2014 anything in your ssh config\n (host aliases, ProxyJump, key-based auth) just works.\n\n The pushed blob includes id_token, api_token, and any cached\n broker_tokens. id_token expiry is dictated by the issuer (typically\n ~1h), so this is a \"give the remote a usable session\" operation,\n not a permanent provisioning. Re-run when the token expires.\n ",
|
|
1752
1752
|
"allow_extra": false,
|
|
1753
1753
|
"parent": "auth",
|
|
1754
1754
|
"is_placeholder": false
|
|
@@ -1820,7 +1820,7 @@
|
|
|
1820
1820
|
"orig_type": "bool"
|
|
1821
1821
|
}
|
|
1822
1822
|
],
|
|
1823
|
-
"description": "Switch the active cluster.\n\
|
|
1823
|
+
"description": "Switch the active cluster.\n\n Looks up the cluster by name or ID via PAM. With no argument and\n multiple clusters available, prompts interactively in a TTY.\n ",
|
|
1824
1824
|
"allow_extra": false,
|
|
1825
1825
|
"parent": "clusters",
|
|
1826
1826
|
"is_placeholder": false
|
|
@@ -1951,7 +1951,7 @@
|
|
|
1951
1951
|
"orig_type": "Union[str, UUID]"
|
|
1952
1952
|
}
|
|
1953
1953
|
],
|
|
1954
|
-
"description": "\
|
|
1954
|
+
"description": "\n Delete a cluster from PAM. This only removes PAM's record\n of it. The cluster itself will continue to exist - you need\n to shut it down separately.\n ",
|
|
1955
1955
|
"allow_extra": false,
|
|
1956
1956
|
"parent": "clusters",
|
|
1957
1957
|
"is_placeholder": false
|
|
@@ -2038,7 +2038,7 @@
|
|
|
2038
2038
|
"orig_type": "bool"
|
|
2039
2039
|
}
|
|
2040
2040
|
],
|
|
2041
|
-
"description": "Check the health of a cluster deployment.\n\
|
|
2041
|
+
"description": "Check the health of a cluster deployment.\n\n Runs CLI-side connectivity checks against the cluster and PAM.\n Use --deep (or supply --s3-bucket / --nfs-path / --recipe) to also\n trigger cluster-side deployment checks via the broker's /v1/check\n endpoints (K8s API, NFS, S3, recipe execution, DB).\n ",
|
|
2042
2042
|
"allow_extra": false,
|
|
2043
2043
|
"parent": "clusters",
|
|
2044
2044
|
"is_placeholder": false
|
|
@@ -2121,7 +2121,7 @@
|
|
|
2121
2121
|
"orig_type": "str"
|
|
2122
2122
|
}
|
|
2123
2123
|
],
|
|
2124
|
-
"description": "Rotate the cluster RSA keypair.\n\
|
|
2124
|
+
"description": "Rotate the cluster RSA keypair.\n\n Generates a new keypair, updates the cluster record in PAM with the\n new public key, patches the K8s secret with the new private key,\n and restarts the cluster deployment.\n ",
|
|
2125
2125
|
"allow_extra": false,
|
|
2126
2126
|
"parent": "clusters",
|
|
2127
2127
|
"is_placeholder": false
|
|
@@ -2871,7 +2871,7 @@
|
|
|
2871
2871
|
"orig_type": "str"
|
|
2872
2872
|
}
|
|
2873
2873
|
],
|
|
2874
|
-
"description": "Export all the examples from a dataset and save it in the designated file as\
|
|
2874
|
+
"description": "Export all the examples from a dataset and save it in the designated file as\n JSONL (newline-delimited JSON).\n ",
|
|
2875
2875
|
"allow_extra": false,
|
|
2876
2876
|
"parent": "datasets",
|
|
2877
2877
|
"is_placeholder": false
|
|
@@ -3306,7 +3306,7 @@
|
|
|
3306
3306
|
"orig_type": "bool"
|
|
3307
3307
|
}
|
|
3308
3308
|
],
|
|
3309
|
-
"description": "Deploy or upgrade the Ellf Helm chart.\n\
|
|
3309
|
+
"description": "Deploy or upgrade the Ellf Helm chart.\n\n Creates the namespace, image pull secret, cluster keypair secret,\n then runs helm upgrade --install with the provided values.\n ",
|
|
3310
3310
|
"allow_extra": false,
|
|
3311
3311
|
"parent": "infra",
|
|
3312
3312
|
"is_placeholder": false
|
|
@@ -3550,7 +3550,7 @@
|
|
|
3550
3550
|
"orig_type": "str"
|
|
3551
3551
|
}
|
|
3552
3552
|
],
|
|
3553
|
-
"description": "Install cluster infrastructure prerequisites (Traefik, cert-manager).\n\
|
|
3553
|
+
"description": "Install cluster infrastructure prerequisites (Traefik, cert-manager).\n\n These operations are idempotent and safe to re-run.\n ",
|
|
3554
3554
|
"allow_extra": false,
|
|
3555
3555
|
"parent": "infra",
|
|
3556
3556
|
"is_placeholder": false
|
|
@@ -3833,7 +3833,7 @@
|
|
|
3833
3833
|
"orig_type": "str"
|
|
3834
3834
|
}
|
|
3835
3835
|
],
|
|
3836
|
-
"description": "Manage TLS certificates for local cluster access.\n\
|
|
3836
|
+
"description": "Manage TLS certificates for local cluster access.\n\n Use --self-signed when you have direct kubectl access to the cluster.\n Use --setup HOST to do everything from your laptop over SSH.\n Use --trust HOST to fetch and install an existing CA from a remote cluster.\n ",
|
|
3837
3837
|
"allow_extra": false,
|
|
3838
3838
|
"parent": "infra",
|
|
3839
3839
|
"is_placeholder": false
|
|
@@ -3857,7 +3857,7 @@
|
|
|
3857
3857
|
"orig_type": "str"
|
|
3858
3858
|
}
|
|
3859
3859
|
],
|
|
3860
|
-
"description": "\
|
|
3860
|
+
"description": "\n Run a job directly on the cluster from a YAML spec file, bypassing PAM.\n ",
|
|
3861
3861
|
"allow_extra": false,
|
|
3862
3862
|
"parent": "jobs",
|
|
3863
3863
|
"is_placeholder": false
|
|
@@ -4935,7 +4935,7 @@
|
|
|
4935
4935
|
"orig_type": "str"
|
|
4936
4936
|
}
|
|
4937
4937
|
],
|
|
4938
|
-
"description": "\
|
|
4938
|
+
"description": "\n Upload and advertise a recipes package from your Python environment.\n ",
|
|
4939
4939
|
"allow_extra": false,
|
|
4940
4940
|
"parent": "publish",
|
|
4941
4941
|
"is_placeholder": false
|
|
@@ -5048,7 +5048,7 @@
|
|
|
5048
5048
|
"orig_type": "bool"
|
|
5049
5049
|
}
|
|
5050
5050
|
],
|
|
5051
|
-
"description": "\
|
|
5051
|
+
"description": "\n Transfer data to the cluster, and advertise it to Ellf.\n\n These steps can also be done separately. See `ellf files` to transfer\n data to the cluster without creating an Asset record for it, and\n `ellf assets create` to create an Asset without transfer.\n ",
|
|
5052
5052
|
"allow_extra": false,
|
|
5053
5053
|
"parent": "publish",
|
|
5054
5054
|
"is_placeholder": false
|
|
@@ -5721,7 +5721,7 @@
|
|
|
5721
5721
|
"orig_type": "List[str]"
|
|
5722
5722
|
}
|
|
5723
5723
|
],
|
|
5724
|
-
"description": "\
|
|
5724
|
+
"description": "\n Create a new task. The available task recipes are fetched from your\n cluster and are added as dynamic subcommands. You can see more details\n and available arguments by calling the subcommand with --help, e.g. create\n [name] --help\n ",
|
|
5725
5725
|
"allow_extra": true,
|
|
5726
5726
|
"parent": "tasks",
|
|
5727
5727
|
"is_placeholder": false
|
|
@@ -5756,7 +5756,7 @@
|
|
|
5756
5756
|
"orig_type": "bool"
|
|
5757
5757
|
}
|
|
5758
5758
|
],
|
|
5759
|
-
"description": "\
|
|
5759
|
+
"description": "\n List the tasks on the cluster. By default, this includes their ID, name\n and current state, e.g. created or completed\n ",
|
|
5760
5760
|
"allow_extra": false,
|
|
5761
5761
|
"parent": "tasks",
|
|
5762
5762
|
"is_placeholder": false
|
|
@@ -6187,7 +6187,7 @@
|
|
|
6187
6187
|
"orig_type": "bool"
|
|
6188
6188
|
}
|
|
6189
6189
|
],
|
|
6190
|
-
"description": "Fetch a batch of questions from a running annotation task.\n\
|
|
6190
|
+
"description": "Fetch a batch of questions from a running annotation task.\n\n Mirrors the web app: asks the broker for a Prodigy login token, then talks\n to the task pod directly via its public task_url. Note that requesting a\n batch reserves those questions for this CLI's session \u2014 they will not be\n handed to other annotators until they are answered or another session\n runs out of work and steals them.\n ",
|
|
6191
6191
|
"allow_extra": false,
|
|
6192
6192
|
"parent": "tasks",
|
|
6193
6193
|
"is_placeholder": false
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ellf-annotate
|
|
3
|
+
description: "Prepares annotation for launch in the Ellf cluster: audits readiness, selects the right recipe, and resolves arguments. Delegates to `/ellf-ops` to actually create the task (and optionally start it) once the audit passes. Use when the user is setting up annotation from scratch, choosing the right built-in recipe, verifying readiness, or planning an annotation agent — not for `run X` / `start Y` requests on a known recipe, which go directly to `/ellf-ops`. Use `/ellf-handoff` when a new custom recipe is needed (routes the implementation to the coding agent), and `/ellf-project` when broader project planning is required."
|
|
4
|
+
argument-hint: "[describe what you want to annotate]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Prepare Annotation In Ellf
|
|
8
|
+
|
|
9
|
+
Help the user get from an annotation-ready plan to a running annotation task.
|
|
10
|
+
|
|
11
|
+
$ARGUMENTS
|
|
12
|
+
|
|
13
|
+
## Your role
|
|
14
|
+
|
|
15
|
+
You are responsible for:
|
|
16
|
+
- checking that annotation is ready to launch (the audit)
|
|
17
|
+
- choosing the right built-in Ellf annotation and/or agent recipe
|
|
18
|
+
- deciding whether an existing custom recipe is sufficient
|
|
19
|
+
- deciding when a new custom recipe is required
|
|
20
|
+
- resolving the natural-scalar arguments the user can answer in chat
|
|
21
|
+
- delegating to `/ellf-ops` to actually create (and optionally start) the task
|
|
22
|
+
|
|
23
|
+
You do not call `*_create` tools yourself — that is `/ellf-ops`'s job. After
|
|
24
|
+
the audit and arg resolution, delegate. You also do not implement new recipes.
|
|
25
|
+
If the workflow requires a new custom recipe or custom interface, use
|
|
26
|
+
`/ellf-handoff` to route the implementation to the coding workflow. If broader
|
|
27
|
+
methodology or schema work is needed, use `/ellf-project`.
|
|
28
|
+
|
|
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
|
|
33
|
+
link. The audit summary is useful when something failed and the user needs
|
|
34
|
+
to fix it; otherwise skip it and let the create tool's artifact (card,
|
|
35
|
+
form link, or prerequisite link) do the talking.
|
|
36
|
+
|
|
37
|
+
## Required readiness audit
|
|
38
|
+
|
|
39
|
+
Before choosing a recipe or building a launch spec, read:
|
|
40
|
+
|
|
41
|
+
- `${CLAUDE_SKILL_DIR}/references/annotation_audit.md`
|
|
42
|
+
- `${CLAUDE_SKILL_DIR}/references/builtin_ellf_annotation_recipes.md`
|
|
43
|
+
|
|
44
|
+
The audit exists because launching with a poorly designed schema or a
|
|
45
|
+
mismatched recipe wastes annotation effort and produces training data the
|
|
46
|
+
model can't learn from. Use it to catch problems before you touch the
|
|
47
|
+
platform.
|
|
48
|
+
|
|
49
|
+
Do not launch until you have confirmed:
|
|
50
|
+
- the annotation objective is clear
|
|
51
|
+
- the schema or review target is stable enough
|
|
52
|
+
- the recipe choice actually matches the task
|
|
53
|
+
- the input data is ready
|
|
54
|
+
- the target dataset is clear
|
|
55
|
+
|
|
56
|
+
If the audit surfaces a problem:
|
|
57
|
+
- methodological issues (schema design, task decomposition) → route to `/ellf-project`
|
|
58
|
+
- recipe implementation needs (custom UI, routing logic) → route to `/ellf-handoff`
|
|
59
|
+
|
|
60
|
+
## Recipe selection
|
|
61
|
+
|
|
62
|
+
### Built-in task recipe first
|
|
63
|
+
|
|
64
|
+
Prefer a built-in Ellf task recipe whenever it fits cleanly. The built-in
|
|
65
|
+
recipes are documented in
|
|
66
|
+
`${CLAUDE_SKILL_DIR}/references/builtin_ellf_annotation_recipes.md`.
|
|
67
|
+
|
|
68
|
+
Call `mcp__pam__recipe_list` to confirm the recipe is available in the
|
|
69
|
+
current environment before committing to it.
|
|
70
|
+
|
|
71
|
+
### Existing custom recipe
|
|
72
|
+
|
|
73
|
+
If the user names an existing cluster recipe and it matches the workflow,
|
|
74
|
+
use it.
|
|
75
|
+
|
|
76
|
+
### New custom recipe required
|
|
77
|
+
|
|
78
|
+
If the audit shows the user needs a custom interface, routing logic, or
|
|
79
|
+
annotation flow that built-ins cannot express cleanly:
|
|
80
|
+
- do not force a bad built-in fit
|
|
81
|
+
- use `/ellf-handoff` to assign custom recipe implementation to the coding agent
|
|
82
|
+
- describe what the custom recipe must do
|
|
83
|
+
|
|
84
|
+
## Annotation agents
|
|
85
|
+
|
|
86
|
+
If the user wants automated annotation:
|
|
87
|
+
- first ensure the base task is methodologically sound
|
|
88
|
+
- prepare the task spec first
|
|
89
|
+
- then identify an annotation-capable `agent_recipe` and prepare its args
|
|
90
|
+
- both task and agent get created via `/ellf-ops` (separate `*_create` calls,
|
|
91
|
+
then `mcp__pam__task_assign_bot` to attach the agent to the task)
|
|
92
|
+
|
|
93
|
+
Do not treat the agent as a replacement for task setup. The task is the
|
|
94
|
+
base annotation workflow.
|
|
95
|
+
|
|
96
|
+
## Recipe arguments
|
|
97
|
+
|
|
98
|
+
Once the recipe is selected:
|
|
99
|
+
- call `mcp__pam__recipe_list` to find the recipe ID
|
|
100
|
+
- call `mcp__pam__recipe_schema` with the recipe ID
|
|
101
|
+
- treat the returned field spec as the authoritative source for: exact arg keys, types, required vs optional fields, union variants, and cli-name remappings
|
|
102
|
+
- fill args from context and the project plan where possible
|
|
103
|
+
- ask only for natural-scalar values the user can answer in a sentence (a name, a language, a label list); object-typed args belong to the form
|
|
104
|
+
- the create tool runs validation internally and decides what the user sees — do not narrate the schema response back to the user
|
|
105
|
+
|
|
106
|
+
The annotation interface itself (what annotators see) cannot be previewed
|
|
107
|
+
from the assistant. If the user needs to verify the annotation UI before
|
|
108
|
+
cluster launch, they should use `ellf-dev run <recipe> [args]` in their
|
|
109
|
+
local coding environment.
|
|
110
|
+
|
|
111
|
+
## Execute via /ellf-ops
|
|
112
|
+
|
|
113
|
+
After audit + recipe selection + arg resolution, delegate to `/ellf-ops` to
|
|
114
|
+
create the task (and optionally start it):
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
mcp__pam__task_create(
|
|
118
|
+
recipe_id=<from recipe_list>,
|
|
119
|
+
args=<resolved scalar args>,
|
|
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
|
+
)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
If an annotation agent was also planned, call `mcp__pam__agent_create(...)`
|
|
126
|
+
for the agent. After the agent is created and started, attach it to the
|
|
127
|
+
task with `mcp__pam__task_assign_bot(task_id=..., agent_id=...)`.
|
|
128
|
+
|
|
129
|
+
The create tool's internal validation routes every case to a useful
|
|
130
|
+
user-facing artifact:
|
|
131
|
+
- confirmation card (three buttons: `Create and start` / `Create only` / `Cancel`) on clean validation
|
|
132
|
+
- form-handoff link on missing scalars or complex JSON args
|
|
133
|
+
- missing-prerequisite link on a referenced asset / dataset / secret that doesn't exist on the cluster
|
|
134
|
+
|
|
135
|
+
Do not stop early to flag schema issues, preview validation problems, or
|
|
136
|
+
direct the user elsewhere. The create tool produces a more useful artifact
|
|
137
|
+
than your commentary. See `/ellf-ops` for the full create workflow and the
|
|
138
|
+
forbidden patterns ("this won't validate, please fix", "the schema requires
|
|
139
|
+
X, Y, Z", any pre-emptive validation reasoning).
|
|
140
|
+
|
|
141
|
+
## After creation
|
|
142
|
+
|
|
143
|
+
Once the user confirms the create card (or the form-handoff link is followed
|
|
144
|
+
through to completion), help verify and run any follow-ups:
|
|
145
|
+
|
|
146
|
+
- if the task wasn't auto-started (user clicked `Create only`): use `/ellf-ops`
|
|
147
|
+
start workflow when the user is ready
|
|
148
|
+
- check cluster status with `mcp__cluster__job_status(id="<id>")` to confirm the
|
|
149
|
+
task is running or healthy
|
|
150
|
+
- provide the task link and tell the user where to open it in the app
|
|
151
|
+
- if an agent was added, confirm it is assigned with `mcp__pam__task_bots_read`
|
|
152
|
+
|
|
153
|
+
If startup or assignment fails:
|
|
154
|
+
- inspect the cluster error or logs with `mcp__cluster__job_logs(id="<id>")` /
|
|
155
|
+
`mcp__cluster__job_errors(id="<id>")`
|
|
156
|
+
- if this is an operational problem, use `/ellf-monitor` (or consult `/ellf-ops`)
|
|
157
|
+
- if this is a recipe-capability problem, use `/ellf-handoff`
|
|
158
|
+
|
|
159
|
+
When you finish:
|
|
160
|
+
- state whether the setup passed the readiness audit
|
|
161
|
+
- state which recipe path you selected
|
|
162
|
+
- summarize the launch outcome (created / created and started / handed off to form / blocked on missing prerequisite)
|
|
163
|
+
- if not launched, explain exactly what is missing and where you are routing the user next
|
|
164
|
+
|
|
165
|
+
## Reference files
|
|
166
|
+
|
|
167
|
+
| File | What it covers | When to read |
|
|
168
|
+
|------|---------------|--------------|
|
|
169
|
+
| `${CLAUDE_SKILL_DIR}/references/annotation_audit.md` | Readiness checklist: objective, schema, recipe fit, data, dataset | Before every launch |
|
|
170
|
+
| `${CLAUDE_SKILL_DIR}/references/builtin_ellf_annotation_recipes.md` | Built-in Ellf task and agent recipes with supported workflows | Recipe selection |
|
|
@@ -183,3 +183,11 @@ When you finish:
|
|
|
183
183
|
- state which runtime target will be used
|
|
184
184
|
- summarize the launch spec clearly
|
|
185
185
|
- if not launching, explain exactly what is missing and where you are routing the user next
|
|
186
|
+
|
|
187
|
+
## Reference files
|
|
188
|
+
|
|
189
|
+
| File | What it covers | When to read |
|
|
190
|
+
|------|---------------|--------------|
|
|
191
|
+
| `${CLAUDE_SKILL_DIR}/references/annotation_audit.md` | Readiness checklist: objective, schema, recipe fit, data, dataset | Before every launch |
|
|
192
|
+
| `${CLAUDE_SKILL_DIR}/references/builtin_ellf_annotation_recipes.md` | Built-in Ellf task and agent recipes with supported workflows | Recipe selection for cluster |
|
|
193
|
+
| `${CLAUDE_SKILL_DIR}/references/builtin_prodigy_recipes.md` | Built-in standalone Prodigy recipes | Recipe selection for local |
|
|
@@ -21,6 +21,7 @@ the **AskUserQuestion** tool to ask — do NOT ask in plain text.
|
|
|
21
21
|
|---|---|
|
|
22
22
|
| **description** | Specific and actionable. Not "implement NER" but "Create a custom ner.correct recipe with Ctrl+Enter keybinding for accept_best." |
|
|
23
23
|
| **context_summary** | 2-3 paragraphs condensing the conversation: what was discussed, decisions made, constraints, label schemes, data formats. |
|
|
24
|
+
| **plan_docs** | List of plan names the coding agent should read for project context. Use `project_plan_list` to see what exists, then pass only the plans relevant to this handoff (e.g. the overview plan plus the component plan the work targets). Leave empty if no plans exist yet. |
|
|
24
25
|
|
|
25
26
|
## Step 2: Create the request
|
|
26
27
|
|
|
@@ -29,7 +30,8 @@ Call the `todo_create` PAM tool — do NOT use Bash or ellf:
|
|
|
29
30
|
```
|
|
30
31
|
todo_create(
|
|
31
32
|
description="<description>",
|
|
32
|
-
context_summary="<context_summary>"
|
|
33
|
+
context_summary="<context_summary>",
|
|
34
|
+
plan_docs=["project_plan", ...]
|
|
33
35
|
)
|
|
34
36
|
```
|
|
35
37
|
|
{ellf_cli-5.0.7 → ellf_cli-5.0.9}/ellf_cli/ellf_skills/skills/ellf-monitor.assistant/SKILL.md
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ellf-monitor
|
|
3
|
-
description: "
|
|
3
|
+
description: "Monitors cluster jobs, annotation activity, training progress, and cluster health — produces structured summaries instead of raw log dumps. Includes alert classification (overfitting, plateau, NaN loss, spikes), annotation metrics, and diagnostic routing. Use proactively after launching any job, not just when the user asks. Also trigger on status checks, log inspection, 'how's the task doing', 'what failed', or training metric questions."
|
|
4
4
|
argument-hint: "[job name, job type, or 'cluster']"
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -29,8 +29,8 @@ If an action is needed:
|
|
|
29
29
|
## Tool surface
|
|
30
30
|
|
|
31
31
|
Use:
|
|
32
|
-
- `
|
|
33
|
-
- PAM read/list tools when you need persisted object details such as task, action, or agent identity
|
|
32
|
+
- The named cluster tools — `job_status`, `job_logs`, `job_errors`, `cluster_status`, `nodes_list`, `worker_types_list`, `dataset_example_count`, `dataset_session_counts` — for runtime state. No free-form proxy; each tool has a typed schema.
|
|
33
|
+
- PAM read/list tools when you need persisted object details such as task, action, or agent identity.
|
|
34
34
|
|
|
35
35
|
Do not guess cluster state. Always check.
|
|
36
36
|
|
|
@@ -44,7 +44,7 @@ Before monitoring, determine what to monitor.
|
|
|
44
44
|
|
|
45
45
|
Use:
|
|
46
46
|
```text
|
|
47
|
-
|
|
47
|
+
mcp__cluster__job_status()
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
If there are multiple plausible jobs, use `AskUserQuestion` to let the user choose.
|
|
@@ -56,11 +56,11 @@ If there are multiple plausible jobs, use `AskUserQuestion` to let the user choo
|
|
|
56
56
|
Read:
|
|
57
57
|
- `${CLAUDE_SKILL_DIR}/references/training_monitoring.md`
|
|
58
58
|
- `${CLAUDE_SKILL_DIR}/../ellf-train/references/training_troubleshooting.md`
|
|
59
|
-
Use
|
|
59
|
+
Use cluster calls such as:
|
|
60
60
|
```text
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
mcp__cluster__job_status(id="<id>")
|
|
62
|
+
mcp__cluster__job_logs(id="<id>", tail_lines=100)
|
|
63
|
+
mcp__cluster__job_errors(id="<id>")
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
Your job is to:
|
|
@@ -75,19 +75,29 @@ If follow-up action is needed, route to `/ellf-ops` or `/ellf-handoff`.
|
|
|
75
75
|
|
|
76
76
|
### Annotation tasks
|
|
77
77
|
|
|
78
|
-
Use
|
|
78
|
+
Use cluster calls for job status and per-dataset counts; use PAM for dataset
|
|
79
|
+
discovery:
|
|
79
80
|
```text
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
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)
|
|
82
85
|
```
|
|
83
86
|
|
|
87
|
+
`dataset_list` is a PAM read (org-wide registry), while the count tools talk to
|
|
88
|
+
the broker because example counts live in the per-cluster Prodigy database.
|
|
89
|
+
All three are read-only and do not require user confirmation. They do not
|
|
90
|
+
read annotation contents — only counts and metadata.
|
|
91
|
+
|
|
84
92
|
Read when needed:
|
|
85
93
|
- `${CLAUDE_SKILL_DIR}/references/annotation_metrics.md`
|
|
86
94
|
|
|
87
95
|
Report:
|
|
88
96
|
- task state
|
|
89
97
|
- whether the task appears reachable and healthy
|
|
90
|
-
- annotation count
|
|
98
|
+
- annotation count (from `dataset_example_count`)
|
|
99
|
+
- per-annotator activity (from `dataset_session_counts`) when the user asks
|
|
100
|
+
who annotated what or about active annotators
|
|
91
101
|
- dataset growth
|
|
92
102
|
- whether agent assignment appears to be producing data if applicable
|
|
93
103
|
|
|
@@ -95,11 +105,11 @@ If useful, combine task status with task detail from PAM reads to confirm the da
|
|
|
95
105
|
|
|
96
106
|
### Agents
|
|
97
107
|
|
|
98
|
-
Use
|
|
108
|
+
Use cluster calls such as:
|
|
99
109
|
```text
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
mcp__cluster__job_status(id="<id>")
|
|
111
|
+
mcp__cluster__job_logs(id="<id>", tail_lines=50)
|
|
112
|
+
mcp__cluster__job_errors(id="<id>")
|
|
103
113
|
```
|
|
104
114
|
|
|
105
115
|
Report:
|
|
@@ -114,9 +124,9 @@ If the agent is failing repeatedly, recommend `/ellf-ops` for stop/restart or `/
|
|
|
114
124
|
|
|
115
125
|
For non-training actions:
|
|
116
126
|
```text
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
127
|
+
mcp__cluster__job_status(id="<id>")
|
|
128
|
+
mcp__cluster__job_logs(id="<id>", tail_lines=50)
|
|
129
|
+
mcp__cluster__job_errors(id="<id>")
|
|
120
130
|
```
|
|
121
131
|
|
|
122
132
|
Report:
|
|
@@ -129,9 +139,9 @@ Report:
|
|
|
129
139
|
|
|
130
140
|
When the user asks about the cluster itself, use:
|
|
131
141
|
```text
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
142
|
+
mcp__cluster__cluster_status()
|
|
143
|
+
mcp__cluster__nodes_list()
|
|
144
|
+
mcp__cluster__worker_types_list()
|
|
135
145
|
```
|
|
136
146
|
|
|
137
147
|
Report:
|
|
@@ -144,7 +154,7 @@ Report:
|
|
|
144
154
|
|
|
145
155
|
Use compact summaries and tables.
|
|
146
156
|
|
|
147
|
-
Never dump raw JSON or raw
|
|
157
|
+
Never dump raw JSON or raw cluster responses.
|
|
148
158
|
|
|
149
159
|
When presenting logs:
|
|
150
160
|
- summarize the important lines
|
|
@@ -173,3 +183,11 @@ When you finish, state:
|
|
|
173
183
|
- the most important evidence
|
|
174
184
|
- whether intervention is needed
|
|
175
185
|
- the next action, if any
|
|
186
|
+
|
|
187
|
+
## Reference files
|
|
188
|
+
|
|
189
|
+
| File | What it covers | When to read |
|
|
190
|
+
|------|---------------|--------------|
|
|
191
|
+
| `${CLAUDE_SKILL_DIR}/references/training_monitoring.md` | Training log interpretation, alert classification, metric extraction | Training actions |
|
|
192
|
+
| `${CLAUDE_SKILL_DIR}/references/annotation_metrics.md` | Annotation progress signals, dataset growth, annotator activity | Annotation tasks |
|
|
193
|
+
| `${CLAUDE_SKILL_DIR}/../ellf-train.assistant/references/diagnostics.md` | Six problem classes with detection signals and fix guidance | Diagnosing training issues |
|
|
@@ -4,10 +4,13 @@ Use this reference to interpret annotation activity and quality signals.
|
|
|
4
4
|
|
|
5
5
|
## What to watch
|
|
6
6
|
|
|
7
|
-
- Total annotation count
|
|
8
|
-
- Dataset growth over time
|
|
9
|
-
- Number of active annotators or agents
|
|
10
|
-
-
|
|
7
|
+
- Total annotation count — from `mcp__cluster__dataset_example_count`
|
|
8
|
+
- Dataset growth over time — compare counts across checks
|
|
9
|
+
- Number of active annotators or agents — from `mcp__cluster__dataset_session_counts`
|
|
10
|
+
(each non-null key is a session_id; `null` means examples written directly via
|
|
11
|
+
`db-in` rather than through an annotation session)
|
|
12
|
+
- Whether a running task is producing new examples — combine job status with
|
|
13
|
+
example count over time
|
|
11
14
|
|
|
12
15
|
## Warning signals
|
|
13
16
|
|
|
@@ -4,7 +4,7 @@ How to monitor training jobs from the web assistant and interpret their signals.
|
|
|
4
4
|
|
|
5
5
|
## What the web assistant can do
|
|
6
6
|
|
|
7
|
-
Use
|
|
7
|
+
Use cluster-backed status, logs, and errors to determine:
|
|
8
8
|
- whether the training action is running
|
|
9
9
|
- whether it completed or failed
|
|
10
10
|
- whether logs show loss, score, or alert-like signals
|