Best for
- Before editing anything in a repository with apps/, packages/, libs/,
- "Which packages depend on @org/ui?", "what does build run here?",
- Before a cross-workspace change, as the input to
event4u-app/agent-config/src/skills/monorepo-workspace/SKILL.md
Use to orient in a monorepo — which package manager, which workspaces, which task runner and its tasks — derived from the repository's own config and the runner's own listing, never guessed.
Decision brief
Read-only. Answers "what is this repository, structurally" before anything edits it: the package manager, the workspace list, the task runner, and the tasks the runner actually defines.
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/monorepo-workspace"Inspect the Agent Skill "monorepo-workspace" from https://github.com/event4u-app/agent-config/blob/6a5670b7881a676c0da90d2afb950298087c4ccb/src/skills/monorepo-workspace/SKILL.md at commit 6a5670b7881a676c0da90d2afb950298087c4ccb. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
packageManager in the root package.json is the declaration and wins when present (it is what Corepack enforces). Otherwise infer from the lockfile: pnpm-lock.yaml → pnpm, yarn.lock → yarn, bun.lock / bun.lockb → bun, package-lock.json → npm. Two lockfiles is a finding, not a tie…
Not for authoring a component or picking a UI idiom — the stack detector already reports the frontend workspace as state.stack.scoperoot, and the UI lane routes on that.
packageManager in the root package.json is the declaration and wins when present (it is what Corepack enforces). Otherwise infer from the lockfile: pnpm-lock.yaml → pnpm, yarn.lock → yarn, bun.lock / bun.lockb → bun, package-lock.json → npm. Two lockfiles is a finding, not a tie…
In precedence order, and report which one answered:
When the workspace defines a catalog, a member's catalog: range is a REFERENCE, not a declaration. Report the catalog as the version's home:
Permission review
The documentation asks the agent to read local files, directories, or repositories.
Read-only. Answers "what is this repository, structurally" before anythingThe documentation asks the agent to run terminal commands or scripts.
npx nx show projectsThe documentation asks the agent to run terminal commands or scripts.
npx nx show project <name> # targets for one projectEvidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 94/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 9 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Read-only. Answers "what is this repository, structurally" before anything edits it: the package manager, the workspace list, the task runner, and the tasks the runner actually defines.
Every answer is a pointer plus a digest — the file that states the fact and
a short quotation of it — never a flattened claim. This is the Class-A shape
standards-from-config uses, and for the
same reason: a digest the reader can check beats a summary they have to trust.
apps/, packages/, libs/,
a pnpm-workspace.yaml, a turbo.json, or an nx.json.@org/ui?", "what does build run here?",
"which workspace owns this file?"blast-radius-analyzer § Monorepo.Not for authoring a component or picking a UI idiom — the stack detector
already reports the frontend workspace as state.stack.scope_root, and the UI
lane routes on that.
packageManager in the root package.json is the declaration and wins when
present (it is what Corepack enforces). Otherwise infer from the lockfile:
pnpm-lock.yaml → pnpm, yarn.lock → yarn, bun.lock / bun.lockb → bun,
package-lock.json → npm. Two lockfiles is a finding, not a tie to break —
report both and stop.
In precedence order, and report which one answered:
| Source | Field |
|---|---|
pnpm-workspace.yaml | packages: |
package.json | workspaces (array, or { packages: [...] }) |
nx.json beside per-project project.json | Nx infers; use step 3 |
lerna.json | packages |
Globs are globs: packages/* means every direct child carrying a manifest, not
every directory.
When the workspace defines a catalog, a member's catalog: range is a
REFERENCE, not a declaration. Report the catalog as the version's home:
catalog: (bare, or catalog:<name>) resolves
against the workspace catalog definition. It does not resolve outside the
workspace at all — treat it exactly as workspace: for publishability.catalog: is either a no-op or a silent divergence from the catalog, and the
catalog exists precisely so the version has one home.When a runner is present, its own listing is the source of truth, because a runner infers projects that appear in no config file you can read:
# Nx — never read project.json by hand for the project list
npx nx show projects
npx nx show project <name> # targets for one project
# Turborepo
npx turbo ls
Print the task list with each task's description field when it has one —
turbo.json tasks carry an optional description, and it is the only place the
repository says what a task is for rather than what it depends on.
turbo and nx are the consumer project's binaries, invoked through its
own npx / pnpm dlx. This package never installs them. When neither
resolves, build the graph from the manifests instead: for each workspace, read
its dependencies / devDependencies and keep the entries whose names match
another workspace's name. That is the dependency graph, and it is complete
for workspace:-linked packages.
State plainly that the listing came from manifests rather than the runner — an
inferred target list can miss runner-inferred targets. This is the posture
react-shadcn-ui already takes for the shadcn
CLI; the stop condition is missing-tool-handling (never install it silently,
never fake the output).
An orientation report MUST contain, in order:
packageManager
when declared, otherwise the lockfile filename. Two lockfiles is reported as
a finding, never resolved by picking one.name, and its workspace-internal dependencies. Both the path and the name,
because the graph links on name and humans talk in paths.description field
when the config carries one, and its dependsOn when it has one.turbo ls / nx show projects) or the manifest walk. When it
was the manifest walk, the line also says that runner-inferred targets may be
missing.Package manager: [email protected] [package.json#packageManager]
Workspaces (2) [pnpm-workspace.yaml#packages: apps/*, packages/*]
apps/web @fixture/web deps: @fixture/ui
packages/ui @fixture/ui deps: —
Task runner: turbo [turbo.json#tasks]
build "Compile every workspace to its dist/ output." dependsOn: ^build
lint "Run the workspace linter over its own sources."
test "Run the workspace unit tests." dependsOn: ^build
Source: turbo ls (runner listing)
When the runner was absent, the last line reads
Source: manifest walk (turbo not on PATH — runner-inferred targets may be missing).
name are different keys. The
graph links on name; humans talk in paths. Print both.packages/eslint-config is a workspace. It is not a frontend, and it is not
a scope candidate for a UI change.nx.json with no workspaces key in package.json is normal, not broken.packageManager pinning a manager whose lockfile is absent means the install
was never run with it. Report the mismatch.Do NOT gate on a member version literal. Whether a catalog repository permits selective literals is that repository's convention, not this suite's to impose. Report it as a structural observation — "member literal overlaps catalog entry", never "invalid" — and let the reader decide. An exact mismatch between the literal and the catalog range is reported at higher severity, and still does not gate.
Read project.json by hand to enumerate Nx projects — nx show projects is
the source of truth and includes inferred targets.
Install turbo or nx to answer a question. They are the consumer's
binaries; when absent, walk the manifests and say that is what you did.
Flatten the answer into prose without the file that states it.
Report a workspace list from the conventional directories when a declarative source exists — the declaration is authoritative, and the two can disagree.
standards-from-config — the Class-A pointer+digest shape this follows.workspace-link — when a cross-workspace import will not resolve.blast-radius-analyzer — § Monorepo consumes this graph.monorepo-antipatterns — diff-detectable task-graph mistakes.Frequently asked questions
Read-only. Answers "what is this repository, structurally" before anything edits it: the package manager, the workspace list, the task runner, and the tasks the runner actually defines.
The source record exposes this install command: npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/monorepo-workspace". Inspect the command and pinned source before running it.
Static rules flagged read-files, exec-script in the source; the page lists the matching lines and excerpts.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
garrytan/gbrain
End-to-end discipline for turning any large data source (audio libraries, email takeouts, document corpora, chat exports, API dumps) into brain pages at scale. The lifecycle spine: SCHEMA → ACCESS → TRIAL → EVALUATE → IMPROVE → CODIFY → TEST → SKILLIFY → BULK → MONITOR. State is tracked in a durable JSON manifest (see MANIFEST-PATTERN.md) so any crash, session boundary, or subagent fan-out resumes from ground truth instead of memory.
alirezarezvani/claude-skills
App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store. Use when the user asks about ASO, app store rankings, app metadata, app titles and descriptions, app store listings, app visibility, or mobile app marketing on iOS or Android. Supports keyword research and scoring, competitor keyword analysis, metadata optimization, A/B test planning, launch checklist
dotnet/skills
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP). Use when user asks to "migrate to MTP", "switch from VSTest", "enable Microsoft.Testing.Platform", "use MTP runner", set OutputType=Exe only for test projects in Directory.Build.props, or mentions EnableMSTestRunner, EnableNUnitRunner, or UseMicrosoftTestingPlatformRunner. USE FOR: MTP behavioral differences vs VSTest (exit code 8, zero tests discovered, --ignore-exit-code, TESTINGPLATFORM_EXITCODE_IGNORE); centralizing