Explore and understand Nx workspaces. USE WHEN answering questions about the workspace, projects, or tasks. ALSO USE WHEN an nx command fails or you need to check available targets/configuration before running a task. EXAMPLES: 'What projects are in this workspace?', 'How is project X configured?', 'What depends on library Y?', 'What targets can I run?', 'Cannot find configuration for task', 'debug nx task failure'.
68
83%
Does it follow best practices?
Impact
—
No eval scenarios have been run
Passed
No known issues
This skill provides read-only exploration of Nx workspaces. Use it to understand workspace structure, project configuration, available targets, and dependencies.
Use pnpm exec nx show projects to list projects in the workspace.
The project filtering syntax (-p/--projects) works across many Nx commands including pnpm exec nx run-many, pnpm exec nx release, pnpm exec nx show projects, and more. Filters support explicit names, glob patterns, tag references (e.g. tag:name), directories, and negation (e.g. !project-name).
# List all projects
pnpm exec nx show projects
# Filter by pattern (glob)
pnpm exec nx show projects --projects "apps/*"
pnpm exec nx show projects --projects "shared-*"
# Filter by tag
pnpm exec nx show projects --projects "tag:publishable"
pnpm exec nx show projects -p 'tag:publishable,!tag:internal'
# Filter by target (projects that have a specific target)
pnpm exec nx show projects --withTarget build
# Combine filters
pnpm exec nx show projects --type lib --withTarget test
pnpm exec nx show projects --affected --exclude="*-e2e"
pnpm exec nx show projects -p "tag:scope:client,packages/*"
# Negate patterns
pnpm exec nx show projects -p '!tag:private'
pnpm exec nx show projects -p '!*-e2e'
# Output as JSON
pnpm exec nx show projects --jsonUse pnpm exec nx show project <name> --json to get the full resolved configuration for a project.
Important: Do NOT read project.json directly - it only contains partial configuration. The pnpm exec nx show project --json command returns the full resolved config including inferred targets from plugins.
You can read the full project schema at node_modules/nx/schemas/project-schema.json to understand nx project configuration options.
# Get full project configuration
pnpm exec nx show project my-app --json
# Extract specific parts from the JSON
pnpm exec nx show project my-app --json | jq '.targets'
pnpm exec nx show project my-app --json | jq '.targets.build'
pnpm exec nx show project my-app --json | jq '.targets | keys'
# Check project metadata
pnpm exec nx show project my-app --json | jq '{name, root, sourceRoot, projectType, tags}'Targets define what tasks can be run on a project.
# List all targets for a project
pnpm exec nx show project my-app --json | jq '.targets | keys'
# Get full target configuration
pnpm exec nx show project my-app --json | jq '.targets.build'
# Check target executor/command
pnpm exec nx show project my-app --json | jq '.targets.build.executor'
pnpm exec nx show project my-app --json | jq '.targets.build.command'
# View target options
pnpm exec nx show project my-app --json | jq '.targets.build.options'
# Check target inputs/outputs (for caching)
pnpm exec nx show project my-app --json | jq '.targets.build.inputs'
pnpm exec nx show project my-app --json | jq '.targets.build.outputs'
# Find projects with a specific target
pnpm exec nx show projects --withTarget serve
pnpm exec nx show projects --withTarget e2eRead nx.json directly for workspace-level configuration.
You can read the full project schema at node_modules/nx/schemas/nx-schema.json to understand nx project configuration options.
# Read the full nx.json
cat nx.json
# Or use jq for specific sections
cat nx.json | jq '.targetDefaults'
cat nx.json | jq '.namedInputs'
cat nx.json | jq '.plugins'
cat nx.json | jq '.generators'Key nx.json sections:
targetDefaults - Default configuration applied to all targets of a given namenamedInputs - Reusable input definitions for cachingplugins - Nx plugins and their configurationIf the user is asking about affected projects, read the affected projects reference for detailed commands and examples.
pnpm exec nx show projects
pnpm exec nx show projects --type app
pnpm exec nx show projects --type libpnpm exec nx show project X --json | jq '.targets | keys'
pnpm exec nx show project X --json | jq '.targets.build'# Use the project graph to find dependents
pnpm exec nx graph --print | jq '.graph.dependencies | to_entries[] | select(.value[].target == "Y") | .key'When processing nx CLI results, use command-line tools to compute the answer programmatically rather than counting or parsing output manually. Always use --json flags to get structured output that can be processed with jq, grep, or other tools you have installed locally.
pnpm exec nx show projects --jsonExample output:
["my-app", "my-app-e2e", "shared-ui", "shared-utils", "api"]Common operations:
# Count projects
pnpm exec nx show projects --json | jq 'length'
# Filter by pattern
pnpm exec nx show projects --json | jq '.[] | select(startswith("shared-"))'
# Get affected projects as array
pnpm exec nx show projects --affected --json | jq '.'pnpm exec nx show project my-app --jsonExample output:
{
"root": "apps/my-app",
"name": "my-app",
"sourceRoot": "apps/my-app/src",
"projectType": "application",
"tags": ["type:app", "scope:client"],
"targets": {
"build": {
"executor": "@nx/vite:build",
"options": { "outputPath": "dist/apps/my-app" }
},
"serve": {
"executor": "@nx/vite:dev-server",
"options": { "buildTarget": "my-app:build" }
},
"test": {
"executor": "@nx/vite:test",
"options": {}
}
},
"implicitDependencies": []
}Common operations:
# Get target names
pnpm exec nx show project my-app --json | jq '.targets | keys'
# Get specific target config
pnpm exec nx show project my-app --json | jq '.targets.build'
# Get tags
pnpm exec nx show project my-app --json | jq '.tags'
# Get project root
pnpm exec nx show project my-app --json | jq -r '.root'pnpm exec nx graph --printExample output:
{
"graph": {
"nodes": {
"my-app": {
"name": "my-app",
"type": "app",
"data": { "root": "apps/my-app", "tags": ["type:app"] }
},
"shared-ui": {
"name": "shared-ui",
"type": "lib",
"data": { "root": "libs/shared-ui", "tags": ["type:ui"] }
}
},
"dependencies": {
"my-app": [
{ "source": "my-app", "target": "shared-ui", "type": "static" }
],
"shared-ui": []
}
}
}Common operations:
# Get all project names from graph
pnpm exec nx graph --print | jq '.graph.nodes | keys'
# Find dependencies of a project
pnpm exec nx graph --print | jq '.graph.dependencies["my-app"]'
# Find projects that depend on a library
pnpm exec nx graph --print | jq '.graph.dependencies | to_entries[] | select(.value[].target == "shared-ui") | .key'# Check what targets exist on the project
pnpm exec nx show project X --json | jq '.targets | keys'
# Check if any projects have that target
pnpm exec nx show projects --withTarget targetpnpm exec nx sync
pnpm exec nx reset # if sync doesn't fix stale cachee887790
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.