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.
@@ -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.