Skip to content

feat(skills): add nemo-analyst workflow - #1116

Draft
callingmedic911 wants to merge 2 commits into
mainfrom
aditya/ase-745-analyst-skill-b080
Draft

feat(skills): add nemo-analyst workflow#1116
callingmedic911 wants to merge 2 commits into
mainfrom
aditya/ase-745-analyst-skill-b080

Conversation

@callingmedic911

Copy link
Copy Markdown
Member

Summary

Adds the platform-bundled nemo-analyst skill (ASE-745), so coding agents have a reliable route to nemo agents analyst run plus the minimum correct operating knowledge to use it.

  • packages/nemo_platform_ext/src/nemo_platform_ext/skills/nemo-analyst/SKILL.md (160 lines)
  • packages/nemo_platform_ext/src/nemo_platform_ext/skills/nemo-analyst/tests.json (12 routing tests)

No code changes.

Deliberately lean

docs/agents/insight-driven-optimization.mdx already covers the data model, the Analyst's tool set, and the full loop in 638 lines, and ASE-758 will add a per-agent README on top of that. Rather than become a fourth surface restating the same ground, the skill covers only what an agent needs to execute correctly and links out for depth. It links the GitHub blob URL rather than the docs site, because that page is currently gated out of latest.yml and would 404.

Content is scoped to: the Insight shape, prerequisites, the doctor pre-flight, the run, where Insights are stored, a verification step, and the two ways an empty result happens.

Two things worth a reviewer's eye

Persistence reflects #1054, not the older behaviour. Insights now always go to the platform, and --insights-file-output mirrors what was stored with platform IDs included. There is no longer an implicit profile-based redirect to .nemo-optimizer/insights.yaml. Note that the troubleshooting section of insight-driven-optimization.mdx is still stale on this point (it says a discovered profile routes Insights to the file "instead of the Insights API"); left alone here as out of scope, but it should be corrected before that page is published.

The credential contract differs from the Experimentalist's and the skill says so explicitly, since anyone arriving from nemo-experimentalist will assume otherwise. The Analyst reads only INFERENCE_API_KEY and does not use the NEMO_EXPERIMENTALIST_MODELS_* tiers.

Validation

scripts/skill-test.py, measured against a baseline with nemo-analyst removed from the catalog:

baseline=54  with-analyst=54
NEW failures: 0
nemo-analyst own failures: NONE
prompts where nemo-analyst ties-or-beats another skill's owner: 0

The catalog has 54 pre-existing failures and a dozen skills with no tests.json; the bar here was adding none. The tie check matters because best_match sorts on score alone and Python's sort is stable, so an alphabetically early skill silently wins ties. An earlier draft of the description tied nemo-status, nemo-intake, and nemo-model-selection on generic words and stole their tests; the description was tightened to distinctive vocabulary until that reached zero.

All six analyst-intent prompts that previously scattered across nemo-explore, nemo-spec, nemo-experiments-upload, agents-secure, and skills-optimization now resolve to nemo-analyst:

OK  Analyze my agent's traces and tell me what it keeps getting wrong.  -> nemo-analyst
OK  Run the analyst to find failure patterns in recent telemetry.       -> nemo-analyst
OK  Why is my agent failing? Look at the traces and file insights.      -> nemo-analyst
OK  Find recurring problems in my agent from production traces.         -> nemo-analyst
OK  I want insights about my agent's failures from its spans and ...    -> nemo-analyst
OK  Analyze agent telemetry and record what the agent gets wrong.       -> nemo-analyst

scripts/skill-cli-lint.py --root . reports zero violations for this skill. Every nemo command in the body was checked against live --help; this caught one hallucination during authoring (nemo insights insights list does not exist), so verification now reads the Insights API directly. The 8 violations the linter does report are pre-existing in inference and nemo-customizer.

uv run --frozen pytest packages/nemo_platform_ext/tests/cli/commands/skills/test_skill_content.py -q
11 passed in 0.28s

nemo skills list and nemo skills show nemo-analyst both resolve it. pre-commit run --files <both files> passes and leaves them unmodified.

Notes

  • The skill installs as nemo-nemo-analyst. Every installer builds its path as f"nemo-{skill_name}" unconditionally, while skills-spec.mdx requires user-invocable skills to already be named nemo-*. That is a pre-existing installer defect affecting 12 skills, being reported separately; following the spec here is the correct call and working around it would not be.
  • nemo-skill-selection's hardcoded catalog table is not updated, matching feat(skills): add Experimentalist workflow #1088. If we want the router to know about the loop's skills, that is one change covering nemo-analyst and nemo-experimentalist together.
  • not-for names nemo-experimentalist, which lands in feat(skills): add Experimentalist workflow #1088. The reference is inert until then and the linter does not require the sibling to exist.
  • tests.json uses explicit/implicit/negative-control, matching nemo-explore and every other fixture in the repo. The spec doc's fourth contextual mode is skipped because the doc and skills-spec.mdx disagree with scripts/skill-test.py on whether it should fire.

Closes ASE-745.

Open in Web Open in Cursor 

@github-actions github-actions Bot added the feat label Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor
Suite Lines Covered Line Rate Branch Rate
Unit Tests 30781/39277 78.4% 62.8%
Integration Tests 18089/37229 48.6% 21.1%

cursoragent and others added 2 commits August 6, 2026 16:05
Add the platform-bundled nemo-analyst skill so coding agents have a
reliable route to `nemo agents analyst run` and the minimum correct
operating knowledge to use it.

The body stays lean and defers depth to
docs/agents/insight-driven-optimization.mdx rather than restating it.
It covers the Insight shape, the credential distinction from the
Experimentalist (the Analyst reads only INFERENCE_API_KEY), the doctor
pre-flight, the run, where Insights are stored, and a verification step.

Persistence is documented as it behaves after #1054: Insights always go
to the platform, and --insights-file-output mirrors what was stored.

Routing tests follow the explicit/implicit/negative-control convention
already used by nemo-explore. Verified that all six analyst-intent
prompts resolve to nemo-analyst, that the skill introduces no new
failures elsewhere in the catalog, and that it wins no ties by sort
order.

Signed-off-by: Cursor Agent <cursoragent@cursor.com>

Co-authored-by: Aditya Pandey <aditya@autospace.co>
Signed-off-by: Aditya Pandey <aditypandey@nvidia.com>
Drove the skill end to end in a container against a real LangGraph agent's
telemetry. It carried the workflow, so this sharpens what it left the driver
to work out rather than adding to it — net zero lines, paid for by cutting
redundancy from the storage and verify sections.

- `analyst doctor` takes no `--agent` flag, so it always reports a red
  profile line. Say that passing `--agent` makes that line noise instead of
  leaving the reader to reason past a red mark, or to write an
  `optimizer.yaml` it does not need.
- `agent_name` is carried on agent-level spans, not on their model and tool
  children, so the old "matches the `agent_name` on the spans" pointed at a
  query that undercounts.
- Every span came back `status=success` while the agent was badly broken, so
  state that the Analyst judges behavior rather than status or scores.
- Telemetry that captures only the shape of a run is a third cause of an
  empty result, alongside scoping and volume.

Signed-off-by: Aditya Pandey <aditypandey@nvidia.com>
@callingmedic911
callingmedic911 force-pushed the aditya/ase-745-analyst-skill-b080 branch from 519f9f1 to e463b0b Compare August 6, 2026 22:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants