A command-line tool that connects Linear issues with Gemini AI. Fetch a ticket, get analysis, and work through resolution steps in a guided chat interface.
- Issue Analysis - Fetch any Linear issue and get AI-powered analysis with resolution steps
- Parent/Child Context - Automatically includes parent issue context for sub-issues
- Web Research - Searches for relevant knowledge to help resolve issues
- Status Management - Change issue status directly from the CLI
- Assignee Browser - Browse and filter issues by team member
- Guided Workflow - AI asks clarifying questions to help you resolve tickets faster
- Lua 5.1 or higher
- curl
lua-linenoise- For tab completion and arrow key support- Or use
rlwrap lua linea.luaas an alternative
git clone https://github.com/dotMavriQ/linea
cd lineaOn Linux/Mac, make it executable:
chmod +x linea.lua- Go to https://aistudio.google.com/app/apikey
- Click "Create API Key"
- Copy the key
- Go to https://linear.app/settings/api
- Click "Create key"
- Give it a name (e.g., "Linea CLI")
- Copy the key
Start Linea:
lua linea.luaOn first run, you will be prompted to enter your API keys:
Enter your gemini API key: <paste your Gemini key>
Enter your linear API key: <paste your Linear key>
Keys are saved to ~/.config/linea/config (Linux/Mac) or ~/.linea/config as fallback.
- Load an issue - Type an issue ID like
MAR-870 - Get analysis - Linea fetches the issue, searches for relevant info, and suggests resolution steps
- Work through it - Ask questions, get guidance, implement the fix
- Update status - Use
chstatusto mark it done - Move on - Type
moveonto clear context and start a new ticket
| Command | Action |
|---|---|
help |
Show help |
clear |
Clear screen and reset context |
moveon |
Wipe context and start fresh with a new ticket |
chstatus |
Change issue status (interactive picker) |
assignee |
Browse issues by team member and status |
exit |
Quit |
MAR-870 Load and analyze an issue
What's blocking this? Ask about the current issue
How do I implement this? Get step-by-step guidance
chstatus Pick a new status from menu
moveon Clear and start fresh
assignee Browse issues by person
Type chstatus to see available statuses and pick one:
Change status for MAR-870:
1) Backlog
2) Todo
3) In Progress ← current
4) In Review
5) Done
6) Canceled
Select (1-6) or Enter to cancel: 5
✓ Status updated to: Done
Type assignee to find issues for a specific team member:
Search assignee: john
✓ Found: John Smith
Status filter (or Enter for all): in progress
✓ Found 3 issue(s):
1) MAR-870: Implement Logo Strip
[In Progress] [2 sub-issues]
2) MAR-892: Fix responsive layout
[In Progress] (sub of MAR-870)
Select issue to focus (1-2) or Enter to skip: 1
Config file location:
- Linux/Mac:
~/.config/linea/configor~/.linea/config - Windows:
%USERPROFILE%\.linea\config
Format:
[gemini]
api_key=your_gemini_key
[linear]
api_key=your_linear_keyTo reset your keys, delete the config file and run Linea again.
For arrow key navigation and tab completion, either:
Option A - Install lua-linenoise:
luarocks install linenoiseOption B - Use rlwrap:
# Install rlwrap
sudo apt install rlwrap # Debian/Ubuntu
brew install rlwrap # Mac
# Run with rlwrap
rlwrap lua linea.luaInstall curl:
- Ubuntu/Debian:
sudo apt install curl - Mac:
brew install curl - Windows: Use WSL or install curl from https://curl.se
- Check that you copied the full key
- Gemini: Ensure the key is from AI Studio, not Google Cloud
- Linear: Ensure the key has read access to issues
- Check the issue ID format (e.g.,
MAR-870,VET6-1617) - Verify you have access to that team in Linear
Your terminal doesn't have readline support. Use rlwrap lua linea.lua or install lua-linenoise.
linea/
linea.lua Main entry point
src/
chat.lua Chat interface and command handling
config.lua Configuration management
input.lua Readline/input handling
tui.lua Terminal UI formatting
utils.lua Utilities, JSON parser, web search
api/
gemini.lua Gemini API client
linear.lua Linear GraphQL client
MIT
