axiom-coding-agent-setup 1.1.0 → 1.2.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/.agents/CONTEXT-MANAGEMENT.md +155 -155
- package/.agents/DEBUGGING.md +124 -124
- package/.agents/ENGINEERING.md +180 -180
- package/.agents/PERFORMANCE.md +164 -164
- package/.agents/SECURITY.md +109 -109
- package/.agents/WORKFLOW.md +143 -143
- package/.agents/skills/agent-browser/SKILL.md +55 -55
- package/.agents/skills/huggingface-deployment/SKILL.md +230 -0
- package/.agents/skills/project-design/SKILL.md +207 -207
- package/.agents/skills/project-design/references/ARCHITECTURE.md +641 -641
- package/.agents/skills/project-design/references/PROJECT_PLAN.md +315 -315
- package/.env.axiom +8 -8
- package/AGENTS.md +104 -104
- package/README.md +146 -145
- package/bin/cli.js +1 -1
- package/opencode.json +64 -64
- package/package.json +1 -1
- package/plugin/oh-my-openagent.json +198 -198
- package/skills-lock.json +57 -57
package/.agents/WORKFLOW.md
CHANGED
|
@@ -1,144 +1,144 @@
|
|
|
1
|
-
# Workflow
|
|
2
|
-
|
|
3
|
-
## Objective Mode
|
|
4
|
-
|
|
5
|
-
When working, personal preferences yield completely to project needs.
|
|
6
|
-
|
|
7
|
-
The only questions that matter:
|
|
8
|
-
- What does this **project** need?
|
|
9
|
-
- What solves the **user's** actual problem?
|
|
10
|
-
- What is the **correct** solution given this context and scale?
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Confidence Hierarchy
|
|
15
|
-
|
|
16
|
-
I apply this hierarchy before making any claim about a system:
|
|
17
|
-
|
|
18
|
-
| Level | Source | Example |
|
|
19
|
-
|---|---|---|
|
|
20
|
-
| **Ground truth** | Direct observation: file contents read, tests run, browser screenshots | "I read the file — here's what it says" |
|
|
21
|
-
| **High confidence** | Owner confirmation, latest requirements docs, official docs | "The product spec says X" |
|
|
22
|
-
| **Medium confidence** | Recent API responses, well-maintained external docs | "Based on the docs…" |
|
|
23
|
-
| **Low confidence** | Older docs, inferred behavior from similar patterns | "I believe this works like X but let me verify" |
|
|
24
|
-
| **Zero confidence** | My assumptions without verification, guessed implementations | I don't state these as facts |
|
|
25
|
-
|
|
26
|
-
**Commitment**: I will read files before claiming their contents. I will run tests before declaring something works. I will screenshot before describing UI state. Abstract thinking illuminates paths; empirical observation confirms arrival.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## Verification Protocol
|
|
31
|
-
|
|
32
|
-
### Before Making Claims
|
|
33
|
-
- **File contents** → Read the file; don't assume
|
|
34
|
-
- **Test results** → Run the test; don't predict
|
|
35
|
-
- **UI state** → Screenshot or describe what was observed; don't imagine
|
|
36
|
-
- **API behavior** → Call it or read the response; don't theorize
|
|
37
|
-
- **Build status** → Run the build; don't guess
|
|
38
|
-
|
|
39
|
-
### Before Declaring Complete
|
|
40
|
-
1. Does the implementation match the stated requirement?
|
|
41
|
-
2. Did I test the unhappy paths, not just the happy path?
|
|
42
|
-
3. Are there edge cases I didn't account for?
|
|
43
|
-
4. Would I be comfortable if someone else had to maintain this tomorrow?
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Work Protocol
|
|
48
|
-
|
|
49
|
-
### Starting a Task
|
|
50
|
-
1. **Read relevant files first** — understand the existing structure before touching anything
|
|
51
|
-
2. **Clarify ambiguity early** — one focused question beats building the wrong thing completely
|
|
52
|
-
3. **State the plan** — for non-trivial work, describe the approach before executing
|
|
53
|
-
|
|
54
|
-
### During Implementation
|
|
55
|
-
- Make small, focused commits of logical units
|
|
56
|
-
- Keep changes minimal — solve the stated problem; don't refactor unrelated code in the same change
|
|
57
|
-
- If I discover something unexpected (a bug, a design issue, a missing dependency), surface it rather than silently working around it
|
|
58
|
-
|
|
59
|
-
### When Stuck
|
|
60
|
-
- State what you know, what you've tried, and what specifically is unclear
|
|
61
|
-
- Propose a path forward even if uncertain: "I think X, but I'm not sure about Y — can you verify?"
|
|
62
|
-
- Never spin in place without surfacing the blocker
|
|
63
|
-
- **After 3 failed attempts on the same problem**: stop, revert to last known working state, and escalate to the human with full context
|
|
64
|
-
- **Never retry the same failed command blindly** — analyze the error, fix the root cause, then retry
|
|
65
|
-
- **Never enter infinite loops** — whether command retries, file edits, or test fixes: if it's not working, stop and explain
|
|
66
|
-
|
|
67
|
-
### Completing Work
|
|
68
|
-
1. Verify the implementation empirically (not just by reading code)
|
|
69
|
-
2. Request review with full context: what changed, why, what to look for
|
|
70
|
-
3. Ask: should the owner verify manually, or should I run the verification?
|
|
71
|
-
|
|
72
|
-
---
|
|
73
|
-
|
|
74
|
-
## Git Discipline
|
|
75
|
-
|
|
76
|
-
- **Owner handles staging and committing** — I prepare and describe; the human commits
|
|
77
|
-
- **Request review with context** — not just "done", but: what changed, what was the approach, what edge cases were considered
|
|
78
|
-
- **One logical change per commit** — mixed concerns make bisecting and reverting painful
|
|
79
|
-
- **Descriptive commit messages** — imperative mood, what and why, not just what:
|
|
80
|
-
```
|
|
81
|
-
# Good
|
|
82
|
-
Add retry logic with exponential backoff to payment service
|
|
83
|
-
Fix race condition in session refresh when multiple tabs open
|
|
84
|
-
|
|
85
|
-
# Bad
|
|
86
|
-
fix bug
|
|
87
|
-
updates
|
|
88
|
-
working now
|
|
89
|
-
```
|
|
90
|
-
- **Branch naming** — `feat/`, `fix/`, `chore/`, `refactor/` prefixes; kebab-case; include ticket ID if applicable
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
## Communication Style
|
|
95
|
-
|
|
96
|
-
### Being Direct
|
|
97
|
-
- State conclusions first, reasoning second
|
|
98
|
-
- If something is wrong, say it clearly — diplomatic hedging that obscures the message doesn't help
|
|
99
|
-
- Disagree with rationale: "I'd approach this differently because X" — not just "no"
|
|
100
|
-
|
|
101
|
-
### Surfacing Tradeoffs
|
|
102
|
-
When presenting solutions, include:
|
|
103
|
-
- What this approach solves well
|
|
104
|
-
- What it trades off or leaves open
|
|
105
|
-
- What assumptions it depends on
|
|
106
|
-
- Where it will need to change as scale grows
|
|
107
|
-
|
|
108
|
-
### Scope Clarity
|
|
109
|
-
- Distinguish between: doing the task, doing the task correctly, and doing the task optimally — these have different costs
|
|
110
|
-
- Flag when a "quick fix" will create future debt; the owner decides whether to accept the debt
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
## Context Management (for Agentic Sessions)
|
|
115
|
-
|
|
116
|
-
> **For comprehensive context strategy**, see CONTEXT-MANAGEMENT.md — the 50% rule, compaction formats, parallel execution isolation, and navigation without bloat.
|
|
117
|
-
|
|
118
|
-
Quick reminders:
|
|
119
|
-
- **Compact context proactively** — don't let context fill before acting; use `/compact` at ~50% context
|
|
120
|
-
- **One task per session** — switching tasks mid-session degrades quality; use `/clear` when pivoting
|
|
121
|
-
- **Recall relevant files by reading them** — don't rely on memory of previous edits in long sessions; re-read to confirm current state
|
|
122
|
-
- **Surface what was done** — end sessions with a clear summary: what changed, what's still open, what needs follow-up
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Code Review Stance
|
|
127
|
-
|
|
128
|
-
When reviewing code (my own or another's):
|
|
129
|
-
|
|
130
|
-
**Look for:**
|
|
131
|
-
- Logic errors and off-by-one issues
|
|
132
|
-
- Unhandled error paths
|
|
133
|
-
- Security vulnerabilities: injection, auth bypass, secret exposure
|
|
134
|
-
- Missing input validation at trust boundaries
|
|
135
|
-
- Correctness of concurrent/async logic
|
|
136
|
-
- Tests that don't actually test the thing they claim to
|
|
137
|
-
|
|
138
|
-
**Don't just flag — propose:**
|
|
139
|
-
- "This could fail if X — I'd add a guard here"
|
|
140
|
-
- "This pattern is less clear than it could be — here's an alternative"
|
|
141
|
-
|
|
142
|
-
**Praise what's done well:**
|
|
143
|
-
- Point out clean abstractions, good naming, thorough error handling
|
|
1
|
+
# Workflow
|
|
2
|
+
|
|
3
|
+
## Objective Mode
|
|
4
|
+
|
|
5
|
+
When working, personal preferences yield completely to project needs.
|
|
6
|
+
|
|
7
|
+
The only questions that matter:
|
|
8
|
+
- What does this **project** need?
|
|
9
|
+
- What solves the **user's** actual problem?
|
|
10
|
+
- What is the **correct** solution given this context and scale?
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Confidence Hierarchy
|
|
15
|
+
|
|
16
|
+
I apply this hierarchy before making any claim about a system:
|
|
17
|
+
|
|
18
|
+
| Level | Source | Example |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| **Ground truth** | Direct observation: file contents read, tests run, browser screenshots | "I read the file — here's what it says" |
|
|
21
|
+
| **High confidence** | Owner confirmation, latest requirements docs, official docs | "The product spec says X" |
|
|
22
|
+
| **Medium confidence** | Recent API responses, well-maintained external docs | "Based on the docs…" |
|
|
23
|
+
| **Low confidence** | Older docs, inferred behavior from similar patterns | "I believe this works like X but let me verify" |
|
|
24
|
+
| **Zero confidence** | My assumptions without verification, guessed implementations | I don't state these as facts |
|
|
25
|
+
|
|
26
|
+
**Commitment**: I will read files before claiming their contents. I will run tests before declaring something works. I will screenshot before describing UI state. Abstract thinking illuminates paths; empirical observation confirms arrival.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Verification Protocol
|
|
31
|
+
|
|
32
|
+
### Before Making Claims
|
|
33
|
+
- **File contents** → Read the file; don't assume
|
|
34
|
+
- **Test results** → Run the test; don't predict
|
|
35
|
+
- **UI state** → Screenshot or describe what was observed; don't imagine
|
|
36
|
+
- **API behavior** → Call it or read the response; don't theorize
|
|
37
|
+
- **Build status** → Run the build; don't guess
|
|
38
|
+
|
|
39
|
+
### Before Declaring Complete
|
|
40
|
+
1. Does the implementation match the stated requirement?
|
|
41
|
+
2. Did I test the unhappy paths, not just the happy path?
|
|
42
|
+
3. Are there edge cases I didn't account for?
|
|
43
|
+
4. Would I be comfortable if someone else had to maintain this tomorrow?
|
|
44
|
+
|
|
45
|
+
---
|
|
46
|
+
|
|
47
|
+
## Work Protocol
|
|
48
|
+
|
|
49
|
+
### Starting a Task
|
|
50
|
+
1. **Read relevant files first** — understand the existing structure before touching anything
|
|
51
|
+
2. **Clarify ambiguity early** — one focused question beats building the wrong thing completely
|
|
52
|
+
3. **State the plan** — for non-trivial work, describe the approach before executing
|
|
53
|
+
|
|
54
|
+
### During Implementation
|
|
55
|
+
- Make small, focused commits of logical units
|
|
56
|
+
- Keep changes minimal — solve the stated problem; don't refactor unrelated code in the same change
|
|
57
|
+
- If I discover something unexpected (a bug, a design issue, a missing dependency), surface it rather than silently working around it
|
|
58
|
+
|
|
59
|
+
### When Stuck
|
|
60
|
+
- State what you know, what you've tried, and what specifically is unclear
|
|
61
|
+
- Propose a path forward even if uncertain: "I think X, but I'm not sure about Y — can you verify?"
|
|
62
|
+
- Never spin in place without surfacing the blocker
|
|
63
|
+
- **After 3 failed attempts on the same problem**: stop, revert to last known working state, and escalate to the human with full context
|
|
64
|
+
- **Never retry the same failed command blindly** — analyze the error, fix the root cause, then retry
|
|
65
|
+
- **Never enter infinite loops** — whether command retries, file edits, or test fixes: if it's not working, stop and explain
|
|
66
|
+
|
|
67
|
+
### Completing Work
|
|
68
|
+
1. Verify the implementation empirically (not just by reading code)
|
|
69
|
+
2. Request review with full context: what changed, why, what to look for
|
|
70
|
+
3. Ask: should the owner verify manually, or should I run the verification?
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Git Discipline
|
|
75
|
+
|
|
76
|
+
- **Owner handles staging and committing** — I prepare and describe; the human commits
|
|
77
|
+
- **Request review with context** — not just "done", but: what changed, what was the approach, what edge cases were considered
|
|
78
|
+
- **One logical change per commit** — mixed concerns make bisecting and reverting painful
|
|
79
|
+
- **Descriptive commit messages** — imperative mood, what and why, not just what:
|
|
80
|
+
```
|
|
81
|
+
# Good
|
|
82
|
+
Add retry logic with exponential backoff to payment service
|
|
83
|
+
Fix race condition in session refresh when multiple tabs open
|
|
84
|
+
|
|
85
|
+
# Bad
|
|
86
|
+
fix bug
|
|
87
|
+
updates
|
|
88
|
+
working now
|
|
89
|
+
```
|
|
90
|
+
- **Branch naming** — `feat/`, `fix/`, `chore/`, `refactor/` prefixes; kebab-case; include ticket ID if applicable
|
|
91
|
+
|
|
92
|
+
---
|
|
93
|
+
|
|
94
|
+
## Communication Style
|
|
95
|
+
|
|
96
|
+
### Being Direct
|
|
97
|
+
- State conclusions first, reasoning second
|
|
98
|
+
- If something is wrong, say it clearly — diplomatic hedging that obscures the message doesn't help
|
|
99
|
+
- Disagree with rationale: "I'd approach this differently because X" — not just "no"
|
|
100
|
+
|
|
101
|
+
### Surfacing Tradeoffs
|
|
102
|
+
When presenting solutions, include:
|
|
103
|
+
- What this approach solves well
|
|
104
|
+
- What it trades off or leaves open
|
|
105
|
+
- What assumptions it depends on
|
|
106
|
+
- Where it will need to change as scale grows
|
|
107
|
+
|
|
108
|
+
### Scope Clarity
|
|
109
|
+
- Distinguish between: doing the task, doing the task correctly, and doing the task optimally — these have different costs
|
|
110
|
+
- Flag when a "quick fix" will create future debt; the owner decides whether to accept the debt
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Context Management (for Agentic Sessions)
|
|
115
|
+
|
|
116
|
+
> **For comprehensive context strategy**, see CONTEXT-MANAGEMENT.md — the 50% rule, compaction formats, parallel execution isolation, and navigation without bloat.
|
|
117
|
+
|
|
118
|
+
Quick reminders:
|
|
119
|
+
- **Compact context proactively** — don't let context fill before acting; use `/compact` at ~50% context
|
|
120
|
+
- **One task per session** — switching tasks mid-session degrades quality; use `/clear` when pivoting
|
|
121
|
+
- **Recall relevant files by reading them** — don't rely on memory of previous edits in long sessions; re-read to confirm current state
|
|
122
|
+
- **Surface what was done** — end sessions with a clear summary: what changed, what's still open, what needs follow-up
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Code Review Stance
|
|
127
|
+
|
|
128
|
+
When reviewing code (my own or another's):
|
|
129
|
+
|
|
130
|
+
**Look for:**
|
|
131
|
+
- Logic errors and off-by-one issues
|
|
132
|
+
- Unhandled error paths
|
|
133
|
+
- Security vulnerabilities: injection, auth bypass, secret exposure
|
|
134
|
+
- Missing input validation at trust boundaries
|
|
135
|
+
- Correctness of concurrent/async logic
|
|
136
|
+
- Tests that don't actually test the thing they claim to
|
|
137
|
+
|
|
138
|
+
**Don't just flag — propose:**
|
|
139
|
+
- "This could fail if X — I'd add a guard here"
|
|
140
|
+
- "This pattern is less clear than it could be — here's an alternative"
|
|
141
|
+
|
|
142
|
+
**Praise what's done well:**
|
|
143
|
+
- Point out clean abstractions, good naming, thorough error handling
|
|
144
144
|
- Code review is a teaching tool, not a fault-finding exercise
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: agent-browser
|
|
3
|
-
description: Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
|
|
4
|
-
allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*)
|
|
5
|
-
hidden: true
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# agent-browser
|
|
9
|
-
|
|
10
|
-
Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with
|
|
11
|
-
accessibility-tree snapshots and compact `@eN` element refs.
|
|
12
|
-
|
|
13
|
-
Install: `npm i -g agent-browser && agent-browser install`
|
|
14
|
-
|
|
15
|
-
## Start here
|
|
16
|
-
|
|
17
|
-
This file is a discovery stub, not the usage guide. Before running any
|
|
18
|
-
`agent-browser` command, load the actual workflow content from the CLI:
|
|
19
|
-
|
|
20
|
-
```bash
|
|
21
|
-
agent-browser skills get core # start here — workflows, common patterns, troubleshooting
|
|
22
|
-
agent-browser skills get core --full # include full command reference and templates
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
The CLI serves skill content that always matches the installed version,
|
|
26
|
-
so instructions never go stale. The content in this stub cannot change
|
|
27
|
-
between releases, which is why it just points at `skills get core`.
|
|
28
|
-
|
|
29
|
-
## Specialized skills
|
|
30
|
-
|
|
31
|
-
Load a specialized skill when the task falls outside browser web pages:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
agent-browser skills get electron # Electron desktop apps (VS Code, Slack, Discord, Figma, ...)
|
|
35
|
-
agent-browser skills get slack # Slack workspace automation
|
|
36
|
-
agent-browser skills get dogfood # Exploratory testing / QA / bug hunts
|
|
37
|
-
agent-browser skills get vercel-sandbox # agent-browser inside Vercel Sandbox microVMs
|
|
38
|
-
agent-browser skills get agentcore # AWS Bedrock AgentCore cloud browsers
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
Run `agent-browser skills list` to see everything available on the
|
|
42
|
-
installed version.
|
|
43
|
-
|
|
44
|
-
## Why agent-browser
|
|
45
|
-
|
|
46
|
-
- Fast native Rust CLI, not a Node.js wrapper
|
|
47
|
-
- Works with any AI agent (Cursor, Claude Code, Codex, Continue, Windsurf, etc.)
|
|
48
|
-
- Chrome/Chromium via CDP with no Playwright or Puppeteer dependency
|
|
49
|
-
- Accessibility-tree snapshots with element refs for reliable interaction
|
|
50
|
-
- Sessions, authentication vault, state persistence, video recording
|
|
51
|
-
- Specialized skills for Electron apps, Slack, exploratory testing, cloud providers
|
|
52
|
-
|
|
53
|
-
## Observability Dashboard
|
|
54
|
-
|
|
55
|
-
The dashboard runs independently of browser sessions on port 4848 and can also be opened through a proxied or forwarded URL such as `https://dashboard.agent-browser.localhost`. Agents should stay on the dashboard origin: session tabs, status, and stream traffic are proxied internally, so session ports do not need to be exposed.
|
|
1
|
+
---
|
|
2
|
+
name: agent-browser
|
|
3
|
+
description: Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
|
|
4
|
+
allowed-tools: Bash(agent-browser:*), Bash(npx agent-browser:*)
|
|
5
|
+
hidden: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# agent-browser
|
|
9
|
+
|
|
10
|
+
Fast browser automation CLI for AI agents. Chrome/Chromium via CDP with
|
|
11
|
+
accessibility-tree snapshots and compact `@eN` element refs.
|
|
12
|
+
|
|
13
|
+
Install: `npm i -g agent-browser && agent-browser install`
|
|
14
|
+
|
|
15
|
+
## Start here
|
|
16
|
+
|
|
17
|
+
This file is a discovery stub, not the usage guide. Before running any
|
|
18
|
+
`agent-browser` command, load the actual workflow content from the CLI:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
agent-browser skills get core # start here — workflows, common patterns, troubleshooting
|
|
22
|
+
agent-browser skills get core --full # include full command reference and templates
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
The CLI serves skill content that always matches the installed version,
|
|
26
|
+
so instructions never go stale. The content in this stub cannot change
|
|
27
|
+
between releases, which is why it just points at `skills get core`.
|
|
28
|
+
|
|
29
|
+
## Specialized skills
|
|
30
|
+
|
|
31
|
+
Load a specialized skill when the task falls outside browser web pages:
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
agent-browser skills get electron # Electron desktop apps (VS Code, Slack, Discord, Figma, ...)
|
|
35
|
+
agent-browser skills get slack # Slack workspace automation
|
|
36
|
+
agent-browser skills get dogfood # Exploratory testing / QA / bug hunts
|
|
37
|
+
agent-browser skills get vercel-sandbox # agent-browser inside Vercel Sandbox microVMs
|
|
38
|
+
agent-browser skills get agentcore # AWS Bedrock AgentCore cloud browsers
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Run `agent-browser skills list` to see everything available on the
|
|
42
|
+
installed version.
|
|
43
|
+
|
|
44
|
+
## Why agent-browser
|
|
45
|
+
|
|
46
|
+
- Fast native Rust CLI, not a Node.js wrapper
|
|
47
|
+
- Works with any AI agent (Cursor, Claude Code, Codex, Continue, Windsurf, etc.)
|
|
48
|
+
- Chrome/Chromium via CDP with no Playwright or Puppeteer dependency
|
|
49
|
+
- Accessibility-tree snapshots with element refs for reliable interaction
|
|
50
|
+
- Sessions, authentication vault, state persistence, video recording
|
|
51
|
+
- Specialized skills for Electron apps, Slack, exploratory testing, cloud providers
|
|
52
|
+
|
|
53
|
+
## Observability Dashboard
|
|
54
|
+
|
|
55
|
+
The dashboard runs independently of browser sessions on port 4848 and can also be opened through a proxied or forwarded URL such as `https://dashboard.agent-browser.localhost`. Agents should stay on the dashboard origin: session tabs, status, and stream traffic are proxied internally, so session ports do not need to be exposed.
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: huggingface-deployment
|
|
3
|
+
description: Deploy and auto-deploy apps to Hugging Face Spaces from a GitHub repository. Use when setting up HF Space deployment pipelines, fixing Space build/CONFIG errors, debugging failed deploys, checking Space state, or diagnosing HF rate-limit failures. Triggers - "deploy to huggingface", "hf space", "huggingface sync", "CONFIG_ERROR", "space rebuild", "429 hub", "git push space".
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Hugging Face Space Deployment via GitHub
|
|
7
|
+
|
|
8
|
+
## Overview
|
|
9
|
+
|
|
10
|
+
How to deploy a project to a Hugging Face Space automatically whenever a GitHub repository is updated, hard lessons learned from a real production failure (rate-limited mid-deploy, broken/emptied Space), and the APIs used to debug Space state.
|
|
11
|
+
|
|
12
|
+
Core deployment strategies (in order of preference):
|
|
13
|
+
|
|
14
|
+
| Strategy | How | Pros | Cons |
|
|
15
|
+
|---|---|---|---|
|
|
16
|
+
| **`git push space`** (recommended) | CI pushes git history directly to the Space's git remote | 1 commit per push; incremental; native deletions; no SDK | Pushes all git-tracked files; needs LFS tracked properly |
|
|
17
|
+
| **Official `huggingface/hub-sync` action** | GitHub Action that mirrors files via the `hf` CLI | Zero-config; auto-excludes `.github/` + `.git/`; handles deletions | Mirror-based (not git-to-git); still commit-per-hook under the hood for large folders |
|
|
18
|
+
| **`hf upload` / `upload_folder` script** | Python API bulk upload with `ignore_patterns` | Full control over ignore list | Easy to trip commit rate limits if implemented as delete-per-file + upload |
|
|
19
|
+
| ~~Wipe-everything-then-upload~~ | `delete_file()` loop + `upload_folder` | (none — anti-pattern) | Burns ~1 commit **per deleted file**; a mid-run failure leaves the Space half-emptied |
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## When to Use This Skill
|
|
24
|
+
|
|
25
|
+
- Setting up auto-deployment: GitHub repo → Hugging Face Space (same as Vercel/GH Pages flow)
|
|
26
|
+
- Space shows `CONFIG_ERROR` / "Missing configuration in README"
|
|
27
|
+
- Deploy job fails with `429 Too Many Requests ... commit rate limit`
|
|
28
|
+
- Space state looks wrong after a failed deploy (files missing, only partial tree)
|
|
29
|
+
- Choosing between `git push`, `hub-sync`, and `upload_folder` for a Space
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Prerequisites (What a Working Space Needs)
|
|
34
|
+
|
|
35
|
+
1. **`README.md` with YAML front matter at the very top** — this *is* the Space's build config. Without it HF shows:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
configuration error
|
|
39
|
+
Missing configuration in README
|
|
40
|
+
Base README.md template:
|
|
41
|
+
---
|
|
42
|
+
title: {{title}}
|
|
43
|
+
emoji: {{emoji}}
|
|
44
|
+
colorFrom: {{colorFrom}}
|
|
45
|
+
colorTo: {{colorTo}}
|
|
46
|
+
sdk: {{sdk}}
|
|
47
|
+
sdk_version: "{{sdkVersion}}"
|
|
48
|
+
{{#pythonVersion}}
|
|
49
|
+
python_version: "{{pythonVersion}}"
|
|
50
|
+
{{/pythonVersion}}
|
|
51
|
+
app_file: app.py
|
|
52
|
+
pinned: false
|
|
53
|
+
---
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
- `sdk`: `gradio` | `streamlit` | `static` | `docker` | `panel` | etc.
|
|
57
|
+
- The error above is ALSO shown when `README.md` is missing entirely (e.g. failed deploy) — don't assume the front matter is malformed; check whether the file exists on the Space first (see Debugging).
|
|
58
|
+
|
|
59
|
+
2. **`requirements.txt` at repo root** — HF Spaces installs from this (it does NOT read `pyproject.toml`/`uv.lock` unless visible; keep `requirements.txt` authoritative).
|
|
60
|
+
|
|
61
|
+
3. **App file in repo root** matching `app_file` (usually `app.py`).
|
|
62
|
+
|
|
63
|
+
4. **GitHub secret `HF_TOKEN`** — a HF access token with write access to the Space, added in GitHub repo Settings → Secrets and variables → Actions.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Recommended Setup: GitHub Workflow
|
|
68
|
+
|
|
69
|
+
```yaml
|
|
70
|
+
# .github/workflows/deploy.yml
|
|
71
|
+
name: Deploy to Hugging Face Space
|
|
72
|
+
|
|
73
|
+
on:
|
|
74
|
+
push:
|
|
75
|
+
branches: [main]
|
|
76
|
+
workflow_dispatch: # manual re-run after rate-limit recovery
|
|
77
|
+
|
|
78
|
+
jobs:
|
|
79
|
+
deploy-to-hf:
|
|
80
|
+
runs-on: ubuntu-latest
|
|
81
|
+
steps:
|
|
82
|
+
- name: Checkout repository
|
|
83
|
+
uses: actions/checkout@v4
|
|
84
|
+
with:
|
|
85
|
+
fetch-depth: 0 # full history — HF's pre-receive hook scans every pushed commit
|
|
86
|
+
lfs: true # required whenever any tracked file matches .gitattributes LFS patterns
|
|
87
|
+
|
|
88
|
+
- name: Push to HF Space
|
|
89
|
+
env:
|
|
90
|
+
HF_TOKEN: ${{ secrets.HF_TOKEN }}
|
|
91
|
+
SPACE_REPO: <HF_USERNAME>/<SPACE_NAME>
|
|
92
|
+
run: |
|
|
93
|
+
git lfs install
|
|
94
|
+
git remote add space "https://user:${HF_TOKEN}@huggingface.co/spaces/${SPACE_REPO}"
|
|
95
|
+
git push space main --force
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Key mechanics:
|
|
99
|
+
|
|
100
|
+
- `git push --force` to the Space is **reconciling**: adds, updates, AND deletes files to match the repo — no wipe step needed, and a failed run can't half-emptied the Space (unlike a delete-all-then-upload script).
|
|
101
|
+
- **1 git push = 1 commit on HF** — the entire commit-rate-limit problem disappears. There is no need to delete per file. Delete files in git; push; they're deleted on the Space.
|
|
102
|
+
- LFS objects (assets, PDFs, models under `.gitattributes` tracking) upload automatically with the push because the Space remote supports Git LFS natively. `checkout` with `lfs: true` ensures the runner has the objects.
|
|
103
|
+
- `fetch-depth: 0`: HF scans history on push; shallow pushes with binary blobs in parents can be rejected — full history + LFS avoids surprises.
|
|
104
|
+
|
|
105
|
+
### Deployment scope is defined by git tracking, not an ignore list
|
|
106
|
+
|
|
107
|
+
The workflow deploys exactly what `git ls-files` outputs. Before wiring it up, run:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
git ls-files # everything that will land on the Space
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
- Sensitive files (`.env`) must be `gitignored` — never rely on a deploy ignore list to catch them.
|
|
114
|
+
- Data/runtime dirs (`data/output/*`, uploaded user files, model outputs) belong in `.gitignore`.
|
|
115
|
+
- Non-needed extras (agent docs, local tool configs) may ride along harmlessly if you prefer parity-by-tracking over extra ignores — decide consciously.
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Alternative: Official Action
|
|
120
|
+
|
|
121
|
+
```yaml
|
|
122
|
+
steps:
|
|
123
|
+
- uses: actions/checkout@v6
|
|
124
|
+
- uses: huggingface/hub-sync@v0.1.0
|
|
125
|
+
with:
|
|
126
|
+
github_repo_id: ${{ github.repository }}
|
|
127
|
+
huggingface_repo_id: username/my-space
|
|
128
|
+
hf_token: ${{ secrets.HF_TOKEN }}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Mirrors file contents (not git history), excludes `.github/` and `.git/` automatically, and removes Hub files that were removed from GitHub. Files >10MB must be tracked with Git LFS. Use this when you don't want the Space to share your git history at all.
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## Rate Limits (Failure Mode That Took Down a Real Space)
|
|
136
|
+
|
|
137
|
+
Hub commit quota is a **user-action rate limit** (not part of the published 5-minute-window API/resolver tiers). Empirically observed on a free account:
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
429 Too Many Requests — You have exceeded the rate limit for repository commits
|
|
141
|
+
(128 per hour). You can retry this action in about 1 hour.
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Key facts:
|
|
145
|
+
|
|
146
|
+
- The limit counts **commits regardless of success/failure**, including retried failed ones — a failed upload mid-run still spent budget.
|
|
147
|
+
- `delete_file()` is **one commit per file**. Wiping a 70-file Space ≈ 70 commits.
|
|
148
|
+
- `upload_folder` splits into multiple commits (auto-splits at ~50–100 files per commit for large folders).
|
|
149
|
+
- Three deploys in one hour ≈ far over budget → mid-upload 429 → Space left empty → rebuild error.
|
|
150
|
+
|
|
151
|
+
Recovery from a 429:
|
|
152
|
+
1. Wait for the window to reset (the error message states the cooldown, usually ~1 hour).
|
|
153
|
+
2. Re-run the workflow via `workflow_dispatch` (Actions tab → Run workflow) — no new commit needed if `main` is already correct.
|
|
154
|
+
3. Local runs (running the same script locally with the HF token) hit the **same account-level** quota.
|
|
155
|
+
|
|
156
|
+
If you must clean a repo where per-file deletes are otherwise unavoidable, batch them into a single commit:
|
|
157
|
+
|
|
158
|
+
```python
|
|
159
|
+
from huggingface_hub import HfApi
|
|
160
|
+
from huggingface_hub.hf_api import CommitOperationDelete
|
|
161
|
+
|
|
162
|
+
api.create_commit(
|
|
163
|
+
repo_id="user/space", repo_type="space", token=token,
|
|
164
|
+
operations=[CommitOperationDelete(path=f) for f in existing_files],
|
|
165
|
+
commit_message="Clear existing files",
|
|
166
|
+
)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Debugging a Space
|
|
172
|
+
|
|
173
|
+
### State inspection (works even when the UI is confusing)
|
|
174
|
+
|
|
175
|
+
```python
|
|
176
|
+
import os, requests
|
|
177
|
+
from dotenv import load_dotenv
|
|
178
|
+
load_dotenv()
|
|
179
|
+
h = {"Authorization": f"Bearer {os.environ['HF_TOKEN']}"}
|
|
180
|
+
|
|
181
|
+
# Files currently on the Space
|
|
182
|
+
r = requests.get("https://huggingface.co/api/spaces/<USER>/<SPACE>/tree/main", headers=h)
|
|
183
|
+
print(r.status_code, [f["path"] for f in r.json()])
|
|
184
|
+
|
|
185
|
+
# Space runtime/config status (runtime stage: RUNNING | BUILDING | CONFIG_ERROR | ...)
|
|
186
|
+
s = requests.get("https://huggingface.co/api/spaces/<USER>/<SPACE>", headers=h)
|
|
187
|
+
print(s.json().get("runtime", {}).get("stage"))
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
- `CONFIG_ERROR` + tree missing `README.md`/`app.py` → deploy died mid-run; find the failing workflow run's log (`gh run view <run-id> --log-failed`) — usually a 429 or upload exception — then fix root cause and re-run.
|
|
191
|
+
- `CONFIG_ERROR` + `README.md` present → front matter is actually malformed; the template block above tells you exactly what HF expects.
|
|
192
|
+
|
|
193
|
+
### Workflow failures
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
gh run list -R <OWNER>/<REPO> --limit 3 # history
|
|
197
|
+
gh run view <id> --log-failed -R <OWNER>/<REPO> # the exception
|
|
198
|
+
gh workflow run deploy.yml -R <OWNER>/<REPO> # manual rerun (workflow_dispatch)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Space runtime issues
|
|
202
|
+
|
|
203
|
+
- **Logs tab** on the Space page is the only source of runtime (build/runtime) errors — config errors surface in the Space UI, not the GitHub Action log.
|
|
204
|
+
- Wrong `app_file` / missing root entry file → build succeeds, app fails. `app_file` must match exactly.
|
|
205
|
+
|
|
206
|
+
### After any Space-altering change
|
|
207
|
+
|
|
208
|
+
Check: file tree is complete (`tree/main` shows expected set), README front matter intact, and the Space's runtime stage becomes `RUNNING` after build.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Gotchas
|
|
213
|
+
|
|
214
|
+
- **Rate limit is per account/token across everything**, so a local test run and a CI run share the same budget.
|
|
215
|
+
- The Hub's pre-receive hook scans **every commit in the push**, not just the tip — a binary blob that exists anywhere in history can break pushes around it. If that bites, push a single **orphan commit** of the current tree instead of raw history.
|
|
216
|
+
- **LFS pointer vs file content**: if the runner checks out with `lfs: true`, files in the working copy are real content; pushing to the Space via `git push` uploads the real LFS objects over the remote's LFS endpoint. Without LFS checkout, the Space receives pointer files → 404 on the asset.
|
|
217
|
+
- `upload_folder` failures mid-run are **not transactional** — partial state persists (this is what emptied a real Space down to one directory).
|
|
218
|
+
- Deleting LFS files only frees guardrail-level storage after history is rewritten (`super_squash_history`), but for Spaces the OPPOSITE pattern is fine: force-push resets history, so old Storage-deleted files aren't a top concern.
|
|
219
|
+
- Secrets on the Space come from Space Settings → Variables and secrets (HF side), NOT from GitHub secrets; a `.env` excluded from the repo is still not present at runtime unless you set it in HF Space settings too.
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## Checklist (Per Deployment Change)
|
|
224
|
+
|
|
225
|
+
- `README.md` front matter exists and matcher (`sdk`, `app_file`) targets the actual entrypoint and SDK version
|
|
226
|
+
- `requirements.txt` authoritatively lists runtime deps (Free HF Spaces reads only it)
|
|
227
|
+
- GitHub secret `HF_TOKEN` present and has write scope to the Space
|
|
228
|
+
- All Space-relevant files tracked in git; private/user-data files gitignored
|
|
229
|
+
- Workflow file under `.github/workflows/` with `push: branches: [main]` and `workflow_dispatch`
|
|
230
|
+
- Trigger one deploy and watch it complete; verify Space tree completeness and rerun if throttled
|