name: coop-shift description: Find and book Park Slope Food Coop shifts using browser automation. Use when the user asks to book a coop shift, find available shifts, check coop schedule, or manage PSFC work assignments.
Coop Shift
A skill for finding and booking Park Slope Food Coop shifts using browser automation.
Trigger Phrases
- "book a coop shift"
- "find available shifts at the coop"
- "check my coop schedule"
- "cancel my coop shift"
- "what shifts are available this week"
/coop-shift [shift type]
Prerequisites
- dev-browser plugin must be installed
- 1Password CLI must be installed and configured (
opcommand available) - PSFC credentials stored in 1Password with title "Coop Member Services"
Installing 1Password CLI
If op command is not found:
brew install --cask 1password-cli
Then enable CLI integration in the 1Password app:
- Open 1Password -> Settings -> Developer
- Enable "Integrate with 1Password CLI"
Member Info
| Field | Value |
|---|---|
| Member ID | 12345 |
| Name | Demo User |
| Work Assignment | Freelance |
| Initials | DU |
Site Architecture
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/
Key URLs
| 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/ |
URL Parameters
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 |
Job Types
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 carrot emoji are "carrot shifts" - completing 5 earns a bonus.
Constraints
| Rule | Details |
|---|---|
| Max scheduled shifts | 2 within 6 weeks |
| Cancellation deadline | 8 PM the night before |
| Late cancellation | Requires a cancel ticket |
Workflow
Step 1: Navigate to Member Services
browser_navigate: https://members.foodcoop.com/services/
Take a snapshot to verify logged in status. If redirected to login page, proceed to Step 1a.
Step 1a: Authenticate via 1Password (if needed)
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.
Step 2: Check Current Status
From the home page, extract:
- Current shift credit balance
- Scheduled shifts (dates, times, types)
- Household status (Alert/Active)
- Cancel tickets available
Step 3: Navigate to Shift Calendar
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/
Step 4: Filter Shifts (Optional)
Use the dropdowns to filter by:
- Job type (combobox)
- Time of day (combobox)
Or use URL parameters directly.
Step 5: Find Available Shifts
Take a snapshot and parse the shift calendar. Available shifts appear as links:
- Format:
{time} {job_type} {emoji} - Example:
6:00pm Checkout - Booked shifts show checkmark:
6:00pm Checkout (booked)
Step 6: Present Options to User
Show matching shifts with:
- Date and time
- Job type
- Whether it's a carrot shift
Use AskUserQuestion to confirm which shift to book.
Step 7: Book the Shift
- Click on the shift link to go to shift details page
- Select credit recipient (radio button - default to self)
- Fill in initials in 3 agreement fields (
CG) - Click "Work this shift" button
- Handle "Are you sure?" confirmation dialog (accept)
// 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
Step 8: Confirm Success
After booking, the page redirects to the shift calendar with message:
"You are now scheduled to work this shift."
Cancellation
Cancel a Shift
- Navigate to shift details:
/services/shift_claim/{shift_id}/ - Click "CANCEL SHIFT" button
- Handle "Are you sure?" confirmation dialog (accept)
- Redirects with message: "You have cancelled your shift."
Note: Cancellation is only available before 8 PM the night before the shift.
Error Handling
| 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 |
Housemates
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.
Example Session
User: "find me a checkout shift this weekend"
Assistant:
- Navigate to shift calendar with Checkout filter
- Filter to weekend dates
- Present available shifts:
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? - User picks #1
- Book it -> fill initials -> confirm
- "Booked! You're scheduled for Checkout at 6:00 PM on Saturday Jan 10."
Tools Used
| 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 |