lituanic 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/browser/SKILL.md +140 -0
- package/.claude/skills/github/SKILL.md +143 -0
- package/.claude/skills/gws/SKILL.md +98 -0
- package/.claude/skills/linear/SKILL.md +126 -0
- package/.claude/skills/op/SKILL.md +62 -0
- package/.claude/skills/slack/SKILL.md +25 -0
- package/LICENSE +21 -0
- package/README.md +378 -0
- package/package.json +64 -0
- package/src/__tests__/config.test.ts +106 -0
- package/src/__tests__/sessions.test.ts +85 -0
- package/src/__tests__/smoke.test.ts +28 -0
- package/src/cli.ts +87 -0
- package/src/config.ts +137 -0
- package/src/doctor.ts +117 -0
- package/src/gateway.ts +299 -0
- package/src/index.ts +201 -0
- package/src/init.ts +158 -0
- package/src/memory.ts +65 -0
- package/src/sessions.ts +75 -0
- package/src/think.ts +188 -0
- package/src/tools.ts +40 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: browser
|
|
3
|
+
description: Browse websites, take screenshots, fill forms, scrape content, and
|
|
4
|
+
automate web interactions. Use when asked to "open a website", "take a screenshot",
|
|
5
|
+
"check a page", "fill a form", "scrape data", or do any web browsing.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Browser (agent-browser CLI)
|
|
9
|
+
|
|
10
|
+
Use the `agent-browser` CLI via Bash. A Rust-based headless browser for AI agents.
|
|
11
|
+
|
|
12
|
+
## Quick reference
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Open a URL
|
|
16
|
+
agent-browser open "https://example.com"
|
|
17
|
+
|
|
18
|
+
# Take a screenshot
|
|
19
|
+
agent-browser screenshot /tmp/page.jpg
|
|
20
|
+
|
|
21
|
+
# Full-page screenshot with element annotations
|
|
22
|
+
agent-browser screenshot /tmp/page.jpg --full --annotate
|
|
23
|
+
|
|
24
|
+
# Get page snapshot (accessibility tree with interactive element refs)
|
|
25
|
+
agent-browser snapshot -i
|
|
26
|
+
|
|
27
|
+
# Click an element (refs from snapshot: @e1, @e2, etc.)
|
|
28
|
+
agent-browser click @e3
|
|
29
|
+
|
|
30
|
+
# Fill a form field
|
|
31
|
+
agent-browser fill @e5 "hello@example.com"
|
|
32
|
+
|
|
33
|
+
# Type text (without clearing first)
|
|
34
|
+
agent-browser type @e5 "additional text"
|
|
35
|
+
|
|
36
|
+
# Press a key
|
|
37
|
+
agent-browser press Enter
|
|
38
|
+
|
|
39
|
+
# Scroll down
|
|
40
|
+
agent-browser scroll down 500
|
|
41
|
+
|
|
42
|
+
# Get text content
|
|
43
|
+
agent-browser get text "h1"
|
|
44
|
+
|
|
45
|
+
# Get current URL
|
|
46
|
+
agent-browser get url
|
|
47
|
+
|
|
48
|
+
# Wait for element or time
|
|
49
|
+
agent-browser wait ".loaded" --state visible
|
|
50
|
+
agent-browser wait 2000
|
|
51
|
+
|
|
52
|
+
# Evaluate JavaScript
|
|
53
|
+
agent-browser eval "document.title"
|
|
54
|
+
|
|
55
|
+
# Close the browser
|
|
56
|
+
agent-browser close
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Workflow pattern
|
|
60
|
+
|
|
61
|
+
1. `open <url>` — navigate to the page
|
|
62
|
+
2. `snapshot -i` — get the accessibility tree with interactive element refs (@e1, @e2...)
|
|
63
|
+
3. Interact: `click @e3`, `fill @e5 "text"`, `press Enter`
|
|
64
|
+
4. `snapshot -i` again — refs are invalidated after any DOM change
|
|
65
|
+
5. `screenshot /tmp/result.jpg` — capture the result
|
|
66
|
+
|
|
67
|
+
## Screenshots
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Set retina viewport (1400x735 at 2x)
|
|
71
|
+
agent-browser set viewport 1400 735 2
|
|
72
|
+
|
|
73
|
+
# JPEG screenshot (default)
|
|
74
|
+
agent-browser screenshot /tmp/page.jpg
|
|
75
|
+
|
|
76
|
+
# Full-page screenshot
|
|
77
|
+
agent-browser screenshot /tmp/full.jpg --full
|
|
78
|
+
|
|
79
|
+
# Annotated screenshot (numbered labels on interactive elements)
|
|
80
|
+
agent-browser screenshot /tmp/annotated.jpg --annotate
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## Sessions
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Persistent session (saves cookies + localStorage across runs)
|
|
87
|
+
agent-browser --session-name mysite open "https://example.com"
|
|
88
|
+
agent-browser --session-name mysite screenshot /tmp/page.jpg
|
|
89
|
+
agent-browser --session-name mysite close
|
|
90
|
+
|
|
91
|
+
# List saved sessions
|
|
92
|
+
agent-browser state list
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Tabs
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Open new tab
|
|
99
|
+
agent-browser tab new "https://other.com"
|
|
100
|
+
|
|
101
|
+
# List tabs
|
|
102
|
+
agent-browser tab
|
|
103
|
+
|
|
104
|
+
# Switch to tab 2
|
|
105
|
+
agent-browser tab 2
|
|
106
|
+
|
|
107
|
+
# Close current tab
|
|
108
|
+
agent-browser tab close
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Cloud browser (Kernel)
|
|
112
|
+
|
|
113
|
+
For sites with bot detection, CAPTCHAs, or when you need stealth:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Use Kernel cloud browser (requires KERNEL_API_KEY env var)
|
|
117
|
+
agent-browser -p kernel open "https://example.com"
|
|
118
|
+
agent-browser -p kernel screenshot /tmp/page.jpg
|
|
119
|
+
agent-browser -p kernel close
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Cookie and page cleanup
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Remove cookie banners, chat widgets, popups before screenshots
|
|
126
|
+
agent-browser eval "document.querySelectorAll('[class*=cookie],[class*=consent],[class*=popup],[class*=chat-widget]').forEach(e => e.remove())"
|
|
127
|
+
|
|
128
|
+
# Set Mac-like font rendering
|
|
129
|
+
agent-browser eval "document.body.style.fontFamily = '-apple-system, BlinkMacSystemFont, system-ui, sans-serif'"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Rules
|
|
133
|
+
|
|
134
|
+
- Element refs (`@e1`, `@e2`) are invalidated after ANY page change. Always re-snapshot after navigation, form submission, or clicks that cause DOM updates.
|
|
135
|
+
- Use `snapshot -i` to discover interactive elements, NOT CSS selectors. The refs are more reliable.
|
|
136
|
+
- Default viewport is 1280x720. Set `1400 735 2` for retina screenshots.
|
|
137
|
+
- Screenshots save as JPEG by default. Specify `.png` extension for PNG.
|
|
138
|
+
- Use `--session-name` (not `--session`) for persistent cookies across runs.
|
|
139
|
+
- For complex JavaScript, use `eval --stdin <<'EOF'` to avoid shell escaping issues.
|
|
140
|
+
- Install: `npm i -g agent-browser && agent-browser install`
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github
|
|
3
|
+
description: Manage repositories, pull requests, issues, and releases on GitHub.
|
|
4
|
+
Use when asked to "create a PR", "check CI", "merge", "create a release",
|
|
5
|
+
"open an issue", or do any GitHub operations.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# GitHub (gh CLI)
|
|
9
|
+
|
|
10
|
+
Use the `gh` CLI via Bash. Auth is via `GH_TOKEN` env var (auto-injected).
|
|
11
|
+
|
|
12
|
+
## Pull requests
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Create a PR
|
|
16
|
+
gh pr create --title "Fix auth bug" --body "Fixes the token validation issue."
|
|
17
|
+
|
|
18
|
+
# Create PR from current branch to main
|
|
19
|
+
gh pr create --base main --fill
|
|
20
|
+
|
|
21
|
+
# List open PRs
|
|
22
|
+
gh pr list
|
|
23
|
+
|
|
24
|
+
# View a PR
|
|
25
|
+
gh pr view 42
|
|
26
|
+
|
|
27
|
+
# Check CI status
|
|
28
|
+
gh pr checks 42
|
|
29
|
+
|
|
30
|
+
# Merge a PR
|
|
31
|
+
gh pr merge 42 --squash --delete-branch
|
|
32
|
+
|
|
33
|
+
# Review a PR
|
|
34
|
+
gh pr diff 42
|
|
35
|
+
gh pr review 42 --approve
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Issues
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Create an issue
|
|
42
|
+
gh issue create --title "Bug: login fails" --body "Steps to reproduce..."
|
|
43
|
+
|
|
44
|
+
# List issues
|
|
45
|
+
gh issue list --state open
|
|
46
|
+
|
|
47
|
+
# View an issue
|
|
48
|
+
gh issue view 123
|
|
49
|
+
|
|
50
|
+
# Close an issue
|
|
51
|
+
gh issue close 123 --comment "Fixed in #42"
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Repositories
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Clone a repo
|
|
58
|
+
gh repo clone owner/repo
|
|
59
|
+
|
|
60
|
+
# Create a new repo
|
|
61
|
+
gh repo create my-project --public --description "My project"
|
|
62
|
+
|
|
63
|
+
# View repo info
|
|
64
|
+
gh repo view owner/repo
|
|
65
|
+
|
|
66
|
+
# Fork a repo
|
|
67
|
+
gh repo fork owner/repo --clone
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Releases
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
# Create a release
|
|
74
|
+
gh release create v1.0.0 --title "v1.0.0" --notes "First release"
|
|
75
|
+
|
|
76
|
+
# Create release with auto-generated notes
|
|
77
|
+
gh release create v1.0.0 --generate-notes
|
|
78
|
+
|
|
79
|
+
# List releases
|
|
80
|
+
gh release list
|
|
81
|
+
|
|
82
|
+
# Upload assets to a release
|
|
83
|
+
gh release upload v1.0.0 ./dist/app.zip
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Actions / CI
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# List workflow runs
|
|
90
|
+
gh run list
|
|
91
|
+
|
|
92
|
+
# View a specific run
|
|
93
|
+
gh run view 12345
|
|
94
|
+
|
|
95
|
+
# Watch a run in progress
|
|
96
|
+
gh run watch 12345
|
|
97
|
+
|
|
98
|
+
# Re-run a failed workflow
|
|
99
|
+
gh run rerun 12345 --failed
|
|
100
|
+
|
|
101
|
+
# View workflow logs
|
|
102
|
+
gh run view 12345 --log-failed
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## API (raw)
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
# GET request
|
|
109
|
+
gh api repos/owner/repo/pulls
|
|
110
|
+
|
|
111
|
+
# POST request
|
|
112
|
+
gh api repos/owner/repo/issues -f title="Bug" -f body="Description"
|
|
113
|
+
|
|
114
|
+
# GraphQL
|
|
115
|
+
gh api graphql -f query='{ viewer { login } }'
|
|
116
|
+
|
|
117
|
+
# Paginated listing
|
|
118
|
+
gh api repos/owner/repo/issues --paginate
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
## Git workflow
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
# Standard PR workflow
|
|
125
|
+
git checkout -b fix/auth-bug
|
|
126
|
+
# ... make changes ...
|
|
127
|
+
git add -A
|
|
128
|
+
git commit -m "fix: resolve token validation issue"
|
|
129
|
+
git push -u origin fix/auth-bug
|
|
130
|
+
gh pr create --fill
|
|
131
|
+
|
|
132
|
+
# After PR is approved
|
|
133
|
+
gh pr merge --squash --delete-branch
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Rules
|
|
137
|
+
|
|
138
|
+
- Always create PRs for code changes — never push directly to main.
|
|
139
|
+
- Use conventional commit prefixes: `feat:`, `fix:`, `chore:`, `refactor:`, `docs:`.
|
|
140
|
+
- Include issue references in PR descriptions (e.g., "Fixes #123").
|
|
141
|
+
- Check CI status before merging: `gh pr checks`.
|
|
142
|
+
- Use `--squash` for clean history when merging.
|
|
143
|
+
- Use branch names that reference issues: `fix/PROJ-123-auth-bug`.
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gws
|
|
3
|
+
description: Manage email, calendar, and drive via Google Workspace. Use when asked to
|
|
4
|
+
"send an email", "check email", "schedule a meeting", "create a document",
|
|
5
|
+
"upload to drive", or manage Google Workspace resources.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Google Workspace (gws CLI)
|
|
9
|
+
|
|
10
|
+
Use the `gws` CLI from `@googleworkspace/cli` via Bash. Auth is via GWS credential env vars.
|
|
11
|
+
|
|
12
|
+
The `gws` CLI dynamically generates commands from Google's API. Use `gws schema` to discover available methods.
|
|
13
|
+
|
|
14
|
+
## Email (Gmail)
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Send an email
|
|
18
|
+
gws gmail +send --to "user@example.com" --subject "Subject" --body "Body text"
|
|
19
|
+
|
|
20
|
+
# Send with HTML
|
|
21
|
+
gws gmail +send --to "user@example.com" --subject "Subject" --html "<h1>Hello</h1>"
|
|
22
|
+
|
|
23
|
+
# List recent messages
|
|
24
|
+
gws gmail messages list --params '{"maxResults": 10}'
|
|
25
|
+
|
|
26
|
+
# Read a specific message
|
|
27
|
+
gws gmail messages get --params '{"id": "MESSAGE_ID", "format": "full"}'
|
|
28
|
+
|
|
29
|
+
# Search emails
|
|
30
|
+
gws gmail messages list --params '{"q": "from:user@example.com after:2026/03/01", "maxResults": 10}'
|
|
31
|
+
|
|
32
|
+
# Triage inbox (helper)
|
|
33
|
+
gws gmail +triage
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Calendar
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# Show today's agenda
|
|
40
|
+
gws calendar +agenda --today
|
|
41
|
+
|
|
42
|
+
# Show this week
|
|
43
|
+
gws calendar +agenda --week
|
|
44
|
+
|
|
45
|
+
# Create an event
|
|
46
|
+
gws calendar +insert --summary "Meeting" --start "2026-03-18T10:00:00" --end "2026-03-18T11:00:00"
|
|
47
|
+
|
|
48
|
+
# Create with attendees
|
|
49
|
+
gws calendar +insert --summary "Meeting" --start "2026-03-18T10:00:00" --end "2026-03-18T11:00:00" --attendees "user@example.com"
|
|
50
|
+
|
|
51
|
+
# List events (raw API)
|
|
52
|
+
gws calendar events list --params '{"timeMin": "2026-03-17T00:00:00Z", "maxResults": 10}'
|
|
53
|
+
|
|
54
|
+
# Delete an event
|
|
55
|
+
gws calendar events delete --params '{"eventId": "EVENT_ID"}'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Drive
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# List files
|
|
62
|
+
gws drive files list --params '{"pageSize": 10}'
|
|
63
|
+
|
|
64
|
+
# Upload a file
|
|
65
|
+
gws drive +upload --file ./report.pdf --name "Q1 Report"
|
|
66
|
+
|
|
67
|
+
# Download a file
|
|
68
|
+
gws drive +download --file-id "FILE_ID" --output ./downloaded.pdf
|
|
69
|
+
|
|
70
|
+
# Create a folder
|
|
71
|
+
gws drive files create --json '{"name": "Project Files", "mimeType": "application/vnd.google-apps.folder"}'
|
|
72
|
+
|
|
73
|
+
# Search files
|
|
74
|
+
gws drive files list --params '{"q": "name contains '\''report'\''", "pageSize": 10}'
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Discovery
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
# List available Gmail methods
|
|
81
|
+
gws schema gmail
|
|
82
|
+
|
|
83
|
+
# Show method details
|
|
84
|
+
gws schema gmail.users.messages.send
|
|
85
|
+
|
|
86
|
+
# List all available services
|
|
87
|
+
gws schema
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Rules
|
|
91
|
+
|
|
92
|
+
- Helper commands use `+` prefix (e.g., `+send`, `+agenda`, `+upload`). These are simplified wrappers.
|
|
93
|
+
- Raw API access uses `gws <service> <resource> <method> --params '{...}'` or `--json '{...}'`.
|
|
94
|
+
- Use `gws schema <service>` to discover available methods and parameters.
|
|
95
|
+
- Always check before sending emails — confirm recipient and content.
|
|
96
|
+
- For calendar events, use ISO 8601 timestamps with timezone.
|
|
97
|
+
- Use `--format json` for programmatic processing of results.
|
|
98
|
+
- Install: `npm i -g @googleworkspace/cli`
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linear
|
|
3
|
+
description: Manage issues, projects, and milestones in Linear. Use when asked to
|
|
4
|
+
"create an issue", "check Linear", "triage", "update status", "start work",
|
|
5
|
+
or work on assigned tasks.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Linear
|
|
9
|
+
|
|
10
|
+
Use the Linear GraphQL API via curl. Auth is via `LINEAR_API_KEY` env var (auto-injected).
|
|
11
|
+
|
|
12
|
+
## API endpoint
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
POST https://api.linear.app/graphql
|
|
16
|
+
Authorization: $LINEAR_API_KEY
|
|
17
|
+
Content-Type: application/json
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick reference
|
|
21
|
+
|
|
22
|
+
### List issues assigned to me
|
|
23
|
+
```bash
|
|
24
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
25
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
26
|
+
-H "Content-Type: application/json" \
|
|
27
|
+
-d '{"query": "{ viewer { assignedIssues(filter: { state: { type: { in: [\"started\", \"unstarted\"] } } }) { nodes { identifier title state { name } priority priorityLabel } } } }"}' | jq '.data.viewer.assignedIssues.nodes'
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### View an issue
|
|
31
|
+
```bash
|
|
32
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
33
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
34
|
+
-H "Content-Type: application/json" \
|
|
35
|
+
-d '{"query": "{ issue(id: \"ISSUE_ID\") { identifier title description state { name } assignee { name } labels { nodes { name } } comments { nodes { body user { name } createdAt } } } }"}' | jq '.data.issue'
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Create an issue
|
|
39
|
+
```bash
|
|
40
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
41
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
42
|
+
-H "Content-Type: application/json" \
|
|
43
|
+
-d '{"query": "mutation { issueCreate(input: { title: \"Fix auth bug\", teamId: \"TEAM_ID\", priority: 1 }) { success issue { identifier url } } }"}' | jq '.data.issueCreate'
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Update issue state
|
|
47
|
+
```bash
|
|
48
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
49
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
50
|
+
-H "Content-Type: application/json" \
|
|
51
|
+
-d '{"query": "mutation { issueUpdate(id: \"ISSUE_ID\", input: { stateId: \"STATE_ID\" }) { success } }"}' | jq '.data.issueUpdate'
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Add a comment
|
|
55
|
+
```bash
|
|
56
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
57
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
58
|
+
-H "Content-Type: application/json" \
|
|
59
|
+
-d '{"query": "mutation { commentCreate(input: { issueId: \"ISSUE_ID\", body: \"Started working on this.\" }) { success } }"}' | jq '.data.commentCreate'
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### List teams
|
|
63
|
+
```bash
|
|
64
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
65
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
66
|
+
-H "Content-Type: application/json" \
|
|
67
|
+
-d '{"query": "{ teams { nodes { id name key } } }"}' | jq '.data.teams.nodes'
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### List workflow states for a team
|
|
71
|
+
```bash
|
|
72
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
73
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
74
|
+
-H "Content-Type: application/json" \
|
|
75
|
+
-d '{"query": "{ workflowStates(filter: { team: { key: { eq: \"CRAFT\" } } }) { nodes { id name type } } }"}' | jq '.data.workflowStates.nodes'
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### List labels
|
|
79
|
+
```bash
|
|
80
|
+
curl -s -X POST https://api.linear.app/graphql \
|
|
81
|
+
-H "Authorization: $LINEAR_API_KEY" \
|
|
82
|
+
-H "Content-Type: application/json" \
|
|
83
|
+
-d '{"query": "{ issueLabels { nodes { id name } } }"}' | jq '.data.issueLabels.nodes'
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Autonomous work pattern
|
|
87
|
+
|
|
88
|
+
When triggered to "check Linear for assigned issues":
|
|
89
|
+
|
|
90
|
+
1. List issues assigned to you in started/unstarted state.
|
|
91
|
+
2. Pick the highest priority issue (priority 1 = urgent, 4 = low).
|
|
92
|
+
3. View the full issue (description + comments).
|
|
93
|
+
4. Add a workpad comment: "Starting work on this. Plan: ..."
|
|
94
|
+
5. Do the work (read code, make changes, run tests).
|
|
95
|
+
6. Update the workpad comment with progress.
|
|
96
|
+
7. When done, comment with a summary and update state to Done.
|
|
97
|
+
|
|
98
|
+
## Workpad pattern
|
|
99
|
+
|
|
100
|
+
Use a single persistent comment per issue for progress tracking:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
## Workpad — PROJ-123
|
|
104
|
+
|
|
105
|
+
**Status:** In Progress
|
|
106
|
+
**Started:** 2026-03-17
|
|
107
|
+
|
|
108
|
+
### Plan
|
|
109
|
+
1. Fix the auth middleware
|
|
110
|
+
2. Add tests
|
|
111
|
+
3. Update docs
|
|
112
|
+
|
|
113
|
+
### Progress
|
|
114
|
+
- [x] Read the auth module
|
|
115
|
+
- [x] Identified the bug in token validation
|
|
116
|
+
- [ ] Writing fix
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Rules
|
|
120
|
+
|
|
121
|
+
- Always check if an issue is already assigned before claiming it.
|
|
122
|
+
- Priority scale: 0 = no priority, 1 = urgent, 2 = high, 3 = medium, 4 = low.
|
|
123
|
+
- Use `jq` to parse all API responses.
|
|
124
|
+
- Mention issue IDs (PROJ-123) in git branch names for auto-linking.
|
|
125
|
+
- To find issue IDs, use the `identifier` field (e.g., "PROJ-123"), not the UUID `id`.
|
|
126
|
+
- To update state, first list workflow states to get the state ID, then use `issueUpdate`.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: op
|
|
3
|
+
description: Read secrets from 1Password using the op CLI. Use when asked to
|
|
4
|
+
"get a secret", "look up credentials", "check 1Password", or when you need
|
|
5
|
+
an API key or token that isn't in the environment.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 1Password (op CLI)
|
|
9
|
+
|
|
10
|
+
Use the `op` CLI via Bash. Auth is via `OP_SERVICE_ACCOUNT_TOKEN` env var (auto-injected).
|
|
11
|
+
|
|
12
|
+
## Quick reference
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
# Read a secret field
|
|
16
|
+
op read "op://VaultName/ItemName/fieldName"
|
|
17
|
+
|
|
18
|
+
# Read without trailing newline (for piping)
|
|
19
|
+
op read --no-newline "op://VaultName/ItemName/fieldName"
|
|
20
|
+
|
|
21
|
+
# List items in a vault
|
|
22
|
+
op item list --vault "VaultName"
|
|
23
|
+
|
|
24
|
+
# Get all fields of an item as JSON
|
|
25
|
+
op item get "ItemName" --vault "VaultName" --format json --reveal
|
|
26
|
+
|
|
27
|
+
# Get a specific field
|
|
28
|
+
op item get "ItemName" --vault "VaultName" --fields "fieldName" --reveal
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Rules
|
|
32
|
+
|
|
33
|
+
- ALWAYS use `--reveal` with `op item get`. Without it, secret values are concealed. (`op read` always reveals — no flag needed.)
|
|
34
|
+
- NEVER log, print, or post secrets to Slack. Use them inline in commands.
|
|
35
|
+
- NEVER write secrets to files. Pass them as env vars or pipe them.
|
|
36
|
+
- Prefer `op read "op://Vault/Item/field"` for single values.
|
|
37
|
+
- Use `op item get ... --format json --reveal` for multi-field items.
|
|
38
|
+
- Secret reference URIs (`op://...`) are case-insensitive.
|
|
39
|
+
- With service accounts, always specify `--vault` for item commands.
|
|
40
|
+
|
|
41
|
+
## Patterns
|
|
42
|
+
|
|
43
|
+
### Inject a secret into a command
|
|
44
|
+
```bash
|
|
45
|
+
GITHUB_TOKEN=$(op read --no-newline "op://MyVault/GitHub/token") gh pr create ...
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Check if op is available
|
|
49
|
+
```bash
|
|
50
|
+
op --version
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### List vaults
|
|
54
|
+
```bash
|
|
55
|
+
op vault list
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## When NOT to use op
|
|
59
|
+
|
|
60
|
+
- If the secret is already in the environment (check `echo $VAR_NAME` first).
|
|
61
|
+
- Most secrets should be injected at startup via `op run --env-file=.env.op -- bun start`.
|
|
62
|
+
- Only use `op read` at runtime for secrets not in the environment.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: slack
|
|
3
|
+
description: Send messages, react with emoji, and manage threads in Slack.
|
|
4
|
+
Use when asked to "reply", "post", "react", "notify", or communicate in Slack.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Slack
|
|
8
|
+
|
|
9
|
+
You have two typed tools for Slack via the `slack` MCP server:
|
|
10
|
+
|
|
11
|
+
## Tools
|
|
12
|
+
|
|
13
|
+
| Tool | Purpose | Required params |
|
|
14
|
+
|------|---------|-----------------|
|
|
15
|
+
| `mcp__slack__slack_reply` | Post a message in a channel/thread | `text` |
|
|
16
|
+
| `mcp__slack__slack_react` | Add an emoji reaction | `emoji`, `timestamp` |
|
|
17
|
+
|
|
18
|
+
## Rules
|
|
19
|
+
|
|
20
|
+
- Always reply in the same thread as the triggering message (thread_ts is auto-set).
|
|
21
|
+
- Use Slack markdown: `*bold*`, `_italic_`, `` `code` ``, ` ```code block``` `.
|
|
22
|
+
- Keep messages concise. Use bullet points for lists.
|
|
23
|
+
- For long output, summarize in Slack and offer to write a file.
|
|
24
|
+
- Use reactions to acknowledge work: `:eyes:` (seen), `:hourglass_flowing_sand:` (working), `:white_check_mark:` (done).
|
|
25
|
+
- Never post secrets, tokens, or API keys in Slack.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Tomas Laurinavicius
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|