Syntax
Description
Theadd-ref command inserts an inline cross-reference into a spec or issue’s markdown content using Obsidian-style [[ID]] syntax. This is useful for:
- Adding references programmatically via CLI or scripts
- Precisely controlling reference placement
- Optionally creating relationships alongside references
- Maintaining clean, version-controlled markdown
- The markdown file is updated with
[[REFERENCE-ID]]syntax - The content is synced to the database
- Changes are exported to JSONL
- An optional typed relationship can be created simultaneously
You can also add references manually by editing markdown files directly. The
add-ref command is for programmatic insertion.Arguments
The entity to add the reference toExample:
SPEC-001 or ISSUE-001This is where the reference will be inserted (the markdown file that will be modified).The entity being referencedExample:
ISSUE-042 or SPEC-010This is what you’re referencing (the ID that will appear in [[ID]] syntax).Options
Insert at specific line numberExample:
--line 15The reference is inserted at (or after/before) this line number. Use --position to control before/after.Note: You must specify either --line or --text, but not both.Search for text to insert nearExample:
--text "Requirements:"Searches for this text in the content and inserts the reference near it. Use --position to control before/after.Note: You must specify either --line or --text, but not both.Position relative to line or textExample:
--position before or --position afterControls whether the reference is inserted before or after the specified line/text.Custom display text for the linkExample:
--display "OAuth Implementation"Creates a reference with custom text: [[ISSUE-042|OAuth Implementation]]Without this, the reference is just [[ISSUE-042]].Create a typed relationship alongside the referenceExample:
--type implementsAutomatically creates a relationship of the specified type when adding the reference. Valid types: blocks, implements, depends-on, references, related, discovered-from.Format style: inline or newlineExample:
--format newlineinline- Adds reference on the same line as the insertion pointnewline- Adds reference on a new line
Examples
Insert by Line Number
Add reference at line 15:Expected output
Expected output
Insert by Text Search
Add reference after “Requirements:” heading:Expected output
Expected output
Insert with Custom Display Text
Add reference with readable text:Expected output
Expected output
[[ISSUE-042|OAuth Implementation]]
Insert with Relationship Type
Add reference and create typed relationship:Expected output
Expected output
- Adds
[[ISSUE-042]]to the markdown - Creates an
implementsrelationship between ISSUE-042 and SPEC-001
Insert on New Line
Add reference on its own line:Expected output
Expected output
Insert Before Text
Add reference before a specific location:Expected output
Expected output
Complete Example
Add reference with all options:Expected output
Expected output
JSON Output
Get machine-readable output:JSON output
JSON output
Reference Syntax
The command creates Obsidian-style wiki links:Basic Reference
[[ISSUE-042]]
With Display Text
[[ISSUE-042|OAuth Implementation]]
With Relationship Type
[[ISSUE-042]] AND creates implements relationship
The relationship type is not visible in the markdown - it creates a separate relationship in the database.
Line vs Text Insertion
Using —line (Precise Positioning)
- Exact positioning
- No ambiguity
- Fast execution
- Line numbers change as content is edited
- Need to know exact line number
Using —text (Content-Based Positioning)
- Based on stable content
- More maintainable
- Better for headings/sections
- Requires exact text match
- May fail if text changes
Common Workflows
Adding Implementation References to Spec
Building Linked Specifications
Scripted Reference Addition
Add references programmatically:Manual Alternative
You can also add references manually by editing markdown files:Manual editing gives you full control over placement and formatting. Use
add-ref for programmatic automation.Difference from link Command
add-ref
Inline references in markdown
- Modifies markdown content
- Visible as
[[ID]]in files - Can include display text
- Optional relationship creation
- Good for documentation
link
Database relationships
- Creates typed relationship
- Not visible in markdown
- Required relationship type
- Bidirectional tracking
- Good for dependency modeling
- add-ref: When you want the reference visible in markdown for human readers
- link: When you want to model dependencies and relationships for graph queries
Common Questions
Can I add multiple references at once?
Can I add multiple references at once?
No,
add-ref processes one reference at a time. For bulk additions, use shell scripting:What if the text I'm searching for doesn't exist?
What if the text I'm searching for doesn't exist?
The command will error with “Text not found”. Ensure the search text exactly matches what’s in the file (case-sensitive).
Can I remove a reference?
Can I remove a reference?
There’s no
remove-ref command. To remove references:- Edit the markdown file directly
- Remove the
[[ID]]syntax - Run
sudocode sync
Does this work with archived entities?
Does this work with archived entities?
Yes, you can add references to archived specs or issues, though they’ll be hidden from default listings.
What happens if I add the same reference twice?
What happens if I add the same reference twice?
The command will add the reference each time you run it. You can end up with duplicate references in the markdown. Always check before adding.
Can I use this with non-existent entities?
Can I use this with non-existent entities?
No, both entity_id and reference_id must exist in the database. The command validates existence before adding the reference.
Troubleshooting
Error: Either --line or --text must be specified
Error: Either --line or --text must be specified
Cause: You didn’t provide a location for insertionSolution:
Specify one location method:
Error: Cannot specify both --line and --text
Error: Cannot specify both --line and --text
Cause: You provided both location methodsSolution:
Choose only one:
Error: Entity not found
Error: Entity not found
Cause: The entity_id doesn’t existSolution:
Verify the ID:
Error: File not found
Error: File not found
Cause: The markdown file doesn’t exist for the entitySolution:
Sync to create markdown files:
Error: Text not found
Error: Text not found
Cause: The search text doesn’t exist in the fileSolution:
- Check for exact match (case-sensitive)
- View the file to verify text:
- Use different search text or switch to
--line
Error: Invalid line number
Error: Invalid line number
Cause: Line number is less than 1 or not a numberSolution:
Use a valid positive integer:
Error: Line number out of bounds
Error: Line number out of bounds
Cause: The line number is greater than the number of lines in the fileSolution:
Check the file length:Use a valid line number within range.
Related Commands
link
Create typed relationships
spec show
View spec content
issue show
View issue content
sync
Sync markdown files
Next Steps
Cross-References in Markdown
Learn more about using Obsidian-style links in sudocode

