Roadmap

July 30, 2026 · View on GitHub

This document turns the current analysis into concrete gap matrices for the questions raised about:

  • Linux and macOS portability
  • automatic support for arbitrary repository and folder types without manual configuration
  • robustness and efficiency of Source Discovery and Stack Detection
  • whether source breadth and marketplace diversity are actually generic enough in practice
  • how plugin, extension, and MCP Server discovery and installation work with automatic wire-in
  • whether the project can be extended easily to additional AI agents and IDEs
  • whether the internal codebase structure is scalable enough or needs a deeper project refactor

Scope of the original assessment:

  • branch: feature/opencode-link-wirein
  • assessment date: 2026-04-19 (v1.0.0 baseline); last updated for v2.0.0: 2026-06-01
  • evidence source: implementation and checked-in configuration at that time

v1.0.0 Status Update

The release/v1.0.0 execution wave closes the highest-priority roadmap gaps for portability, generic discovery, source utilization, measurable detection quality, host adapter extensibility, and native project-local wire-in. In particular, VS Code/Copilot and OpenCode have native wire-in flows, while Cursor, Zed, Claude Code, and Pi now use the same host adapter model to write project-local native host files, host-specific wire plans, and independently tuned recommendation policies.

The post-merge hardening wave adds scoped package release identity, deterministic package allowlisting, package entry points and declaration output, mutable state-root support outside the package install directory, safe mirror writes with file-manifest verification, bounded mirror evidence file reads, guarded network reads, static public-provider allowlisting for optional AI enrichment, GitHub/repo mirror-time content acquisition, validated PyPI metadata, lazy .env-aware VS Code settings path resolution, explicit recommendation execution in workspace and full rebuild runs, registry-driven recommendation-host enumeration, adapter-derived install bundle discovery, preview-by-default wire mode, non-destructive VS Code/OpenCode managed sections, adapter-owned runtime checks, VS Code native extension install/verify/remove with bounded native commands, asset prerequisite guidance, optional AI enrichment, official upstream allowlisting, mirror diff/explain reporting, isolated CLI, offline workspace, and packed-artifact smoke checks, operational docs/registry/marketplace harvesters, broad deterministic file-family and technology signature packs, .gitignore glob/negation handling, focused install-domain modules, recommendation and mirror module seams, domain-specific manifest validators, localized domain type modules, discovery demand/source/reporting seams, package/reference/local/GitHub/official-index catalog harvester seams, and type-aware ESLint guardrails. Broader native installers beyond VS Code and Cursor, richer interactive quarantine review UIs, deeper provider-specific OAuth automation, and future package/workspace extraction remain tracked follow-up work.

The gap matrices below are retained for traceability. Their evidence cells describe the original 2026-04-19 baseline, while the verdict table summarizes the current status.

v2.0.0 Status Update

The release/v2.0.0 wave builds directly on the v1.0.0 foundation and closes the remaining high-priority gaps in host coverage, documentation accessibility, operational instrumentation, discovery reporting, and test-coverage governance. The key additions are summarised below.

Codex host adapter (#229)

Codex joins VS Code/Copilot, OpenCode, Cursor, Zed, Claude Code, and Pi as a fully registered host adapter. The adapter writes a project-local workspace directory and wire manifest, documents its integration boundaries explicitly, and provides a safe reset path so the project-local Codex state can be torn down without affecting other hosts.

Documentation and README overhaul (#225, #226, #230, #232, #233, #234, #236)

The top-level README was repositioned around the user's outcome rather than the implementation's mechanics. Changes include: a rewritten hero section with concrete value proposition and proof points; a one-command quick-start block that takes a new user from clone to first recommendation without reading further; concrete lifecycle-command outputs showing what each pipeline stage actually produces; command-style conventions unified across all CLI reference pages; supported-host and supported-asset badge rows for at-a-glance coverage; and an animated demo GIF illustrating the full discover → wire flow.

New operational documentation (#239, #248, #252, #254, #255, #256, #258, #259)

Eight new reference documents were added to docs/:

  • Workspace evolution — describes how the project-local workspace directory grows across pipeline runs and how to inspect or prune it safely.
  • Maintenance playbook — step-by-step procedures for routine upkeep: re-harvesting sources, refreshing mirrors, rotating tokens, and pruning stale catalog entries.
  • Quarantine guide — explains the quarantine lifecycle for flagged assets, reviewer workflow, and how quarantine decisions are persisted.
  • Safe-default reference — catalogues every security-relevant default (network guards, path constraints, manifest size caps, allowlists) and why each exists.
  • Trust center — documents the supply-chain trust model, provider allowlists, and how new sources are evaluated before being added to the default registry.
  • Host support matrix — a single authoritative table of every registered host adapter, the asset kinds it supports, and any capability gaps.
  • v1-to-v2 upgrade guide — explains what changed between v1.0.0 and v2.0.0 at the config, CLI, and workspace-layout levels, with a migration checklist.
  • Release process — documents the tagging, changelog, and smoke-check steps used to cut an official release, including the reproducible-demo requirement.

New discovery and reporting features (#240, #242, #245, #246, #247, #261, #262, #263, #264)

Discovery and reporting gained nine new capabilities:

  • Unknown workspace-signal backlog reports (#240) — the doctor command now emits a ranked backlog of workspace signals that did not match any known stack signature, giving visibility into coverage gaps before they become silent misses.
  • Source and catalog health doctor reports (#242) — doctor also reports per-source harvest health: last-successful fetch time, error count, and catalog-entry yield, so stale or broken sources are surfaced proactively.
  • Candidate source queues (#245) — a structured queue accumulates candidate new sources discovered during harvesting (referenced packages without a configured source, community links found in docs) for human review rather than silent discard.
  • Scheduled maintenance workflows (#246) — a GitHub Actions workflow template is provided for periodic source re-harvesting, mirror refresh, and catalog integrity checks on a cron schedule.
  • Discover diff summaries (#247) — the discover command can emit a structured diff between the current run's demand profile and the previous one, making it easy to see which signals appeared or disappeared.
  • Explainability commands (#261) — explain recommendation <id> and explain detection <signal> subcommands trace exactly which evidence lines produced a given recommendation or detection result, with source file references.
  • Experimental environment index metadata (#262) — the workspace index now optionally records environment metadata (Node version, Python version, OS, active host adapters) alongside the demand profile to support cross-environment comparisons.
  • Evidence-weighted classification confidence (#263, #264) — stack-detection results now carry a numeric confidence score derived from the count and weight of supporting evidence signals, and a low-confidence threshold can be configured to gate recommendations.

Coverage hardening (#207)

The test suite now enforces a 100 % statement, branch, function, and line coverage gate in CI. A reproducible gap-reporting step prints the exact uncovered lines in a standard format when the gate fails, making it straightforward to identify and close gaps. Broad behavioral tests were added alongside the coverage gate to ensure that coverage numbers reflect meaningful scenario execution rather than trivially covered stubs.

Native-host recommendation fixtures for Cursor, Zed, Claude Code, and Pi (#208)

Golden-file recommendation fixtures were added for all four of the hosts that graduated to full adapter status in v1.0.0. Each fixture covers a representative project archetype (TypeScript monorepo, Python data-science project, documentation-only repo, and a multi-language mixed repo) and is run in CI to prevent silent regressions in host-specific recommendation output.

Demand-detection coverage matrix and false-positive fixtures (#209)

A structured coverage matrix was introduced that maps each file-family and technology-signature pack to its fixture corpus entries. Alongside it, an explicit set of false-positive fixtures was added: repos that should not trigger certain detections, ensuring that broadening the signature packs does not introduce phantom demand signals.

Scenario-based recommendation-limit scaling guidance (#210)

Documentation and configurable defaults were added for scaling the per-run recommendation limit based on project size and complexity signals. The guidance covers four named scenarios (minimal, standard, large monorepo, and research/data-heavy) with recommended cap values and the reasoning behind them, so operators can tune limits without reverse-engineering internal scoring.

Branch-residual coverage suites

Residual-branch coverage suites were added across all major domains — discovery, install, mirror, activate, wire, host adapters, catalog harvesting, and CLI command parsing — to ensure that every defensive branch (error paths, empty-input guards, unsupported-host fallbacks) is exercised by at least one named test case.


The gap matrices below remain as historical baselines recorded against the 2026-04-19 assessment. The verdict table reflects the cumulative state after both the v1.0.0 and v2.0.0 releases.

Overall Verdict

QuestionCurrent answerWhy
Will this automatically work on Linux and macOS without issues?Yes, with CI coverageOS-aware paths, generated local source seeds, portable link handling, and Windows/macOS/Linux guardrails are now in place.
Will this automatically work with almost any type of project folder or repo without manual changes?Much broader than beforeDetector packs now cover software, docs, notebooks, datasets, media/design assets, CAD/hardware, research, game engines, mobile, AI/ML/DL/RL, robotics, security, blockchain, marketing, and fabrication repos.
Is Source Discovery and Stack Detection robust enough for almost any project?Measurable and extensibleDetection has modular file-family and technology signature packs, repo-level fixtures, benchmark coverage, and quality reporting; long-tail domains remain future expansion areas.
Are the configured sources generic enough because several marketplaces are included?Operationally harvested and reportableSource utilization reporting distinguishes configured sources from actually harvested sources; docs, registry, VS Code Marketplace, npm, and PyPI inputs now contribute bounded evidence.
How automatic is plugin, extension, and MCP Server setup through wire-in today?Broad native file wiring; explicit native installThe pipeline separates stage/activate/wire/native-install, projects shared MCP references, writes native project-local host files where supported, and can explicitly install/verify/remove VS Code extensions.
Can this be extended easily to more AI agents and IDEs?Yes through host adaptersCursor, Zed, Claude Code, and Pi now prove the adapter surface beyond VS Code/Copilot and OpenCode, including independent recommendation tuning.
Is the current single-folder source layout scalable enough for further growth?Yes for v1.0.0New config, discovery, install, manifest-validation, types, wire, host-adapter, path, preflight, HTTP, state-root, CLI parsing, release-artifact, and catalog-harvester seams exist. Future package/workspace extraction remains optional.

Gap Matrix 1: Linux and macOS Portability

GapCurrent evidenceImpactSeverityConcrete remediationExit criteriaImplementation issue
VS Code wire-in uses Windows-only home and settings env varssrc/host-vscode.ts uses APPDATA for Code/User/settings.json and USERPROFILE for ~/.copilot/agent-harnessLinux and macOS user settings and curated runtime paths will not resolve correctly by defaultHighReplace env-var path building with os.homedir() plus OS-aware VS Code settings resolution; support Windows, macOS, Linux explicitlywire vscode --apply works on all three OSes without env var hacksP1 / #5
Home-path normalization is Windows-specificsrc/host-vscode.ts converts only USERPROFILE-prefixed paths to ~Non-Windows paths are only partially normalized and user-facing config becomes inconsistentMediumNormalize via os.homedir() and avoid USERPROFILE-only replacement logicAll generated path entries render consistently on Windows, macOS, and LinuxP2 / #6
Checked-in local sources are hardcoded to one Windows machinediscover/sources.json contains C:/Users/ar271/.agents/skills, C:/Users/ar271/.config/opencode, and related pathsOut-of-the-box source discovery is not portable across machines, let alone operating systemsHighConvert seeded local sources to templated home-relative paths or generate them at runtime per OSFresh clone on macOS or Linux has no broken local source endpointsP3 / #7
OpenCode local seeds also assume Windows absolute pathsdiscover/sources.json contains C:/Users/ar271/.config/opencode and C:/Users/ar271/.config/opencode/contextLocal OpenCode discovery silently degrades off the original workstationHighResolve OpenCode config roots from home directory at runtime instead of committing workstation-specific pathsLocal OpenCode sources auto-resolve correctly across supported OSesP4 / #8
Cross-platform behavior is not enforced in CICurrent validation covers typecheck, lint, format, and recommendation fixtures, but not OS matrix runsRegressions can reintroduce platform-specific behavior unnoticedMediumAdd GitHub Actions matrix for Windows, Ubuntu, and macOS covering workspace commands and wire-in preview/apply/reset smoke testsCI blocks merges when any OS-specific path or link behavior breaksP5 / #9
Directory linking is partially portable but not fully validatedsrc/files.ts uses junctions on Windows and directory symlinks elsewhereThe implementation is promising, but there is no automated proof that link creation/reset is reliable on all targetsMediumAdd wire-in integration tests that assert creation, replacement, and reset of managed links on all OSesLink lifecycle tests pass on Windows, Linux, and macOSP6 / #10

Gap Matrix 2: Automatic Support for Arbitrary Repository and Folder Types

GapCurrent evidenceImpactSeverityConcrete remediationExit criteriaImplementation issue
Demand profiling only inspects a narrow set of software-oriented filessrc/discover.ts shouldInspectFile() focuses on files like package.json, tsconfig.json, pyproject.toml, Cargo.toml, go.mod, pom.xml, Dockerfile, deno.json, actor.json, and OpenAPI filesMany repo types produce little or no signal, including CAD, art, music, video, business analysis, research, hardware, game engines, and many niche engineering domainsHighExpand detection plugins beyond software manifests into domain detectors for notebooks, datasets, design tools, engines, CAD files, robotics stacks, DSP/media projects, research assets, and documentation-heavy reposRepresentative non-software and mixed-domain repos produce meaningful demand profiles without custom patchesG1 / #12
Local repo classification is centered on agent-asset structures, not generic repossrc/discover.ts classifyLocalDirectoryFile() primarily recognizes SKILL.md, agent markdown, plugin code, instructions, workflows, and OpenCode context structuresGeneric repos are not "understood" unless they already resemble an agent/skills ecosystemHighSplit "repo understanding" from "agent asset harvesting" and add a generic repository classifier layer before asset selectionGeneric repos can be analyzed even when they contain zero agent assetsG2 / #13
Stack inference depends on a short curated signal vocabularysrc/discover.ts enrichers look for React, Next.js, Astro, Svelte, Hono, Express, Fastify, NestJS, Supabase, Apify, Playwright, OpenAPI, Terraform, Docker, MCP, and a few text markersDetection quality falls off rapidly outside the explicitly encoded ecosystemsHighMove stack detection to a modular signature registry with broader ecosystem coverage and easier extensionAdding a new stack does not require editing monolithic detection logicG3 / #14
Package-registry exploration is not genericcollectPackageCandidatesFromDemandProfile() maps only a small set of signals to packages such as typescript, @playwright/test, @modelcontextprotocol/sdk, openapi-typescript, @supabase/supabase-js, react, next, fastapi, and terraformMarketplace-backed discovery does not generalize to arbitrary ecosystems or domainsHighReplace hardcoded package candidate mapping with dependency graph extraction and ecosystem-aware package scoringRegistry discovery can surface relevant packages from actual repo dependencies across multiple ecosystemsG4 / #17
Non-code folders are likely to be scanned but not understoodThe scanner walks broadly, but enrichment is limited to package.json and actor.json plus static filename signalsLarge folders full of documents, media, CAD assets, notebooks, or research artifacts incur scan cost with little benefitMediumAdd file-family detectors for markdown-heavy knowledge repos, notebooks, data folders, media projects, and engineering artifact setsPure research or design repos produce targeted signals instead of near-empty profilesG5 / #15
"No manual configuration" is not realistic todaySource seeds, domain coverage, and repo-type assumptions all favor a specific agent-tooling workflowMany real-world repos will require added source packs, new detector signatures, or source config changesHighIntroduce optional auto-generated local source templates, detector plugins, and host-specific defaults that derive from the current machine and repo contentsNew user on a fresh machine can run the pipeline on common repo archetypes without editing checked-in configG6 / #16

Gap Matrix 3: Source Discovery and Stack Detection Robustness and Efficiency

GapCurrent evidenceImpactSeverityConcrete remediationExit criteriaImplementation issue
Recursive file walk is simple and unboundedsrc/files.ts recursively traverses all directories outside a short ignore set with no depth, file-count, byte-size, or time budgetLarge monorepos, generated-output repos, dataset repos, or media-heavy repos can be expensive to scanHighAdd scan budgets, optional depth caps, file-count ceilings, and early-stop heuristics; emit telemetry when the budget truncates scanningDemand profiling remains fast and predictable on very large reposD1 / #24
Ignore list is helpful but shallowsrc/files.ts ignores .git, .idea, .next, .nuxt, .tmp, build, coverage, dist, node_modules, and vendorMany heavy directories common in other ecosystems are still traversedMediumExtend ignore profiles for common generated folders across Java, .NET, Python, data, game dev, CAD, media, ML, and embedded toolchainsScan cost remains controlled across common repo archetypesD2 / #25
Enrichment logic is concentrated in a small number of special casessrc/discover.ts only deeply enriches package.json and actor.jsonDetection robustness is fragile outside these file typesHighAdd parsers for more ecosystems and make enrichers pluggable by file typeMultiple ecosystems get first-class enrichment instead of fallback keyword matchingD3 / #26
Detection quality is hard to measure objectivelyCurrent validation includes recommendation fixtures but not a broad corpus of real repo archetypesIt is difficult to know what classes of projects are detected well versus poorlyHighBuild a fixture corpus covering web, mobile, backend, infra, AI/ML, notebooks, research, data engineering, hardware, game dev, CAD, media, security, and mixed monoreposCoverage reports show precision and recall by repo archetypeD4 / #27
Efficiency is not benchmarkedNo performance budget or benchmark harness is enforced in CIPerformance regressions can accumulate silentlyMediumAdd benchmark fixtures and CI thresholds for demand-profile generation time and scanned-file volumeScan time and memory stay within explicit limits across standard fixture sizesD5 / #28
Signal model is static and centralizedsrc/discover.ts contains hardcoded signal rules and keyword listsExtending support becomes slower and riskier as the file growsMediumRefactor into data-driven detector modules or JSON/YAML signature packs with testsNew stack signatures can be added with isolated tests and minimal core-code changeD6 / #29

Gap Matrix 4: Source Breadth and Diversity vs Effective Coverage

AspectCurrent stateStrengthLimitationSeverityConcrete remediationExit criteriaImplementation issue
Configured source count30 configured sources across docs, repos, marketplace, registry, package-registry, local-manifest, and local-directoryGood initial breadth for an agent-tooling supply chainBreadth in config does not equal breadth in active harvestingMediumTrack configured-vs-effective source utilization in reportingReports clearly distinguish dormant from active source kindsS1 / #18
Authority mixWeighted toward official-first-party sourcesGood trust posture and lower supply-chain riskWeak long-tail coverage for niche ecosystems and community innovationMediumAdd more vetted, domain-specific community sources with tiered trust policiesNiche stacks have at least one trusted source path without reducing trust postureS2 / #19
Marketplace presenceVS Code Marketplace, npm, and PyPI are represented in configGood theoretical reachOnly package registries are actively harvested in generateCatalog(); marketplace and generic registry entries are not directly harvestedHighImplement active marketplace and docs/registry harvesters or remove dormant source kinds from default claimsEvery declared source kind has an operational harvesting pathS3 / #20
Docs sourcesDocs sources exist in configUseful for future breadthDocs are not currently first-class harvested inputs in the main catalog pipelineMediumAdd docs harvesters that convert trusted docs into instruction/reference assets consistentlyDocs sources contribute measurable catalog entriesS4 / #21
Package registriesnpm and PyPI are operationalReal external discovery path existsCandidate generation is narrow and hardcoded, so effective breadth remains smallHighFeed registries from actual dependency manifests and broader detector outputsPackage-registry coverage reflects actual repo dependenciesS5 / #22
Local sourcesLocal seeds increase personalization and immediate utilityHelpful on the original machineThey are machine-specific and Windows-specific in checked-in configHighGenerate local sources dynamically per user and OS instead of committing personal absolute pathsFresh clones on any supported OS get usable local source seedsS6 / #11
Repo sourcesGitHub repo harvesting is the dominant active discovery mechanismStrong for curated agent ecosystemsStrong bias toward repos that already follow skills/agent conventionsMediumAdd repo archetype detection independent of agent-file conventionsNon-agent repos can still yield relevant assets or recommendationsS7 / #23

Gap Matrix 5: Automatic Wire-In for Plugins, Extensions, and MCP Servers

GapCurrent evidenceImpactSeverityConcrete remediationExit criteriaImplementation issue
Automatic wire-in is file-based curation, not full native installationsrc/pipeline.ts runs discover → mirror → install → activate → wire, and src/install.ts stages mirrored assets into install/<host>/packages/...The flow is automated for internal asset projection, but users may assume it also installs native IDE extensionsHighExplicitly separate stage, activate, and native-install concepts in the model and CLI; add native installers only where the host supports themCLI output and docs distinguish staged assets from truly installed host-native integrationsW1 / #30
VS Code plugin support is implemented, but extension installation is notsrc/host-vscode.ts wires chat.pluginLocations, chat.agentSkillsLocations, chat.agentFilesLocations, and related paths; no extension install path existsPlugins can be materialized into curated locations, but VS Code extensions are not first-class installed assetsHighAdd an extension installer abstraction for hosts that support marketplaces, and track extension selections separately from pluginsA selected VS Code extension asset can be discovered, chosen, installed, verified, and removedW2 / #31
Extension assets exist in the type system but not in the VS Code profilesrc/types.ts includes AssetKind = "extension", but CopilotWorkspaceProfileManifest has selectedPluginIds and no selectedExtensionIdsExtension discovery can be represented in theory, but activation and user selection do not model it completelyHighExtend activation manifests and workspace profile manifests with explicit extension selections and lifecycle metadataExtension assets appear in activation manifests and workspace profiles with round-trip fidelityW3 / #32
MCP servers are bundled as shared assets, but host wire-in is incompletesrc/mirror.ts routes mcp-server assets into shared-mcp; src/pipeline.ts activates shared; host wire code reads host-specific activation roots onlyShared MCP assets may be discovered and activated, but they are not consistently projected into each host’s wire-inHighDefine a host-consumable shared asset projection layer so shared MCP assets can be surfaced into each supported host intentionallyShared MCP assets are visible in effective wire plans for all hosts that claim MCP supportW4 / #33
Automatic auth-aware setup assistance is not implementedSource fetching uses GitHub token env vars in src/github.ts, src/discover.ts, and src/asset-content.ts; no plugin/extension/MCP auth onboarding existsAssets that require API keys, OAuth, or provider-specific login still require manual setup outside the harnessHighIntroduce an auth-capability model per asset and a CLI assistance flow that can prompt for prerequisites, validate env vars, and emit host-specific setup guidanceSelecting an auth-required asset triggers prerequisite checks and guided setup before wire-inW5 / #34
Installation does not validate host runtime readinessThe current install step copies curated content, but does not verify marketplace availability, CLI presence, login state, or MCP runtime compatibilityUsers can reach a “wired” state that still fails at runtime because host prerequisites are unmetMediumAdd preflight checks for required CLIs, host versions, authentication state, and external runtime dependenciesworkspace and wire commands fail fast with actionable prerequisite diagnosticsW6 / #35
User assistance is implicit rather than explicitThe CLI orchestrates pipeline stages, but there is no dedicated interactive setup mode for asset-specific onboardingNew users will not get guided help for auth, marketplace sign-in, or provider-specific post-install configurationMediumAdd a setup or doctor workflow that explains required actions per selected asset and can optionally open relevant login/setup URLsA first-time user can complete asset onboarding from a guided CLI flow without reading source codeW7 / #36

Gap Matrix 6: Extending to Additional AI Agents and IDEs

GapCurrent evidenceImpactSeverityConcrete remediationExit criteriaImplementation issue
Host support is encoded as a closed setsrc/types.ts defines HostTarget as a three-value union for copilot-vscode, opencode, and sharedAdding Claude Code, Cursor, Zed, Codex, Droid, Pi Agent, or others requires core-code edits rather than registrationHighReplace the closed union with a host registry or adapter contract loaded from declarative host definitions plus typed handlersNew hosts can be added without editing central host unions across the codebaseH1 / #37
Workspace orchestration only targets VS Code and OpenCodesrc/workspace.ts and src/wire.ts dispatch only vscode and opencode targetsNew IDEs and agent hosts cannot participate in the main end-to-end workflow without bespoke command changesHighRefactor workspace and wire commands around host adapters with a discovery-based dispatch layerworkspace and wire accept any registered host adapterH2 / #38
Pipeline bundle defaults are host-specific and hardcodedsrc/pipeline.ts selects bundle IDs per host, and src/activate.ts hardcodes default bundle IDs for copilot-vscode, opencode, and sharedEach new host currently needs multiple synchronized code changes to declare defaults and bundle behaviorHighMove bundle defaults, asset policies, and host capabilities into per-host configuration objects or manifestsA new host can declare defaults in data rather than in multiple switch statementsH3 / #39
Host wire behavior is implemented as bespoke modulessrc/host-vscode.ts and src/host-opencode.ts each contain custom path resolution, materialization, and settings patch logicExtension to another host requires writing a new host module from scratch instead of reusing a common contractMediumIntroduce a reusable host adapter interface covering curated roots, asset projection, settings patching, and reset behaviorMost host implementations share a common adapter skeleton with limited custom codeH4 / #40
Asset-to-host compatibility is not yet capability-drivenAsset kinds and host folders are partly encoded in host-specific logic, not in a generalized capability modelIt is difficult to reason about which hosts support plugins, instructions, MCP servers, hooks, or extensionsMediumAdd a capability matrix that maps asset kinds to supported host behaviors such as stage, wire, native install, auth assist, and runtime validationHost support can be reasoned about from a single compatibility modelH5 / #41
Recommendation and selection flows are tuned to current hostsActivation and workspace profile generation are shaped around Copilot VS Code and OpenCode manifestsNew hosts risk partial support unless recommendation, activation, and profile emission are generalizedMediumGeneralize profile emission and recommendation sinks so each host can produce its own selected-assets manifest without changing core recommendation semanticsNew host support includes recommendation, activation, and wire plan generation end to endH6 / #42
The architecture is extensible in concept, but not yet in effortThe staged lifecycle already exists: discover, mirror, install, activate, wireThe project is not boxed in, but “easy extension” is overstated until host abstractions are cleaned upMediumPreserve the existing staged pipeline, but refactor around host adapters and shared capability descriptors before adding the next 2 to 3 hostsSecond and third non-default hosts can be added with mostly declarative configuration changesH7 / #43

Gap Matrix 7: Project Refactor and Internal Architecture Scalability

GapCurrent evidenceImpactSeverityConcrete remediationExit criteriaImplementation issue
The source tree is flat rather than domain-orientedsrc/ currently contains 23 root-level .ts files and no services, config, utils, factories, or similar subdirectoriesThe project is harder to navigate, onboard into, and extend safely as more features and hosts are addedHighReorganize into domain modules such as domains/discovery, domains/install, domains/activation, domains/wire, plus shared lib, config, and host-adapters packagesNew contributors can locate concerns by domain instead of memorizing root-level filenamesA1 / #1
Several files have already become oversizedTop file sizes include src/discover.ts (3191 lines), src/recommend.ts (1784), src/manifest-validation.ts (1269), src/install.ts (928), src/mirror.ts (806), and src/activate.ts (724)Large files increase review cost, hide regressions, and make safe refactoring materially slowerHighSplit large files into focused modules with single responsibilities, preserving stable public entrypoints while moving internal logic into smaller collaboratorsNo core module exceeds an agreed size budget unless explicitly justifiedA2 / #44
Complex orchestration and classification logic is concentratedIn src/discover.ts, key hotspots include generateCatalog around line 177, collectPackageCandidatesFromDemandProfile around line 622, and classifyLocalDirectoryFile around line 1426Discovery behavior becomes difficult to reason about, test in isolation, and optimize without unintended side effectsHighExtract scanning, enrichment, classification, and candidate-scoring into dedicated services and strategy modules with narrow interfacesMajor workflows can be unit-tested in isolation without loading the full discovery pipelineA3 / #45
Configuration handling is scattered across multiple modulesprocess.env is read directly in src/discover.ts, src/github.ts, src/mirror.ts, src/rebuild.ts, src/pipeline.ts, src/host-vscode.ts, and src/asset-content.ts; no .env* template files were found in the repoRuntime behavior is harder to validate centrally, and configuration drift or missing env vars is easier to missHighIntroduce a centralized config loader with schema validation, typed accessors, documented defaults, and a checked-in .env.example; keep real .env files local and out of version controlAll environment access flows through a single validated config moduleA4 / #2
Shared abstractions are weakly expressedNo class declarations were found under src/**/*.ts, and there are no dedicated service/factory directories; most behavior is encoded in large functional modulesThe issue is not “must use classes everywhere,” but missing boundary objects and factories make lifecycle and dependency management harderMediumIntroduce explicit service boundaries where they add value, along with factories/builders for host adapters, source handlers, registry clients, and wire-plan generationCore workflows are composed from named services/factories rather than implicit large-file helper clustersA5 / #3
Types and validation are centralized into broad shared filessrc/types.ts is 696 lines and src/manifest-validation.ts is 1269 linesA small change in one area forces developers to reason about unrelated types and validation rules elsewhereMediumSplit shared types and schemas by domain, and colocate validators with the manifests or asset families they governType and validation changes are localized to the owning domainA6 / #46
Security and runtime checks are not centralized as first-class layersEnvironment/config checks, host readiness, and asset-specific prerequisites are currently spread across command handlers and host modulesSecurity posture and runtime diagnostics depend too much on call-site discipline instead of a reusable verification layerMediumAdd shared preflight, config validation, and policy-check layers invoked consistently by CLI commands and host adaptersCommands fail consistently through shared validation layers with uniform diagnosticsA7 / #4
There is no explicit refactor seam for future package/workspace splitThe current implementation is a single package with a single src root, even though the code already has distinct domains like discovery, mirror, install, activation, recommendation, and host wiringFuture scaling into libraries, plugins, or separate runtime packages will be more expensive than it needs to beMediumRefactor toward internal package-style boundaries now, even if staying in one npm package initially; keep domain APIs stable enough to support a later workspace split if neededThe codebase can evolve into multiple internal packages without rewriting business logicA8 / #47
PhaseGoalKey deliverablesTracking item
Phase 0Establish modular architecture foundationsCreate domain folders, central config loading, shared validation/preflight layers, and internal service/factory seamsM0 / #48
Phase 1Make the project genuinely cross-platformRemove hardcoded Windows local paths, replace APPDATA/USERPROFILE assumptions, add OS matrix CIM1 / #49
Phase 2Separate generic repo understanding from agent-asset harvestingAdd a generic repo classifier layer and pluggable detector modulesM2 / #50
Phase 3Turn configured source breadth into effective source breadthImplement harvesters for docs, marketplace, and registry sources that are currently only declarativeM3 / #51
Phase 4Make detection measurable and scalableAdd archetype fixture corpus, benchmark suite, coverage reporting, and scan budgetsM4 / #52
Phase 5Make wire-in truly host-aware and user-assistiveAdd native install support where applicable, auth-aware setup guidance, preflight checks, and shared MCP projectionM5 / #53
Phase 6Generalize host support beyond VS Code and OpenCodeIntroduce host adapters, capability matrices, declarative host registration, and pilot integrations for new IDEsM6 / #54
Phase 7Reduce file and function complexitySplit oversized modules, localize types/validation, and enforce complexity/size budgets in CIM7 / #55

Suggested Success Metrics

AreaMetric
PortabilityFull pipeline and wire-in preview/apply/reset pass on Windows, Ubuntu, and macOS
Repo coverageFixture corpus spans at least 20 repo archetypes with acceptable detection quality
Source effectivenessEach configured source kind contributes actual harvested entries or is explicitly marked dormant
EfficiencyDemand-profile generation stays within defined file-count and runtime budgets on large fixture repos
ExtensibilityNew detector signatures can be added without editing the central detection function
Wire-in automationSelected assets can be staged, validated, authenticated if needed, and projected into the target host without undocumented manual steps
Host expansionA new AI agent or IDE host can be added through a bounded adapter surface and configuration rather than multi-file core rewrites
Code organizationMost source files live under domain folders with clear ownership, and root-level orchestration files remain intentionally small
Configuration safetyAll runtime configuration is schema-validated centrally, documented via .env.example, and never read ad hoc throughout the codebase
Complexity controlCore modules and functions stay under agreed size and complexity budgets enforced by CI