Back to skills
extension
Category: Productivity & OfficeAPI key required

Bring Add

Use when user wants to add items to Bring! shopping lists. For adding single items, batch items, or items from stdin/files. Supports dry-run preview and JSON output.

personAuthor: darkdevelopershubclawhub

Bring! Add Items CLI

Overview

CLI for adding items to Bring! shopping lists. Supports quick single-item mode, batch mode, stdin/pipe input, and interactive mode.

When to Use

Use this skill when:

  • User wants to add items to a Bring! shopping list
  • Adding single item with optional specification (e.g., "Milk 1L")
  • Adding multiple items at once (batch mode)
  • Piping items from a file or other command
  • Need to preview additions with dry-run
  • Need JSON output for scripting

Don't use when:

  • User wants to browse recipes (use bring-recipes instead)
  • User wants to remove items from a list
  • User wants to view current list contents

Quick Reference

| Command | Purpose | |---------|---------| | bring-add "Item" "spec" | Add single item with specification | | bring-add --batch "A, B 1L, C" | Add multiple comma-separated items | | bring-add - | Read items from stdin | | bring-add | Interactive mode (TTY only) | | bring-add lists | Show available shopping lists | | bring-add --dry-run ... | Preview without modifying |

Environment variables:

export BRING_EMAIL="your@email.com"
export BRING_PASSWORD="yourpassword"
export BRING_DEFAULT_LIST="Shopping"  # optional

Installation

cd skills/bring-add
npm install

Common Workflows

Add a single item:

node index.js "Tomatoes" "500g"
node index.js "Milk"

Add to specific list:

node index.js --list "Party" "Chips" "3 bags"

Batch add multiple items:

node index.js --batch "Tomatoes 500g, Onions, Cheese 200g"

Pipe from file:

cat shopping-list.txt | node index.js -
echo -e "Milk 1L\nBread\nButter" | node index.js -

Preview before adding:

node index.js --dry-run --batch "Apples 1kg, Pears"

Get JSON output:

node index.js --json --batch "Milk, Bread" 2>/dev/null

List available lists:

node index.js lists
node index.js --json lists

Flags Reference

| Flag | Description | |------|-------------| | -l, --list <name> | Target list (name or UUID) | | -b, --batch <items> | Comma-separated items | | -n, --dry-run | Preview without modifying | | -q, --quiet | Suppress non-error output | | -v, --verbose | Show detailed progress | | --json | Output JSON to stdout | | --no-color | Disable colored output | | --no-input | Never prompt; fail if input required |

Input Format

Items follow the pattern: ItemName [Specification]

| Input | Item | Spec | |-------|------|------| | Tomatoes 500g | Tomatoes | 500g | | Oat milk 1L | Oat milk | 1L | | Red onions 3 | Red onions | 3 | | Cheese | Cheese | (empty) |

Rule: Last word becomes specification if it contains a number or unit (g, kg, L, ml, Stück, pck).

Exit Codes

| Code | Meaning | |------|---------| | 0 | Success | | 1 | Generic failure (API error, network) | | 2 | Invalid usage (bad args, missing input) | | 3 | Authentication failed | | 4 | List not found | | 130 | Interrupted (Ctrl-C) |

Common Mistakes

Forgetting environment variables: Set BRING_EMAIL and BRING_PASSWORD before running.

Wrong list name: Use bring-add lists to see available lists and their exact names.

Specification parsing: The last word is treated as specification only if it looks like a quantity. "Red onions" stays as one item, but "Red onions 3" splits into item "Red onions" with spec "3".

Interactive mode in scripts: Use --no-input flag in scripts to fail explicitly rather than hang waiting for input.

Implementation Notes

  • Uses node-bring-api with batchUpdateList() API
  • Requires Node.js 18.0.0+
  • Outputs data to stdout, progress/errors to stderr
  • JSON mode available for automation
  • Interactive mode only when stdin is a TTY