| name | sem-semantic-diff |
| description | Use the `sem` CLI to view semantic codebase diffs, evaluate dependency graphs, perform impact analysis, and investigate code history without formatting noise. Use instead of standard git diff/log when analyzing structural code changes. |
| key_features | ["Semantic diffs","impact analysis","dependency graphs"] |
sem Semantic Diff Skill
This skill provides instructions on how to use sem, a semantic version control tool that tracks functions, classes, and types rather than just lines of text.
Capabilities & Limitations (What sem Does Well and Does Not Do)
What sem Does Well
- Local Codebase Navigation: Builds a precise semantic dependency graph of all classes, functions, methods, and properties defined within the local repository.
- Structural Diffs & History: Shows added, modified, renamed, or deleted entities across commits without formatting or whitespace noise.
- Internal Impact Analysis: Tracing the transitive impact (
sem impact) or callers/callees (sem graph) of local entities across the workspace.
What sem Does Not Do (Important Limitations)
- External Dependencies:
sem only indexes entities defined within the local repository's source files. It does not parse or track external packages or transitive library dependencies (e.g., from pubspec.yaml, node_modules, Cargo.toml, etc.).
- External Impact Analysis: Running
sem impact on an external type or class (e.g., DartType or ClassElement from an external package) will fail with error: Entity '...' not found.
- Workflow for External Packages: If tasked with evaluating how an external package is used across a codebase, do not start with
sem. Use standard grep or ripgrep to find import statements and locate local wrapper classes or helper functions. Once local wrapper entities are identified, use sem impact on those local entities to trace their usage across the codebase.
Finding Entities (<entity_name>)
Many sem commands require an <entity_name>. You can discover the exact names or IDs of entities in the codebase using the following methods:
-
List entities in a file or directory:
Use sem entities [PATH] to see all parsed functions, classes, and types in a specific file or directory.
sem entities src/utils.ts
sem entities src/utils.ts --format json
-
From semantic diffs:
When you run sem diff, the output will list the names of the entities that have been added, modified, or deleted.
-
Entity IDs:
If a name is ambiguous (e.g., multiple files have a setup() function), you can use the fully qualified entity_id provided in the JSON output of sem diff or sem entities (e.g., --entity-id "src/utils.ts::function::setup").
Core Commands & Full Options Reference (No Need to Run --help)
To avoid running --help, use this comprehensive reference of available commands and their flags. Always use --format json when parsing programmatically to guarantee consistency across all subcommands.
1. Semantic Diff (sem diff)
Show added, modified, deleted, or renamed entities in the working tree or between commits.
sem diff
sem diff --staged
sem diff --commit <COMMIT>
sem diff --from <COMMIT_1> --to <COMMIT_2>
sem diff -v
sem diff --format json
Additional options: -C, --cwd <DIR> (Run as if started in directory), --file-exts <EXTS>... (Filter by extensions).
2. Impact Analysis (sem impact)
Analyze the transitive impact of changing an entity (BFS traversal).
sem impact <entity_name>
sem impact --entity-id "src/utils.ts::function::setup"
sem impact setup --file src/test_utils.ts
sem impact <entity_name> --format json
sem impact <entity_name> --deps
sem impact <entity_name> --dependents
sem impact <entity_name> --tests
Additional options: --depth <DEPTH> (Max traversal depth, default 2, 0 = unlimited), --file-exts <EXTS>..., --no-cache.
3. Dependency Graph (sem graph)
View the full entity dependency graph for the codebase.
sem graph
sem graph src/ --format json
Additional options: --format <FORMAT> (terminal, json), --file-exts <EXTS>..., --no-cache.
4. Semantic Blame (sem blame)
Identify who last modified each function or class within a file.
sem blame <file_path>
5. Semantic Log (sem log)
Show the evolution of an entity through git history.
sem log <entity_name>
6. Entity Context (sem context)
Show token-budgeted context for an entity. This is intended for providing code snippets directly to an LLM's context window.
sem context <entity_name> --budget 8000
sem context <entity_name> --format json
Additional options: --entity-id <ID>, --file <FILE>, --file-exts <EXTS>..., --no-cache.
7. List Entities (sem entities)
List entities under a file or directory path.
sem entities src/
sem entities src/ --format json
Best Practices