Tasks: Integrated Skills β Single Source, Chat, Hubs, Gateway, Visibility, Scanner
Input: Design documents from docs/docs/specs/097-skills-middleware-integration/
Prerequisites: plan.md, spec.md, research.md, data-model.md, contracts/ (including gateway-api.md, skill-scanner-pipeline.md, catalog-api.md, supervisor-skills-status.md)
Tests: Required for Phases 8β14 (Constitution VII): T062βT064 must be implemented with the corresponding code; earlier phases (1β7) remain as delivered.
Organization: Phases 1β16 are complete ([X]), including Phases 8β13 (2026-03-24 spec), Phase 14 (T062βT064), Phase 15 (T065βT066), and Phase 16 (T067βT070: FR-025, FR-026, FR-023 attribution). Phase 17 (T071βT076: FR-027 scanner on agent-skills save) is complete.
Format: [ID] [P?] [Story] Descriptionβ
- [P]: Can run in parallel (different files, no blocking dependency)
- [Story]:
[US1]β¦[US4]for user-story phases only - Every description includes at least one concrete file path
Path Conventionsβ
- Backend:
ai_platform_engineering/skills_middleware/,ai_platform_engineering/multi_agents/platform_engineer/ - UI:
ui/src/app/api/,ui/src/components/chat/,ui/src/components/skills/,ui/src/components/admin/,ui/src/lib/
Phase 1: Setup (Shared Infrastructure)β
Purpose: Package layout, MongoDB hub collection, env documentation.
- T001 Create
skills_middlewarepackage layout:ai_platform_engineering/skills_middleware/__init__.py,catalog.py, loaders package per plan - T002 [P] Add or document MongoDB
skill_hubscollection and indexes (uniqueid,enabled,type) in deployment docs or Mongo bootstrap - T003 [P] Document env vars for skills (
SKILLS_DIR, OIDC for catalog, GitHub tokens) inui/env.exampleand/or repoenv.example
Phase 2: Foundational (Blocking Prerequisites)β
Purpose: Merged catalog, precedence, GET skills + JWT, supervisor + SkillsMiddleware for A2A (deep_agent.py). Blocks all user stories.
β οΈ CRITICAL: Complete before User Stories 1β3.
- T004 [P] Implement default loader (both agentskills.io and OpenClaw-style SKILL.md per FR-011) in
ai_platform_engineering/skills_middleware/loaders/default.py - T005 [P] Implement agent_skills loader in
ai_platform_engineering/skills_middleware/loaders/agent_skill.py - T006 Implement precedence merge (default > agent_skills > hub; hub order) in
ai_platform_engineering/skills_middleware/precedence.py - T007 Implement
get_merged_skills(include_content: bool = False)and TTL cache +invalidate_skills_cache()inai_platform_engineering/skills_middleware/catalog.py - T008 [P] Implement
build_skills_files/ backend sync so normalized skills land inStateBackendpaths forSkillsMiddleware(seeai_platform_engineering/skills_middleware/anddeep_agent.pyusage) - T009 Expose
GET /skillswith pagination/meta and FR-014 JWT validation inai_platform_engineering/skills_middleware/router.pyand mount inai_platform_engineering/multi_agents/platform_engineer/protocol_bindings/fastapi/main.py - T010 Implement
POST /skills/refreshthat callsinvalidate_skills_cache()inai_platform_engineering/skills_middleware/router.py(extend in T031 to trigger MAS rebuild) - T011 Wire
AIPlatformEngineerMASinai_platform_engineering/multi_agents/platform_engineer/deep_agent.py:_build_graph()callsget_merged_skills, passesskills+ injectsfilesinto invoke state for upstreamSkillsMiddlewareviacreate_deep_agent(FR-015) - T012 Implement Next.js
GETproxy for catalog inui/src/app/api/skills/route.tspercontracts/catalog-api.md
Checkpoint: Catalog API + supervisor read same merged skills; graph builds at startup and on registry change.
Phase 3: User Story 1 β Single Source (Priority: P1) π― MVPβ
Goal: UI and assistant share one catalog; no run-skills / Run in Chat in chat.
Independent Test: Gallery list matches GET /api/skills; chat has no run-skills control.
- T013 [P] [US1] Drive skills gallery from unified catalog in
ui/src/components/skills/SkillsGallery.tsxand related pages underui/src/app/(app)/skills/ - T014 [P] [US1] Remove Run in Chat / run-skills actions from
ui/src/components/chat/ChatPanel.tsxandui/src/components/chat/DynamicAgentChatPanel.tsx - T015 [US1] Map 503 /
skills_unavailablefrom backend throughui/src/app/api/skills/route.tsfor gallery and chat consumers
Checkpoint: US1 independently testable.
Phase 4: User Story 2 β /skills in Chat (Priority: P1)β
Goal: Slash command lists skills in-chat; placeholder directs users to /skills (FR-002).
Independent Test: /skills shows list without A2A; normal messages unchanged; empty and error states per contract.
- T016 [US2] Detect
/skillson submit (trim, exact match) inui/src/components/chat/ChatPanel.tsx - T017 [US2] Fetch
GET /api/skillsand render in-chat list (no A2A send) inui/src/components/chat/ChatPanel.tsx - T018 [US2] Loading, 503, and empty-list copy per
docs/docs/specs/097-skills-middleware-integration/contracts/chat-command-skills.mdinui/src/components/chat/ChatPanel.tsx - T019 [US2] Add placeholder/tooltip βType /skillsβ¦β in
ui/src/components/chat/ChatPanel.tsx - T020 [US2] Mirror
/skillsbehavior inui/src/components/chat/DynamicAgentChatPanel.tsx(andui/src/components/chat/useSlashCommands.ts/SlashCommandMenu.tsxif used)
Checkpoint: US2 independently testable.
Phase 5: User Story 3 β GitHub Skill Hubs (Priority: P2)β
Goal: Register GitHub hubs; merge hub skills; partial failure + meta.unavailable_sources; admin UI; FR-012 refresh path (completed with T031).
Independent Test: Hub CRUD + catalog + /skills include hub skills; 403 for unauthorized; hub failure does not wipe catalog.
- T021 [P] [US3] GitHub hub fetcher in
ai_platform_engineering/skills_middleware/loaders/hub_github.py(FR-011 formats; ClawHub out of scope) - T022 [US3] Merge enabled hubs from MongoDB in
ai_platform_engineering/skills_middleware/catalog.pywith failure attribution formeta.unavailable_sources - T023 [US3]
GET/POSTskill-hubs inui/src/app/api/skill-hubs/route.tspercontracts/skill-hubs-api.md - T024 [P] [US3]
PATCH/DELETEskill-hub by id inui/src/app/api/skill-hubs/[id]/route.ts - T025 [US3] Admin / settings UI for hub list + add/remove in
ui/src/app/(app)/admin/page.tsxor dedicated route underui/src/app/(app)/ - T026 [US3] Optional UI βRefresh skillsβ calling refresh endpoint after hub save (wire to T031 when done)
Checkpoint: US3 independently testable (crawl preview completed in T034βT036).
Phase 6: Polish & Cross-Cuttingβ
Purpose: Docs, quickstart, integration coverage.
- T027 [P] Keep feature docs in
docs/docs/specs/097-skills-middleware-integration/aligned withspec.mdandplan.md - T028 Run scenarios 1β6 in
docs/docs/specs/097-skills-middleware-integration/quickstart.md - T029 [P] Catalog / hub integration or unit coverage under
integration/ortests/as appropriate - T030 [P] Extend
ui/src/lib/__tests__/api-middleware.test.tsfor skills and skill-hubs proxies as needed
Phase 7: Spec alignment β Supervisor refresh, status, hub crawl (2026-03-23)β
Purpose: Close FR-012/FR-016/FR-017 and contracts/supervisor-skills-status.md (refresh must update MAS snapshot; operators see load metadata; crawl before register).
- T031 After
invalidate_skills_cache()inai_platform_engineering/skills_middleware/router.py, triggerAIPlatformEngineerMAS._rebuild_graph()viaai_platform_engineering/skills_middleware/mas_registry.py; return optionalgraph_generation/skills_loaded_countin JSON response - T032 Record
self._skills_merged_at(UTC) andself._skills_loaded_countafter successful merge inai_platform_engineering/multi_agents/platform_engineer/deep_agent.py_build_graph() - T033 [P] Add authenticated
GET /internal/supervisor/skills-statusinai_platform_engineering/skills_middleware/router.pypercontracts/supervisor-skills-status.md - T034 [P] [US3] Implement
preview_github_hub_skills()inai_platform_engineering/skills_middleware/loaders/hub_github.pyandPOST /skill-hubs/crawlon the Python router - T035 [US3] Add
ui/src/app/api/skill-hubs/crawl/route.ts(proxy whenBACKEND_SKILLS_URLset; elseui/src/lib/hub-crawl.ts) - T036 [US3] Crawl preview in admin hub form (
Preview skills (crawl)) inui/src/components/admin/SkillHubsSection.tsx - T037 [P] Supervisor status UI in
ui/src/components/admin/SupervisorSkillsStatusSection.tsxon admin page - T038 [P] New routes use existing
withAuth/requireAdmin; noapi-middleware.tschange required - T039 Manual validation: quickstart scenarios 7β8 with
BACKEND_SKILLS_URL+ running supervisor
Checkpoint: SC-007 satisfied; crawl preview before hub save; no cache-only refresh without MAS update.
Phase 8: Foundational β Visibility, search, entitlement, prompt cap (2026-03-24)β
Purpose: FR-019, FR-020, FR-024; contracts/catalog-api.md and data-model.md. Blocks gateway consistency and supervisor entitlement alignment.
β οΈ CRITICAL: Complete before Phases 9β12 that rely on filtered catalog and bounded prompts.
- T040 Add
visibility,team_ids,owner_user_iddefaults on merged skills inai_platform_engineering/skills_middleware/catalog.pyand loadersai_platform_engineering/skills_middleware/loaders/default.py,agent_skill.py,hub_github.py - T041 Implement entitlement filter helpers (global / team / personal union) in new
ai_platform_engineering/skills_middleware/entitlement.py - T042 Resolve caller principal + team ids from JWT/userinfo and apply entitlement filter on
GET /skillsresponses inai_platform_engineering/skills_middleware/router.py(mirror validation behavior ofui/src/lib/jwt-validation.tsin Python: JWKS, issuer, claims, group claim β do not import TypeScript from Python) - T043 Implement
q,page,page_size,source,visibilityquery handling andmeta.totalinai_platform_engineering/skills_middleware/router.pyandai_platform_engineering/skills_middleware/catalog.py - T044 Enforce
MAX_SKILL_SUMMARIES_IN_PROMPT(env) when building skills forSkillsMiddlewareinai_platform_engineering/multi_agents/platform_engineer/deep_agent.pyper FR-024 - T045 [P] Document
MAX_SKILL_SUMMARIES_IN_PROMPT,SKILL_SCANNER_GATE(warn|strict),SKILL_SCANNER_POLICY,SKILL_SCANNER_FAIL_ON,catalog_api_keys,skill_scan_findings, andSKILLS_DIRfor packaged scans inui/env.example,docs/docs/specs/097-skills-middleware-integration/data-model.md, anddocs/docs/specs/097-skills-middleware-integration/contracts/skill-scanner-pipeline.md - T046 Implement Mongo-backed catalog API key store (hash-only secrets) in
ai_platform_engineering/skills_middleware/api_keys_store.pyperdata-model.md
Checkpoint: Entitled catalog list matches spec; large catalogs paginate; supervisor prompt bounded.
Phase 9: User Story 1 β Source UX & hub discoverability (Priority: P1)β
Goal: FR-021, FR-022 β distinguish default vs agent_skills vs hub; visible path to Admin β Skill Hubs.
Independent Test: User recognizes skill origin; empty state or banner links to skill hub onboarding without hunting admin.
- T047 [P] [US1] Add source labels, grouping, or filters for
default/agent_skills/hubinui/src/components/skills/SkillsGallery.tsxandui/src/components/skills/SkillsBuilderEditor.tsx(keep wording consistent with spec FR-021) - T048 [US1] Add hub onboarding CTA and empty-state copy linking to
ui/src/app/(app)/admin/page.tsx(Skill Hubs) fromui/src/components/skills/SkillsGallery.tsxorui/src/app/(app)/skills/page.tsx
Checkpoint: US1 UX extended; independently verifiable in UI.
Phase 10: User Story 2 β /skills parity with catalog API (Priority: P1)β
Goal: FR-004, FR-019 β chat command sees same entitled data shape as UI; optional first-page list; empty search message.
Independent Test: /skills list matches first page of GET /api/skills for the same user; no skills shows friendly empty copy.
- T049 [US2] Align
/skillsfetch with entitled catalog + pagination defaults and empty-search messaging inui/src/components/chat/ChatPanel.tsxandui/src/components/chat/DynamicAgentChatPanel.tsx
Checkpoint: US2 still independently testable with stricter parity.
Phase 11: User Story 4 β Try skills gateway (Priority: P1)β
Goal: FR-018, SC-008 β UI docs, Okta JWT + API key auth to catalog, Claude/Cursor steps per contracts/gateway-api.md.
Independent Test: Developer uses only in-product gateway text to run authenticated curl with search.
- T050 [US4] Add mint/list/revoke catalog API key HTTP handlers in
ai_platform_engineering/skills_middleware/router.pyusingai_platform_engineering/skills_middleware/api_keys_store.py - T051 [P] [US4] Add Next.js admin proxy for API key lifecycle under
ui/src/app/api/skills/token/(orui/src/app/api/catalog-api-keys/route.ts) withrequireAdmin - T052 [US4] Accept API key authentication on
GET /skillsalongside JWT inai_platform_engineering/skills_middleware/router.pypercontracts/gateway-api.md - T053 [US4] Implement Try skills gateway panel with base URL, auth options, and
curlexamples inui/src/components/skills/TrySkillsGateway.tsx - T054 [US4] Mount gateway panel from
ui/src/app/(app)/skills/page.tsx(or sibling route) and add Claude + Cursor step-by-step copy inui/src/components/skills/TrySkillsGateway.tsx
Checkpoint: SC-008 satisfied.
Phase 12: User Story 3 β Skill-scanner pipeline (Priority: P2)β
Goal: FR-023, SC-009 β run skill-scanner on hub ingest; persist findings; admin visibility per contracts/skill-scanner-pipeline.md.
Independent Test: Fixture hub produces findings row; UI shows severity; policy warn/block configurable.
- T055 [US3] Add scanner runner wrapper (subprocess or SDK) in
ai_platform_engineering/skills_middleware/skill_scanner_runner.pyinvokingcisco-ai-skill-scannerwith documented flags - T056 [US3] Invoke scanner after hub fetch in
ai_platform_engineering/skills_middleware/loaders/hub_github.pyorai_platform_engineering/skills_middleware/catalog.py; persist to Mongoskill_scan_findingsperdata-model.md; honorSKILL_SCANNER_GATE/SKILL_SCANNER_FAIL_ONfromcontracts/skill-scanner-pipeline.md(warn vs block on high/critical) - T057 [P] [US3] Surface last scan / max severity / disclaimer in
ui/src/components/admin/SkillHubsSection.tsxor newui/src/components/admin/SkillScanFindingsSection.tsx(Cisco AI Defense Skill Scanner attribution: T070)
Checkpoint: SC-009 satisfied.
Phase 13: Polish & cross-cutting (2026-03-24)β
Purpose: Proxy parity, dependency docs, quickstart validation.
- T058 [P] Forward
q,page,page_size,source,visibilityfrom browser to Python inui/src/app/api/skills/route.ts - T059 [P] Add optional
cisco-ai-skill-scannerdependency group or documented install line inpyproject.tomlanddocs/docs/specs/097-skills-middleware-integration/research.md/plan.mdreferences - T060 Manual validation: scenarios 9β12 in
docs/docs/specs/097-skills-middleware-integration/quickstart.md - T061 Document Scenario 13 (catalog list latency / p95 smoke) in
docs/docs/specs/097-skills-middleware-integration/quickstart.mdand run a manual or scripted timing check againstGET /api/skills(target: plan p95 < 500 ms under typical catalog size, or record actuals)
Phase 14: Automated tests (Constitution VII, Phases 8β13)β
Purpose: Acceptance criteria for entitlement, catalog API, and UI proxy become automated tests (remediation C1/D1).
- T062 [P] Add unit tests for
ai_platform_engineering/skills_middleware/entitlement.py(global/team/personal union, edge cases) undertests/orintegration/per repo convention (tests/test_skills_catalog.pyβTestEntitlement) - T063 Add integration or API tests for
GET /skills(JWT + optional API key path), query paramsq/page/source/visibility, and 401/200 behavior intests/orintegration/targetingai_platform_engineering/skills_middleware/router.py - T064 [P] Extend
ui/src/lib/__tests__/api-middleware.test.ts(or addui/src/app/api/skills/__tests__/route.test.tsif used) for forwarded query params and error mapping for skills proxy
Checkpoint: make test / make caipe-ui-tests cover new skills middleware surfaces.
Phase 15: Packaged skills scan + multi-user supervisor wiringβ
Purpose: FR-023 default/packaged path; spec assumption multi-user supervisor (per-invoke entitlement).
- T065 [P] [US3] Run
scripts/scan-packaged-skills.shfrom CI on release orworkflow_dispatch(document in.github/workflows/ordocs/docs/specs/097-skills-middleware-integration/research.md); setSKILLS_DIRto chart/repo packaged skills root; useSKILL_SCANNER_GATE=stricton protected branches if desired - T066 Pass caller principal (
sub, team ids) fromai_platform_engineering/multi_agents/platform_engineer/protocol_bindings/a2a/agent.py(and FastAPI invoke path if applicable) intoai_platform_engineering/multi_agents/platform_engineer/deep_agent.py/ catalog merge so each supervisor invocation uses an entitled + capped skill set (per spec Assumptions: multi-user); avoid rebuilding the full compiled graph per user unless benchmarked and documented
Phase 16: Gatewayβsupervisor sync, agent_skills source-tag refactor, Skill Scanner attributionβ
Purpose: FR-026, SC-010 (contracts/supervisor-skills-status.md); FR-025; FR-023 third-party attribution (contracts/skill-scanner-pipeline.md, spec Session 2026-03-27).
- T067 [P] Track
last_built_catalog_generation(or equivalent) onAIPlatformEngineerMASinai_platform_engineering/multi_agents/platform_engineer/deep_agent.pyat end of_build_graph(); exposesync_status(in_sync|supervisor_stale|unknown) and aligned fields onGET /internal/supervisor/skills-statusinai_platform_engineering/skills_middleware/router.pypercontracts/supervisor-skills-status.md - T068 [US4] Add skills sync status (human-readable + optional raw fields) to Try skills gateway in
ui/src/components/skills/TrySkillsGateway.tsx; add BFF route underui/src/app/api/if the UI cannot call Python status directly (e.g.ui/src/app/api/supervisor/skills-status/route.ts); wire refresh CTA to existing refresh endpoint per FR-012 - T069 [P] [US1] FR-025: Consolidate legacy agent_skills naming (routes, components, user-facing copy) onto agent skills /
source: agent_skillssemantics inui/src/app/api/,ui/src/components/skills/β preserve backward-compatible API and Mongo reads; no change to merge precedence (FR-010) or visibility (FR-020) - T070 [P] FR-023 attribution: Add Skill Scanner provided by Cisco AI Defense +
https://github.com/cisco-ai-defense/skill-scannerin admin scan surfaces (ui/src/components/admin/SkillHubsSection.tsxand/orSkillScanFindingsSection.tsx); add or extend repo NOTICE / third-party credits file at repo root (ordocs/) percontracts/skill-scanner-pipeline.md
Checkpoint: SC-010 satisfied; FR-025 naming consistent; attribution visible wherever scanner is named.
Phase 17: Scanner on agent-skills save (FR-027, SC-011)β
Purpose: Run skill-scanner synchronously when agent-skills documents with skill_content are saved; persist-but-flag; exclude flagged from catalog under strict gate.
Independent Test: Save document with skill_content; response includes scan_status; under SKILL_SCANNER_GATE=strict, flagged document absent from GET /skills.
- T071 [P] Add
write_single_skill_to_temp_tree(name, content)helper inai_platform_engineering/skills_middleware/skill_scanner_runner.py - T072 [P] Generalize
_persist_scan_runinai_platform_engineering/skills_middleware/hub_skill_scan.pyto acceptsource_type(hub|agent_skills) andsource_idinstead of onlyhub_id - T073 Add
POST /skills/scan-contentendpoint inai_platform_engineering/skills_middleware/router.py: accept{name, content}, run scanner, apply gate logic, persist findings via generalized helper, return{passed, blocked, max_severity, exit_code, summary} - T074 [P] Add
scan_status?: "passed" | "flagged" | "unscanned"toAgentSkill,CreateAgentSkillInput,UpdateAgentSkillInputinui/src/types/agent-skill.ts - T075 Wire scanner call into
POSTandPUThandlers inui/src/app/api/agent-skills/route.ts: call PythonPOST /skills/scan-contentwhenskill_contentpresent; setscan_statuson persisted document; include in response - T076 When
SKILL_SCANNER_GATE=strict, addscan_status: { $ne: "flagged" }filter to MongoDB query inai_platform_engineering/skills_middleware/loaders/agent_skill.py
Checkpoint: SC-011 satisfied; flagged documents excluded under strict gate; findings in skill_scan_findings with source_type: "agent_skills".
Dependencies & Execution Orderβ
Phase Dependenciesβ
- Phases 1β7: Complete (baseline).
- Phase 8 β Phases 9β12 (entitlement + pagination + keys store + prompt cap before UI gateway and scanner consumers).
- T046 before T050, T052 (API key storage before mint/auth).
- Phase 11 (US4) can start after T043, T046; full E2E after T042, T052.
- Phase 12 (US3) can parallel Phase 9β11 after T045 if findings collection exists; T056 should respect T040 visibility metadata.
- Phase 14 (T062βT064) after T041, T043, T058 respectively (tests follow implementation).
- T066 depends on T040βT044 (entitlement + cap); should complete before declaring FR-015/FR-020 satisfied for multi-tenant deployments.
- T065 can parallel UI work; wire CI after T055/
skill-scannerCLI availability. - T067 depends on T031βT033 (cache generation + status endpoint baseline); T068 depends on T067 and Phase 11 gateway shell (T053/T054) for placement.
- T069 can parallel T067/T068 if files do not overlap; prefer after T047 to avoid duplicate gallery edits.
- T070 can parallel T057; if T057 not done, T070 still adds NOTICE + placeholder admin copy for future scan UI.
- Phase 17 (T071βT076): T071, T072, T074 are parallel (different files). T073 depends on T071 + T072. T075 depends on T073 + T074. T076 can parallel T075.
User Story Dependencies (new work)β
- US1 (T047βT048): After Phase 8 (uses entitled responses and source field from T040).
- US2 (T049): After Phase 8.
- US4 (T050βT054): After T046, T042, T043.
- US3 (T055βT057): After Phase 8 merge path stable; optional parallel with US4.
Parallel Opportunitiesβ
- Phase 8: T045 parallel to T040βT044 once scope known.
- Phase 9: T047 parallel to other files if split; T048 follows T047 for layout.
- Phase 11: T051 parallel after T050 contract defined.
- Phase 12: T057 parallel after T055βT056 contract.
- Phase 13: T058, T059 parallel.
Parallel Example: Phase 8 β 11β
T045: env.example + data-model doc touch
T046: api_keys_store.py (start early; required before T050/T052)
T051: Next.js proxy routes (after T050 handler shapes exist)
Implementation Strategyβ
MVP (minimal new scope)β
- Complete Phase 8 (T040βT046).
- Complete Phase 9 (T047βT048) + Phase 10 (T049).
- Validate quickstart scenarios 1β2 + 10 for entitlement parity.
Full feature (spec 2026-03-24)β
- Phase 8 β Phase 9 β Phase 10 β Phase 11 β Phase 12 β Phase 13 β Phase 14 (tests) β Phase 15 (CI scan + T066 multi-user wiring) β Phase 16 (T067βT070: sync, refactor, attribution).
- Run quickstart scenarios 9β14 at T060βT061 (include Scenario 14 after T068).
Task Summaryβ
| Phase | Task IDs | Count | Status |
|---|---|---|---|
| Setup | T001βT003 | 3 | Done |
| Foundational | T004βT012 | 9 | Done |
| US1 | T013βT015 | 3 | Done |
| US2 | T016βT020 | 5 | Done |
| US3 | T021βT026 | 6 | Done |
| Polish | T027βT030 | 4 | Done |
| Spec alignment 03-23 | T031βT039 | 9 | Done |
| Foundational 03-24 | T040βT046 | 7 | Done |
| US1 UX | T047βT048 | 2 | Done |
| US2 parity | T049 | 1 | Done |
| US4 Gateway | T050βT054 | 5 | Done |
| US3 Scanner | T055βT057 | 3 | Done |
| Polish 03-24 | T058βT061 | 4 | Done |
| Tests (VII) | T062βT064 | 3 | Done |
| Scan + multi-user | T065βT066 | 2 | Done |
| Sync + refactor + attribution | T067βT070 | 4 | Done |
| Scanner on save (FR-027) | T071βT076 | 6 | Done |
| Custom label + scanner fix + multi-file (FR-021/027/028) | T077βT086 | 10 | Done |
| Total | T001βT086 | 86 | Done |
Parallel-friendly (new): T045, T046 (early), T047, T051, T057, T058, T059, T062, T064, T065, T067, T069, T070 (within dependency order).
Suggested MVP for new work: Phase 8 (T040βT046) β Phase 14 tests for that slice (T062 after T041) β Phase 9β10.
Phase 18: Custom Label, Scanner Fix, Multi-file Skills (FR-021/FR-027/FR-028)β
| Task | Description | Status |
|---|---|---|
| T077 | Rename "Agent config" to "Custom" in SkillsGallery.tsx SOURCE_LABELS, filters, and help text (FR-021) | Done |
| T078 | Add BACKEND_SKILLS_URL to ui/.env.local and ui/.env.example (FR-027 fix) | Done |
| T079 | Update fetch_github_hub_skills in hub_github.py to fetch full directory tree and populate ancillary_files | Done |
| T080 | Update preview_github_hub_skills to show ancillary_file_count per skill | Done |
| T081 | Update build_skills_files in backend_sync.py to write ancillary files to StateBackend | Done |
| T082 | Add ancillary_files field to AgentSkill types in agent-skill.ts | Done |
| T083 | Project ancillary_files from MongoDB in agent_skill.py loader | Done |
| T084 | Persist ancillary_files in POST/PUT with 5 MB limit + GitHub import endpoint in agent-skills/route.ts | Done |
| T085 | Add file drop zone and GitHub import UI in SkillsBuilderEditor.tsx | Done |
| T086 | Update data-model.md, research.md, and tasks.md for Phase 18 | Done |
Extension hooksβ
.specify/extensions.yml is not present at the repository root β there are no Speckit hooks.before_tasks / hooks.after_tasks (or other) extension hooks registered for this feature. If you add .specify/extensions.yml later, re-run /speckit.tasks or align hook commands with your teamβs HookExecutor.
Notesβ
- FR-014 / FR-018: Okta JWT + catalog API keys on
GET /skillsβrouter.py+api_keys_store.py. - FR-024: Cap in
deep_agent.pydoes not remove skills from storage; only limits prompt-listed summaries. - Skill-scanner: No findings β safe; disclose in UI copy (T057, T054). Attribution: Cisco AI Defense + repo link (T070,
skill-scanner-pipeline.md). - FR-026: Catalog vs supervisor generations on status API (T067); Try skills gateway panel (T068).
- FR-025: Rename/align agent_skills surfaces without breaking stored docs (T069).
- Quality gates:
make lint,make test,make caipe-ui-testsbefore merge.