Feat/skill management#24
Merged
Merged
Conversation
Bridge dsagt's skill system into agent-native discovery and add a searchable catalog of installable skills from external GitHub repos. Two tiers: - Catalog — external Agent-Skills repos (default: K-Dense scientific, 140+) cloned + indexed into per-source `skills_catalog__<slug>` KB collections. Searchable via search_skills, never loaded into the agent's context. - Installed — a chosen skill copied into <project>/skills/ and mirrored into .claude/skills/ for Claude Code's native discovery. Changes: - commands/skills_catalog.py: shallow-clone cache, recursive SKILL.md discovery, per-source indexing (idempotent re-sync via drop+rebuild), find/install. Known sources: scientific, anthropic, antigravity, composio. - MCP tools: install_skill + catalog-spanning search_skills (registry); add_skill_source / list_skill_sources (knowledge). Added to auto-allow. - agents/base._mirror_skills_to + ClaudeSetup hook: manifest-gated mirror into .claude/skills/ (never clobbers user skills; reaps stale entries; trims >1536-char descriptions in the copy only). - Bundled skill-creator meta-skill (Anthropic template + condensed spec). - CLI: dsagt skills sync/add/list/search. - Config: skills block (sources/populate_native/populate_catalog), backfilled for old configs; setup-kb syncs the default catalog (--no-skill-catalog to skip); reserve .skill_sources; kb_from_config. - dsagt_instructions.md: two-tier guidance (native vs catalog/install). - use_cases/isaac_skills_demo: runnable mock of the isaac_vasp workflow exercising the full flow with tiny mock VASP data. Tests: test_skills_catalog.py + config/server-routing additions (201 passed, 13 skipped); black + ruff clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
First-pass vetting of use_cases/isaac_skills_demo against the real K-Dense catalog surfaced one bug: `dsagt skills add <proj> <source>` synced + indexed the catalog but never wrote the source into dsagt_config.yaml, so a later config-driven `dsagt skills sync` would forget it. Only the `add_skill_source` MCP tool persisted. - Move the persist logic into a shared `persist_source_to_config` helper in skills_catalog.py; call it from both the CLI add-source path and the knowledge-server `add_skill_source` handler (removes the duplicated `_persist_skill_source`). - Regression test for the helper (append + dedupe + missing-config no-op). - Add use_cases/isaac_skills_demo/PROMPTS.md: the 8-prompt hand-pass script plus first-pass results (init/mirror, 146-skill sync, search, install pymatgen, native re-mirror, add anthropic all verified). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The isaac_skills_demo rebuild path (rm + init) left the external catalog empty because a fresh `init` copies only the shared KB, while the catalog is project-scoped. The agent's search_skills then correctly returned no catalog hits. Add the required `dsagt skills sync` step to the rebuild block, a pre-launch catalog check, and a note on the global setup-kb alternative. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
An empty/unsynced external skill catalog was indistinguishable from a genuine no-match, forcing the agent through a multi-step discovery dance and a misleading "skill unusable until restart" message. - search_skills: when no catalog is synced, say so and point at list_skill_sources / add_skill_source instead of a bare no-match - list_skill_sources: flag each known source synced/available with its indexed count, rather than two parallel lists to cross-reference - install_skill: state the skill is usable this session immediately; restart only enables hands-free native auto-invocation - dsagt_instructions: document the catalog as opt-in and the list_skill_sources -> add_skill_source -> search_skills -> install flow Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Bump to 0.2.0 and make dsagt.__version__ the single source of truth — pyproject reads it via setuptools dynamic metadata, so future bumps touch one line. Add CHANGELOG (Keep a Changelog format). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- README/docs: document the non-developer install (pip install git+https://github.com/AI-ModCon/dsagt.git into any 3.12/3.13 env); note uv is dev/CI-only and conda/venv both work - de-duplicate the supported-agents table and install block via mkdocs-include-markdown so docs/index.md pulls them from the README - correct the Python prerequisite to 3.12/3.13 - cli.md: drop the uv-sync-specific install assumption - docs CI builds with the locked docs dependency group via uv Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…Catalog + keyword fallback
Collapse the two MCP servers (dsagt-registry-server + dsagt-knowledge-server)
into a single dsagt-server backed by one shared KnowledgeBase, and finish the
skills-discovery refactor from design-notes/genesis-skills-comparison.md §10 and
skills-catalog-server-merge.md.
Server merge
- New commands/dsagt_server.py: create_dsagt_server composes both modules'
(tools, handlers) under one Server("dsagt") with a type-dispatched call_tool
(registry str passthrough + knowledge dict->json + error wrap); one shared-KB
main() with the cross-backend guard living once in _build_kb_from_config.
- registry_server / knowledge_server keep create_*_server as thin test-facing
wrappers via extracted _registry_tools_and_handlers / _knowledge_tools_and_handlers;
their standalone main()s + entry points are removed.
- pyproject: dsagt-registry-server + dsagt-knowledge-server -> dsagt-server.
- Per-agent MCP config collapsed to one "dsagt" entry across claude/goose/codex/
cline/roo/opencode (+ base helpers, info.py span buckets).
- Compat is rebuild-not-migrate: re-run `dsagt start` to regenerate config
(README upgrade note + cline .cline-data caveat). No migration shims.
Skills discovery
- New SkillsCatalog (commands/skills_catalog.py) owns the catalog data plane
(sync/install/search/list_sources + ChromaDB-vs-keyword backend selection);
SkillRouter is now a thin render/MCP facade over it.
- New skill_keyword.py: Genesis-faithful token-overlap scorer (no-embedder
fallback). skill_discovery.py: stateless SkillRouter.
- Catalog-only search + frontmatter-only indexing; removed the dead
skills-collection indexing (SkillRegistry + setup_core_kb bundled skills).
- Struck the stale bundled datacard-generator skill (now via `dsagt skills add
<project> genesis`); skill-creator is the only bundled skill.
Docs/diagram
- Architecture figure: one MCP box spanning Knowledge + Registry, "Server"
dropped from both labels, Skills -> Skills Catalog; regenerated PNGs.
- README/docs/design-notes updated.
Tests: new test_dsagt_server.py + test_skill_discovery.py; config-shape, info,
and smoke-test assertions updated to the single-server shape. 338 passed /
13 skipped across affected suites; ruff + black clean on changed files.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…overy Bump to 0.3.0 (breaking: the registry/knowledge MCP servers merge into one dsagt-server; the old console scripts are removed). CHANGELOG documents the motivation and a rebuild-not-migrate upgrade note; README version refs bumped. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Add the skill-routing diagram (assets/skills-routing.png) to tools-skills.md with a "Skill discovery architecture" section motivating the two-tier (catalog vs native) split, catalog-only search, the keyword fallback, the single SkillRouter entry point, and per-source federation/provenance. - Sweep README + docs for the old two-server model: mcp-servers, architecture, cli, developer, quickstart, knowledge-base now describe one dsagt-server. - Fix stale skill-indexing language: bundled/installed skills are auto- discovered natively (not indexed); setup-kb rebuilds Tool Specs only; the KB collection tables list "Skills Catalog" (external, per-source) instead of a bundled "Skills" collection. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The README/docs documented `dsagt --version` but the CLI had no such flag (argparse errored). Wire it from dsagt.__version__ so it reports the release the docs claim. Found while vetting the isaac_skills_demo walkthrough. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…source name clashes When the same skill name exists in more than one synced source (the clone cache is machine-global, so this happens even across projects), the install guard now resolves a source-qualified '<slug>/<skill>' name instead of dead- ending. find_catalog_skill parses the '<slug>/' prefix and scopes the search; install_skill (MCP) and 'dsagt skills add' inherit it. The CLI 'add' routes a '<synced-slug>/<skill>' target to install (not a clone) and now prints a clean error instead of a traceback on an ambiguous bare name. The ambiguity message points at the qualified form, which actually works now. Found while vetting the isaac_skills_demo walkthrough. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…r 0.3.0 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…package; consolidate skill modules into skills.py The single dsagt-server now lives in src/dsagt/mcp/, composed from per-concern tool modules behind one dispatch shell: - mcp/server.py — composition, main(), shared build_dispatch_server + KB startup - mcp/registry_tools.py / knowledge_tools.py / memory_tools.py / skill_tools.py This replaces the registry_server / knowledge_server / dsagt_server trio and moves importable logic out of commands/ (which is for entry points). Entry point repointed to dsagt.mcp.server:main; agents are unchanged (same `dsagt-server`). Skill discovery is consolidated into one module src/dsagt/skills.py — the catalog data plane (SkillsCatalog), the SkillRouter render facade, and the Genesis-derived keyword scorer (was skill_keyword + skill_discovery + commands/skills_catalog). install_skill now returns a terse confirmation (the install→use→restart model already lives in the agent instructions). Remove dead src/session.py. Migrate tests to the new layout (new test_memory_tools / test_skill_tools; server-startup reworked to fast, network-free entry-point checks; memory + kb_search tests rehomed). Update CLAUDE.md and docs/mcp-servers.md to the merged-server / four-concern shape. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ntmatter Third-party catalogs (e.g. Genesis) ship SKILL.md files whose unquoted `description` contains a colon (`…readiness levels: Level 1…`), which strict YAML rejects — so _parse_frontmatter raised and the skill was silently dropped from indexing, search, and install. Genesis's `generating-datacards` (datacard-generator) was one such casualty. _parse_frontmatter now falls back to a lenient flat key:value parse on YAML error, recovering name/description/tags. dsagt-authored specs are valid YAML, so the fallback never fires for them. Adds TestLenientFrontmatter. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Consolidate the branch into one 0.2.0 release: a single CHANGELOG entry (external skill catalogs incl. the Genesis integration, native discovery, catalog-only search + keyword fallback, license/PROVENANCE capture, server merge) replacing the interim 0.2.0/0.3.0 entries; version set to 0.2.0 (one minor bump from master's 0.1.0). README/architecture diagram refreshed. Add two skill-management use cases: - isaac_skills_demo — agent-led arc (what we have → find more → sync → install → create) that authors a vasp-to-isaac converter parsing with real pymatgen. - genesis_skills — pull Genesis curation skills, ingest domain into the KB, and generate a datacard for a finished dataset. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Recover observability and episodic memory without the LiteLLM proxy, by reading each agent's own on-disk session transcript instead of intercepting LLM traffic — no proxy, no credentials, serverless trace store. Trace pipeline (Phase 2), all in one src/dsagt/traces.py: - `Trace` — the canonical session form as nested dicts (a list of span dicts + compose/query/to_exchanges methods; the span/message/block shapes have a single home in Trace's add_* methods). - `Reader`/`Translator` ABCs with one subclass per agent (claude/codex/goose/ opencode/cline); codex/goose/opencode/cline share the Translator turn- template, claude is bespoke, claude+codex share JsonlReader. - `TraceCollector` — the in-session heartbeat: read → translate → hand the Trace to its consumers, each with its own ack set for idempotency. - `MLflowSink` (observability) consumes Trace + dict spans directly. Episodic memory (Phase 3, opt-in via `dsagt init --episodic`): - `memory.MemoryExtractor` — a TraceCollector consumer: Tier-0 mechanical chunk+tag+embed always; Tier-1 distillation via `judge.LocalJudge` (Qwen2.5-1.5B GGUF, GBNF-grammar JSON), degrading to Tier-0 on failure. - Recency-weighted retrieval over session_memory (episodic.recency_half_life_days). - `judge.py` — Judge.create → LocalJudge (default) / APIJudge; llama-cpp-python added to core, pinned to an integrity-verified CPU wheel. Tool-use indexing: - `provenance.ToolUseIndexer` — incremental, idempotent embedding of dsagt-run records into the tool_use collection on the heartbeat + before reconstruct_pipeline (fixes the prior re-index-everything duplicate bug). Removed: the LiteLLM proxy (commands/proxy_server.py, test_proxy_callback, proxy_walkthrough) and the roo agent. Docs (README, docs/ site, CHANGELOG) updated to the post-proxy, serverless, episodic-enabled reality. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…r MCP Reserve "tool"/"tools" for the MCP + agent sense; registered CLI executables the agent runs via dsagt-run are now "codes" throughout. - Registry: <project>/tools/ → codes/ (+ codes/scripts/), ToolRegistry → CodeRegistry, save_tool_spec → save_code_spec, search_registry takes code_name, dsagt-run --tool → --code, list_tools/get_tool → list_codes/get_code. - Collections/spans: tools → codes, tool_use → code_use, tool.execute → code.execute; provenance/registry metadata tool_name → code_name. Kept tool_name for session_memory (agent tool calls); kb_search now accepts both code_name and tool_name. - src/dsagt/tools/ → src/dsagt/codes/, run_tool.py → run_code.py (+ package-data, dsagt-run entry point, bundled scan_directory). - Agent instructions, CLAUDE.md, README, and all docs updated to the convention. Kept the Anthropic tool_use block type and the MCP SDK @server.list_tools() decorator (both the reserved sense). Docs also: fixed staleness (dropped Roo, the removed mlflow-autolog hook, the removed LLM judge), trimmed implementation-detail TMI and negative framing, simplified jargon (provisioning → setup, dropped "layer"). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…nit` - Restructure the docs into one page per capability, each ending with a hands-on "Try it" walkthrough and a pointer to the use cases: provenance (code registry + dsagt-run + reconstruction), knowledge-base (domain-knowledge cataloging + hybrid vector search + shared-store note), skills, memory, observability. Split the old codes-&-skills page, move memory + execution-record content out of knowledge-base, and regroup the mkdocs nav under a "Capabilities" section. - Docs now lead with the interactive `dsagt init` menu; every walkthrough uses bare `dsagt init` + `dsagt start`. The pre-menu flags (positional name, --agent, --location, --include/--exclude, --episodic) are documented as deprecated backcompat only in the CLI reference and README. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # README.md # pyproject.toml
The handler now always forwards where_document (the regex/contains document-content filter) to kb.search; the three call-signature assertions predated that argument. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…flow deprecation - http_request was the only MCP tool with no handler-level test; add success/method-forwarding/transport-error cases with a mocked httpx.AsyncClient. - test_running_job held its worker in 'running' with a real time.sleep(10) that asyncio.run joined at loop shutdown; gate on a threading.Event released once the test observes the running state. - test_install_skill_routes_and_reports_missing built a real local-embedding KnowledgeBase it never used (the install path builds its own SkillRouter) and scanned the machine-global skill_sources cache; use a mock KB and point SKILL_SOURCES_DIR at a tmp dir. - mlflow.search_traces(experiment_ids=...) is deprecated in favor of locations= (FutureWarning under mlflow 3.11); switch the five call sites. Suite: 621 passed, 0 warnings, ~31s (was ~56s). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- dsagt init hard-failed for cline without ANTHROPIC_API_KEY / ANTHROPIC_MODEL in the shell — a batch-mode-era requirement, though cline batch is unconditionally unsupported. Worse, running `cline auth -p anthropic` from scavenged env vars can clobber an existing provider integration (e.g. an OpenAI subscription login). BYOA: the user configures cline before pointing dsagt at it; dsagt writes only the MCP config. credential_env_vars/hints dropped. - cline 3.x moved --config to a global option (must precede the subcommand) and made `mcp add` open an interactive wizard without --yes; both fixed (probe-verified against cline 3.0.34). Verified: credential-less `dsagt init --agent cline` completes — instructions written, MCP server registered + env-patched, 2 skills mirrored natively. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ctions agent-card.md described the pre-0.2.0 architecture (two MCP servers, LiteLLM proxy, OTel/OTLP, setup-kb/mlflow/memory/stop commands, Roo Code, dsagt_config.yaml, faiss). Rewritten in the same card format: single dsagt-server with all 20 tools enumerated by concern, serverless sqlite MLflow store, BYOA auth, transcript trace pipeline, codes as skill-standard dirs with native mirroring, current agents/deps/CLI, and a skill_discovery capability replacing the no-longer-bundled datacard-generator. dsagt_instructions.md fixes: the 'scientific' skill source doesn't exist (→ k-dense-ai); codes/scripts/ → codes/<name>/scripts/; code-name charset rule beside the save_code_spec guidance; and a note that registered codes appear among native skills, whose SKILL.md opens with the exact command — same verbatim-executable rule as section 1b. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…l hint machinery
Extends the cline decision to every agent: the user configures and
authenticates their agent (shell env vars, subscription logins) BEFORE
pointing dsagt at it. dsagt neither hints, warns, nor troubleshoots.
Removed: credential_env_vars / credential_hints class vars on all five
setups, byoa_env_hints(), and the launch-time 'agent will use
preconfigured env vars' transparency note (+ their 18 tests).
Kept (functional, not troubleshooting): opencode's {env:VAR} provider
interpolation in opencode.json, codex's auth.json propagation into the
per-project CODEX_HOME, and batch-mode requirements that genuinely need
an env value (OPENCODE_MODEL for opencode run -m).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
python -m execution is the only machine-independent executable for package-shipped code, and module paths can't contain the hyphen the skill-standard dir name requires — so bundled implementation modules sit beside their spec dirs, unlike project codes whose scripts are self-contained in codes/<name>/scripts/. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…l whitelist Re-verified against cline 3.0.34: batch runs fine (act mode, subscription auth honored), but the headless CLI session path never loads MCP servers — a probe session with a registered dsagt entry exposed zero MCP tools. Also verified: cline auth state rides with its config dir, so ANY per-project --config/CLINE_DIR isolation loses a subscription login; subscription users need a single global MCP entry (the server is cwd-self-sufficient). run_script error + smoke SKIP updated to the current rationale; re-probe on cline upgrades. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…never bridge Deeper probes (spawn watcher, MCP-child cwd/env probe, tool-inventory enumeration): headless cline spawns registered MCP servers with cwd = session dir and full shell env, and dsagt-server answers the initialize handshake in ~1.6s — but the session's model toolset contains only cline built-ins + team tools, zero MCP entries. Also pinpointed the auth coupling: providers.json (subscription/OAuth creds) lives inside the settings dir, which is why any --config isolation goes Unauthorized. A global MCP entry is not viable either: it makes every cline session everywhere spawn dsagt-server. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…e, one format Parity: every available code — bundled or agent-registered — now lives in <project>/codes/<name>/ as a self-contained skill-standard dir. ensure_bundled_copies() runs at dsagt init (never clobbers an existing dir; re-init after upgrade refreshes untouched copies). This dissolves the bundled/project two-layer merge in CodeRegistry (single glob, no source_tools_dir seam) and the scan_directory.py placement asymmetry: the script moves inside scan-directory/scripts/ and the executable becomes an ordinary project-relative path instead of python -m. reindex_all removed (no production caller). Verified: claude smoke 18/18 with scan-directory executing via the project-relative path. Unit suite: 607 passed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bal auth + settings untouched Cline 3.x resolves its MCP settings file and providers.json (auth) through INDEPENDENT env overrides. Setting CLINE_MCP_SETTINGS_PATH to <project>/.cline-data/cline_mcp_settings.json in runtime_env gives all three at once (verified live): per-project dsagt server spawns, the user's subscription/codex auth keeps working, and the global mcpServers list stays empty. write_dynamic now hand-writes that file directly (the 'only cline mcp add is loaded' behavior is gone in 3.x; verified a hand-written file loads) with the env block in transport.env — no cline binary needed at init, no add+patch dance, preserves user-added entries. The auth-clobbering CLINE_DIR runtime isolation is dropped. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Non-invasive correctness pass across the use-case walkthroughs (comb-flow-uni left untouched by request). Each demo gets an 'Estimated time' header with an honest runtime + data/credential gate. Uniform staleness fixed: - tool→code terminology; save_tool_spec→save_code_spec; tools/<x>.md→ codes/<x>/SKILL.md (registry is skill-standard dirs now). - removed commands dropped: dsagt mlflow / dsagt stop / dsagt setup-kb / dsagt skills — replaced with the current init/start/info surface or the MCP-tool equivalents. - serverless observability: deleted the tokamak OTEL_* export block and 'dsagt mlflow' server start; point at sqlite:///<project>/mlflow.db and the 'mlflow ui --backend-store-uri' view. - BYOA: dropped 'set your API keys in dsagt_config.yaml' edits; agents are pre-authenticated. Config path corrected to .dsagt/config.yaml. - isaac_skills_demo: 'scientific' skill source → 'k-dense-ai' (the real KNOWN_SOURCES alias); setup uses 'dsagt init --exclude genesis'. Per-folder: - isaac_vasp: rewrote the 12-line stub into a real ~15-min walkthrough that registers the bundled NEB converter as a code and runs it via dsagt-run on the vendored fixture data; fixed a dangling script ref (ase_slab_db_to_isaac → ase_db_to_isaac) in the skill. - tokamak_stability: README + AGENTS.md + m3dc1-skill swept (filenames like m3dc1_tools.py preserved). - .gitignore: guard mlflow.db + mlruns/ so session trace dumps never land in git again. Deferred (flagged, not done): externalizing isaac_vasp's 32 MB OUTCAR fixtures — the pymatgen source path 404s and I couldn't verify a fetch URL without risking a broken demo. comb-flow-uni left entirely as-is. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
A 12-line plan outline fully superseded by isolate_demo.md (same walkthrough, more detail). Referenced nowhere in README/docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… transcript - docs/use-cases/*: 'tool registration' → 'code registration' (index synced with README), '**Tools:**' header labels → '**Codes:**', and the vasp/cryoem overviews reworded (registers codes, not tools; ISAAC record not database). - Removed use_cases/microbial_isolates/isolate_session.txt — a personal scratch transcript with hardcoded paths and the dead two-server launch commands, referenced nowhere; same class as the demoplan.md already removed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
csvkit was dropped as a dependency, but the README/docs quickstart still told users to register csvkit codes (csvcut/csvstat/...) — following it failed at that step. Replace with a bundled, stdlib-only fixture (tests/smoke_test/csv_summary.py: csv + statistics, no install) that the agent registers and runs on samples.csv — the same self-contained pattern the smoke test uses for greet.py. Its null-count output surfaces the empty status/timestamp cells, which is the exact fact the quickstart's explicit-memory step stores and recalls (previously asserted out of nowhere). - README.md + docs/quickstart.md: steps 2 & 4 + capability tables. - docs/provenance.md: the worked example spec and 'Try it' flow, and the example frontmatter updated to the current executable/parameters shape. - tests/test_csv_summary_fixture.py: deterministic guard on the fixture's columns / null-columns / numeric-stats so it can't drift from the docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
MCP-server traces had two hygiene problems (analyzed from a real store): 1. Orphaned background spans. The dispatch shell tags each tool-call root dsagt.source=<category>, but off-thread work (the heartbeat's CodeUseIndexer, the startup catch-up) ran outside any trace, so its kb.add_entries/kb.embed opened as untagged top-level traces — landing in the 'unknown' bucket and detached from the executions they index. Fix: CodeUseIndexer.tick_traced() wraps indexing in a dsagt.source=code_use root on the worker thread; heartbeat + startup catch-up use it (raw tick() stays for reconstruct_pipeline, which already runs under a registry root). 2. Episodic noise. Per-turn memory.extract shared dsagt.source=memory with the user-facing kb_remember/kb_get_memories. Retagged dsagt.source=episodic so internal embedding filters apart. dsagt info: recognizes episodic/code_use; adds an Agent turns vs Internal/debug headline split (unknown counts as internal, not agent). New: dsagt traces <project> — a frictionless MLflow viewer. Runs catch-up first (flushes the deferred last turn an ungraceful exit leaves unlogged), deep-links to the experiment's Traces tab (DSAGT writes traces not runs, so the default Runs view looks empty), and launches foreground + quiet (--workers 1, PYTHONWARNINGS=ignore) — no managed daemon, so the store stays serverless and there's no dsagt stop to add. Verified end-to-end: a fresh smoke run's store has 0 untagged orphans (was 2) with code_use + episodic present and every trace attributable. Suite: 617 passed (+9). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…start messaging install_skill / save_skill / save_code_spec now run the same idempotent native-skills mirror that init/start run (agents.refresh_native_skills), so .claude/skills/ is current the moment the files land — the next session auto-discovers them however the agent is launched, with no dependency on `dsagt start` (whose mirror remains as a backstop for hand-dropped skill dirs). Reword every message the agent takes its framing from (tool descriptions, dsagt_instructions.md, skill-creator's confirm step) to present installs as complete and immediately usable — the agent reads the SKILL.md this session (all native invocation does) and must not tell the user a restart is needed. Mid-session native *listing* remains agent-side behavior (platforms enumerate skills at session startup). Also drops a stale "no API key" clause from the README embedder line. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Setup → prompt dialogue → post-conditions: the mid-walkthrough shell checks move to one consolidated post-conditions block, so the user isn't bouncing to a terminal after every step. The two catalog searches merge into one conjoined prompt (verified against the live Genesis catalog: the keyword scorer ranks croissant-validator #1 and generating-datacards #3 of 74, so both surface from a single search). Design-history rationale and over-explaining parentheticals removed. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The word people reach for when they want the MLflow viewer. Rewritten pre-parse (only the command slot — a project named "mlflow" is untouched) so argparse and --help only ever know `traces`; deliberately absent from the docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Condense [Unreleased] to under a page: keep the trace-pipeline / episodic entries (terminology fixed to code_use / code.execute, which the tools→codes rename missed here), add the work since — dsagt traces, dsagt.source span tagging, the codes rename, skill-envelope codes, install-time native mirroring, pre-authenticated agents, cline/codex fixes, docs restructure, new use cases. Dropped the stale 23→21 tool count. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…older The "Try it" ingest prompt referenced a knowledge/ folder nothing creates; point it at <your-docs-folder> with a lead-in saying what to substitute. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Restrict the two scientific KB collections to their docs/ tree (plus the top-level packaging metadata clone_github already keeps, and AIDRIN's arxiv papers). Vector retrieval is a poor substitute for the agent's native file search over code, and dropping the source trees speeds first-run ingestion. Also point NeMo-Curator at its canonical URL (NVIDIA-NeMo/Curator). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Move default_input_modes/default_output_modes/skills (and authentication) under agent_card where they belong — they were orphaned under the authentication key, so any A2A parser would misattach the skills catalog. Also bump the test count (~640), drop deprecated init flags from the quickstart snippet in favor of interactive `dsagt init`, and reword the intended-use sentence. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Add a MkDocs hook (hooks/gen_use_cases.py) that scans use_cases/<name>/README.md frontmatter at build time and generates the overview table, one docs page per use case, and the nav entries — so adding a use case is just dropping a README.md with title/domain/summary. Folders without frontmatter are silently excluded, so early-stage drafts are left untouched. - register the hook in mkdocs.yml; collapse the Use Cases nav to Overview - replace the hand-written index table with the USE_CASES_TABLE marker; remove the five hand-written pages (now generated) - seed minimal frontmatter into the five published use cases (prepend-only) - split use_cases/aidrin_readiness/ into aidrin_readiness_gate/ + aidrin_full_tour/ so each tour gets its own page; fix the cross-links - README: replace the use-case table with a blurb + link to the docs page - surface `dsagt traces` in the README CLI table and architecture doc - fix a stale 0.2.0 claim: the datacard-generator skill is a genesis catalog skill, not bundled Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ints torch 2.2.2 (latest for darwin/x86_64) is built against NumPy 1.x and fails to import under 2.x. Move the cap from [tool.uv] constraint-dependencies — which pip ignores, leaving the documented `pip install` path unprotected on Intel Mac — into platform-marker entries in [project.dependencies] that both pip and uv honor. Mutually exclusive/exhaustive markers leave every other platform (arm64 macOS, Linux, Windows) uncapped; uv resolution is unchanged (numpy still 1.26.4 universally, same as before). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…de-jargon - Share four blocks from README into the docs site via include-markdown (CLI table, project tree, quickstart prompts + capabilities table) so the docs can't drift stale; fix the already-stale docs/cli.md table. - Rename the external skill set "catalog"→"corpus" and the native set to "installed skills" across README + docs + the skills-routing figure; regenerate the figure and drop its DISCOVERY/REGISTRATION/EXPOSURE bands. - Refresh docs/mcp-servers.md to the full, accurate 20-tool surface. - Add cross-page links between capability docs; add an episodic-memory example to memory.md; correct the provenance "no record" overstatement. - Replace code-jock wording: "ships"→"provides", "bundled"→"built-in", and anthropomorphic "lives in"→"located in". Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…stalls) Breaking/security: - cli: `dsagt init` on an existing project crashed with KeyError — the destructive-change path read an `embedding` settings key the init menu no longer produces; the dead check is removed. + re-init regression test. - skills: `install_skill` accepted an untrusted catalog `name` verbatim, so a `..`/absolute/nested value escaped `<project>/skills/` and let rmtree+copytree hit arbitrary paths. Require a single safe path component. + test. - mcp/server: an `api` embedding misconfig aborted startup and dropped all 20 tools; fall back to kb=None so non-KB tools survive. - provenance: a code run outside a session wrote session_id: null, which ChromaDB rejects, poisoning the code_use batch every heartbeat. Coerce to "unknown". + test. Robustness (one malformed item no longer stalls a whole pipeline): - traces: per-line guard in JsonlReader.read; guard CodexReader rollout parse; isinstance guard on OpenCode time_created; _save_acks moved inside the per-consumer try to prevent duplicate re-emits. - provenance: guard record parse in index_archive (skip-and-continue, matching the sibling missing-execution-layer skip); widen _load_acks to tolerate a corrupt ack file. - registry: _parse_frontmatter always returns a dict (a scalar body used to leak a str and AttributeError downstream); list_codes tolerates a spec with no description. + non-dict frontmatter test. - skills: sync_source removes the empty dir on clone failure so a later sync retries; tag filtering matches comma tokens, not substrings. + _has_tag test. - goose: owned_artifacts lists goose.yaml so switching agents doesn't orphan it. Responsiveness: - registry_tools: run_command, dependency installs, registry search, and pipeline reconstruction run via asyncio.to_thread, off the shared event loop. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- session: delete the uncalled `_embedding_provider` (read a removed `embedding.provider` key); rename `tool_use`* to `code_use`* in `catch_up_extraction` (docstring, local var, return key) to match the actual collection — no external consumer of the return key. - agents/__init__: drop the `config["session_id"]` env branch that never fires (the MCP server mints the session from state.yaml). - fix stale references to the deleted `session.run_extraction` (provenance.py comment, smoke_test/run.sh) and the phantom `new_session_id` in CLAUDE.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0.2.0 was never tagged, so this whole cycle ships as 0.2.0 (not 0.3.0): external skill catalogs + single dsagt-server, the proxy-free trace pipeline and opt-in episodic memory, the tools→codes rename, immediate native discovery, and the code-review fixes. Consolidate the two changelog sections into one [0.2.0] entry (dropping naming/doc-only churn as noise); keep __version__ at 0.2.0 so a `pip install git+…` reports 0.2.0 via setuptools dynamic metadata; align the README pin and changelog compare links to the tag convention (no `v` prefix, matching the existing 0.1.0 / 0.0.1 tags). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
aarontuor
force-pushed
the
feat/skill-management
branch
from
July 8, 2026 19:57
80af146 to
a7833a8
Compare
RAVarikoti
approved these changes
Jul 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Skills discovery feature and better skills management relying on agent native skills usage. Merged mcp servers to deal with communication between two servers issue. Updated use cases and docs.