Project links
Updated October 27, 2026
Every project has a handful of places you keep opening: the live site, the deploy dashboard, Stripe, analytics, staging, the design file. Project links keep them in one list per gem. You can name each one, group them, put them in order, and leave a note on any of them. Your agent uses the same list, so it can look up a URL instead of asking you for it.
Where they live
The links are a plain LINKS.md file at the project root, written in the same style as the Workbench’s WORKBENCH.md:
## Production
- [Live site](https://example.com) #a1b2c3d4
The marketing site. Deploys from main.
- [Stripe](https://dashboard.stripe.com) #0f9e8d7c
## Staging
- [Preview](https://staging.example.com) #5e6f7a8b
## Groupheaders group the links.- Each row is a markdown link:
- [name](url). - Lines indented under a row are its note.
- The
#a1b2c3d4at the end of a row is its id. crystl adds it, and you can leave it alone.
crystl keeps any line it does not recognise exactly as it is. crystl does not add LINKS.md to .gitignore, so you can commit it and share the list with your team.
The links panel
The links panel is part of the Workbench drawer. Open the drawer from the pull-tab on the right edge of the terminal, then press ⌘[ once, or use the arrows beside the title, to go to links.
- Click a link to open it, anywhere in its row. A web address opens in your browser. A file path or an app link (such as
vscode://orfigma://) opens in the app macOS uses for it. If macOS cannot open a link, for example because the file is not there or no app handles that kind of link, the panel says so in one line. - Hover over a row to see copy, edit and delete. Right-click a row to open it, copy the link, copy it as markdown, edit it or delete it.
- Click edit, or choose edit from the right-click menu, to open the link form. It has a field for the name, the URL, a note and the group. Pick a group from the list, or type a new name to make a new group. Click save, or press Return in a one-line field. cancel or Escape closes the form and changes nothing. After a save, the link lights up where it landed.
- + link opens the same form to add a link to the first group. The + on a group’s header adds one to that group. Save stays off until the link has a name and a URL.
- + group adds a group. Double-click a group’s name to rename it. Each group name is used once, so a name that another group already has is refused.
- Click the chevron on a group’s header to collapse it. crystl remembers which groups you collapsed, for each gem.
- Drag a row to reorder it, or drop it into another group. Drag a group’s header to move the whole group.
- The × on a group’s header removes the header. Its links stay, and join the group above.
The panel watches the file. When your agent adds a link, or you edit LINKS.md in another editor, the panel updates without being reopened. If your agent changes or removes a link while you are editing that same link, your edit is not saved. The form says so and keeps what you typed, and the panel shows the file as it is now.
From the command line
crystl links reads and edits the same file. Your agent uses it to find a URL before asking you for one, and to add a link when it finds one worth keeping. See crystl links for every flag.
crystl links # list them, numbered and grouped
crystl links add "Stripe" https://dashboard.stripe.com --group Billing --note "payouts on Fridays"
crystl links open # show the links panel
Listing and opening the panel are free. Changing links from the CLI needs Guild. On a free account, your agent edits LINKS.md directly, because it is a plain file in the project.