A skill for finding and booking Park Slope Food Coop shifts using browser automation.
/plugin marketplace add caseyg/caseys-claude/plugin install coop-shift@cag-skillsThis skill inherits all available tools. When active, it can use any tool Claude has access to.
A skill for finding and booking Park Slope Food Coop shifts using browser automation.
This skill should be used when the user asks to "book a coop shift", "find available shifts", "check my coop schedule", or wants to manage their PSFC work assignments. It uses browser automation since PSFC is a server-rendered Django app without a REST API.
op command available)If op command is not found:
brew install --cask 1password-cli
Then enable CLI integration in the 1Password app:
| Field | Value |
|---|---|
| Member ID | 12345 |
| Name | Demo User |
| Work Assignment | Freelance |
| Initials | DU |
PSFC Member Services is a server-rendered Django app with no REST API. All actions are form submissions via standard page navigation.
Base URL: https://members.foodcoop.com/services/
| Page | URL Pattern |
|---|---|
| Home | /services/ |
| Shift Calendar | /services/shifts/{page}/{job_id}/{time_slot}/{date}/ |
| Shift Details | /services/shift_claim/{shift_id}/ |
| Job Descriptions | /services/jobs/ |
Shift Calendar:
page: Week offset (0 = current, 1 = next, etc.)job_id: Filter by job type (0 = all)time_slot: Filter by time (0 = entire day)date: Reference date (YYYY-MM-DD)Time Slots:
| Slot | ID |
|---|---|
| Entire day | 0 |
| Early Morning (4-7am) | 1 |
| Morning (7-10am) | 2 |
| Mid-day (10am-2pm) | 3 |
| Afternoon (2-6pm) | 4 |
| Evening (6-11pm) | 5 |
Common job types available in the dropdown:
| Job | Notes |
|---|---|
| Checkout 💳 | Register operation |
| Receiving: Lifting 🚚 | Heavy lifting required |
| Receiving: Stocking 📦 | Shelf stocking |
| Flex Worker 🥫 | Flexible assignments |
| Cleaning 🏝 | End of day cleaning |
| Inventory 📋 | Stock counting |
| 🥕 Carrot 🥕 | Bonus shift (earn carrots) |
Shifts marked with 🥕 are "carrot shifts" - completing 5 earns a bonus.
| Rule | Details |
|---|---|
| Max scheduled shifts | 2 within 6 weeks |
| Cancellation deadline | 8 PM the night before |
| Late cancellation | Requires a cancel ticket |
browser_navigate: https://members.foodcoop.com/services/
Take a snapshot to verify logged in status. If redirected to login page, proceed to Step 1a.
If the page shows a login form, get credentials from 1Password:
op item get "Coop Member Services" --fields username,password --format json
Then fill the login form:
// Fill member number
browser_type: element="Member Number field", ref="<ref>", text="<member_number>"
// Fill password
browser_type: element="Password field", ref="<ref>", text="<password>"
// Click login
browser_click: element="Log In button", ref="<ref>"
Handling 2FA (if prompted):
If PSFC prompts for a one-time password:
op item get "Coop Member Services" --otp
Enter the OTP code in the verification field.
From the home page, extract:
browser_navigate: https://members.foodcoop.com/services/shifts/
Or with filters:
browser_navigate: https://members.foodcoop.com/services/shifts/0/0/0/2026-01-01/
Use the dropdowns to filter by:
Or use URL parameters directly.
Take a snapshot and parse the shift calendar. Available shifts appear as links:
{time} {job_type} {emoji}6:00pm Checkout 💳6:00pm Checkout 💳 ✅Show matching shifts with:
Use AskUserQuestion to confirm which shift to book.
CG)// Fill initials
browser_fill_form: [
{name: "initials 1", type: "textbox", ref: "<ref>", value: "CG"},
{name: "initials 2", type: "textbox", ref: "<ref>", value: "CG"},
{name: "initials 3", type: "textbox", ref: "<ref>", value: "CG"}
]
// Click submit
browser_click: "Work this shift" button
// Handle confirmation
browser_handle_dialog: accept
After booking, the page redirects to the shift calendar with message:
"You are now scheduled to work this shift."
/services/shift_claim/{shift_id}/Note: Cancellation is only available before 8 PM the night before the shift.
| Situation | Response |
|---|---|
| Not logged in | Authenticate via 1Password (Step 1a) |
| 1Password item not found | Item should be titled "Coop Member Services" |
| Login failed | Check credentials in 1Password, may need manual update |
| Max shifts reached | Inform user they have 2 shifts scheduled (max allowed) |
| Shift no longer available | Refresh calendar and show alternatives |
| Past cancellation deadline | Inform user they need a cancel ticket |
Shifts can be credited to housemates instead of self:
| Name | Member ID | Status |
|---|---|---|
| Alex Johnson | 11111 | Active |
| Sam Williams | 22222 | Active |
| Jordan Lee | 33333 | Active |
| Taylor Brown | 44444 | Active |
| Morgan Davis | 55555 | Active |
When booking, a radio button allows selecting who receives shift credit.
User: "find me a checkout shift this weekend"
Assistant:
Found 3 Checkout shifts this weekend:
1. Saturday Jan 10, 6:00 PM - Checkout 💳
2. Sunday Jan 11, 10:30 AM - Checkout 💳
3. Sunday Jan 11, 3:30 PM - Checkout 💳
Which would you like to book?
| Tool | Purpose |
|---|---|
Bash | Run 1Password CLI commands for auth |
browser_navigate | Navigate to PSFC pages |
browser_snapshot | Read page state |
browser_click | Click buttons and links |
browser_type | Fill login credentials |
browser_fill_form | Fill initials fields |
browser_select_option | Use dropdown filters |
browser_handle_dialog | Accept confirmation dialogs |
AskUserQuestion | Confirm shift selection |
Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.