← Back to Skills Marketplace
yoshino-s

Bird Watching Mode

by yoshino-s · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ✓ Security Clean
115
Downloads
0
Stars
1
Active Installs
1
Versions
Install in OpenClaw
/install bird-watching-mode
Description
Bird-watching log workflow: ask for place on enable, resolve eBird region via superpicky-cli region-query, persist to workspace/bird.json; record sightings (...
README (SKILL.md)

Bird watching mode (观鸟模式)

Purpose

  1. On enable: Ask the user for 地点 (place name). Resolve eBird region with superpicky-cli region-query, then write workspace/bird.json.
  2. During use: Either identify a photo (BirdID via scripts) or record plain text (species name). Always append time + species (and optional fields) to workspace/bird.json.
  3. Summary / export: On request, run export_csv.py to produce CSV (and optional per-species counts), then send the file or paste to the user (chat attachment, email, etc.).

$SKILL = directory containing this SKILL.md (usually ~/.myagent/skills/bird-watching-mode). Before invoking anything, resolve it to an absolute path (e.g. SKILL="$(cd ~/.myagent/skills/bird-watching-mode && pwd)").

Paths

  • Bird log file: {project}/workspace/bird.json (create workspace/ if missing).
  • SuperPicky skill: default sibling ../superpicky-cli. Override with env SUPERPICKY_CLI_SKILL (absolute path to superpicky-cli skill root).

Absolute paths (required for invocation)

When calling these scripts from the agent or shell, all filesystem arguments must be absolute paths — do not rely on cwd or ~ inside subprocesses unless the shell expands them before the call.

Argument Rule
Python script path Must be absolute, e.g. /Users/you/.myagent/skills/bird-watching-mode/scripts/set_region.py.
--workspace Must be the absolute project root (directory that will contain workspace/bird.json).
Image path (identify_photo.py positional, --image on append_sighting.py) Must be absolute path to the file on disk.
--output / --summary-output (export_csv.py) If not -, use an absolute path for the CSV file (avoids ambiguity vs cwd).

Relative paths inside stored JSON (e.g. past image_path values) are legacy data only; new invocations should still use absolute paths.

Scripts (run from any cwd)

Script Role
scripts/set_region.py After user gives a place: call region-query --json, pick match, merge into bird.json (region, location_query, country_code).
scripts/append_sighting.py Append one observation: --species, optional --notes, --source text|photo, --image, --time (ISO UTC).
scripts/identify_photo.py Run BirdID identify using -c/-r from bird.json; print CLI stdout (agent reads top species); optional --append to log raw output + image path.
scripts/export_csv.py Export all observations to CSV; optional --summary for per-species counts. Deliver CSV to the user (file path or - stdout for inline paste).
# $SKILL and PROJECT must already be absolute (example values):
# SKILL=/Users/you/.myagent/skills/bird-watching-mode
# PROJECT=/Users/you/Workspace/myproject
# PHOTO=/Users/you/.myagent/workspace/media/abc123.jpg

# Resolve region (agent: ask user to confirm if multiple lines printed)
python3 "${SKILL}/scripts/set_region.py" --workspace "${PROJECT}" --location "上海"

# Manual / AI-confirmed text record
python3 "${SKILL}/scripts/append_sighting.py" --workspace "${PROJECT}" \
  --species "Eurasian Tree Sparrow" --source text --notes "flock of 5"

# Photo: run BirdID (requires superpicky install + models)
python3 "${SKILL}/scripts/identify_photo.py" --workspace "${PROJECT}" "${PHOTO}"
# Optional: append a sighting row with species left empty for later edit, or use --append-species "Latin name"
python3 "${SKILL}/scripts/identify_photo.py" --workspace "${PROJECT}" --append "${PHOTO}"

# Export CSV (default: workspace/bird_sightings_export.csv under PROJECT); paths printed on stderr
python3 "${SKILL}/scripts/export_csv.py" --workspace "${PROJECT}"
python3 "${SKILL}/scripts/export_csv.py" --workspace "${PROJECT}" --summary
python3 "${SKILL}/scripts/export_csv.py" --workspace "${PROJECT}" --output -   # stdout for paste only; no second file

Agent workflow

A. User turns on 观鸟模式

  1. Ask: Where are you birding? (地点 — city, province, park, etc.)
  2. Run set_region.py using absolute paths for the script and --workspace. If exit code 3, several matches were printed — ask the user which code (or re-run with --pick N).
  3. Confirm workspace/bird.json exists and contains region.code (and country_code).

B. User sends a photo

  1. Ensure SuperPicky is installed (see Prerequisites below).
  2. Run identify_photo.py with absolute script path, absolute --workspace, and absolute image file path.
  3. Read stdout; treat top BirdID lines as primary candidates. Confirm species with the user if uncertain.
  4. Run append_sighting.py with absolute script path and --workspace, final --species, --source photo, and absolute --image path.

Prerequisites: SuperPicky venv under $SUPERPICKY_CLI_SKILL (default sibling superpicky-cli). If missing: $SUPERPICKY_CLI_SKILL/scripts/install.sh (see superpicky-cli skill).

C. User sends text (species / field note)

  1. Parse species (and optional notes) from the message.
  2. Run append_sighting.py with absolute script path, absolute --workspace, and --source text.

D. User asks for 汇总 / 导出 / CSV

  1. Run export_csv.py with absolute script path and absolute --workspace (add --summary if they want counts by species; use absolute paths for --output / --summary-output when writing files).
  2. Read the path(s) printed on stderr; attach the CSV file(s) in the channel or paste --output - stdout if the UI supports it.
  3. Optional --excel: UTF-8 BOM for Excel on Windows.

bird.json shape (summary)

  • location_query: user’s place string.
  • region: { code, name, name_cn, kind, parent, match_score } from region-query JSON (first line unless --pick).
  • country_code: eBird country (CN, …) — region’s parent if subnational, else region.code.
  • observations[]: { time_utc, species, notes, source, image_path?, birdid_stdout? }.

For full fields, run append_sighting.py --help or read scripts/bird_log_schema.md.

Tests

From $SKILL/scripts/:

./run_tests.sh
# or: python3 bird_json_util_test.py && python3 set_region_test.py && …

Related

Usage Guidance
This skill appears internally consistent and implements a local bird-logging workflow. Before installing: 1) confirm you trust the sibling superpicky-cli skill (the included scripts call its scripts/run.sh and that script will execute arbitrary code/network calls); 2) be aware the skill will read image files and write workspace/bird.json and CSVs under whatever PROJECT path you provide (use a dedicated project directory if you are cautious); 3) SKILL.md allows the agent to 'send' CSVs (attachments, email, etc.) — decide which delivery channels you allow your agent to use; 4) run the included tests (scripts/run_tests.sh) locally if you want to audit behavior before enabling. Overall the bundle is coherent with its stated purpose.
Capability Analysis
Type: OpenClaw Skill Name: bird-watching-mode Version: 1.0.0 The bird-watching-mode skill bundle is a well-structured set of scripts for logging bird sightings, identifying species via an external tool (superpicky-cli), and exporting data to CSV. It follows standard practices, including comprehensive unit tests and clear documentation. While it executes external scripts via subprocess.run, this behavior is explicitly documented as a dependency on a sibling skill for bird identification and region lookups, with no evidence of malicious intent, data exfiltration, or prompt injection.
Capability Assessment
Purpose & Capability
Name/description match the included scripts (set_region, append_sighting, identify_photo, export_csv). The only external dependency is the sibling superpicky-cli (invoked via its scripts/run.sh), which is appropriate for eBird region queries and BirdID calls; no unrelated credentials or system accesses are requested.
Instruction Scope
SKILL.md correctly instructs the agent to run the included scripts with absolute paths and to prompt the user for a place. It also mentions delivering CSVs to the user (chat attachment, email, etc.), which is vague and gives the agent discretion about delivery channels — not inherently malicious but worth noting. The scripts themselves only read/write workspace/bird.json, read image files, and invoke the external superpicky-cli run.sh; they do not attempt to read unrelated system files or environment variables.
Install Mechanism
No install spec; this is instruction + script bundle. All code is included in the repo and nothing is downloaded or extracted at install time.
Credentials
The skill declares no required environment variables or credentials. It optionally respects SUPERPICKY_CLI_SKILL to locate a sibling superpicky-cli installation; this optional env var is reasonable. No secrets (TOKENS/KEYS/PASSWORDS) are requested. You should still ensure superpicky-cli (if present) is trusted because these scripts invoke its run.sh.
Persistence & Privilege
always is false and the skill does not request permanent platform-wide privileges. It writes only to the user-specified project workspace (workspace/bird.json and CSV outputs) which is consistent with its purpose.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install bird-watching-mode
  3. After installation, invoke the skill by name or use /bird-watching-mode
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
bird-watching-mode 1.0.0 - Initial release: enables a complete workflow for logging bird sightings. - Prompts user for location on enable and resolves the eBird region via superpicky-cli. - Stores region and observation data in workspace/bird.json using absolute paths. - Allows recording sightings via text entry or BirdID-based photo identification. - Exports sighting summaries or detailed CSV reports on request. - Requires all script, workspace, and file arguments to be passed as absolute paths for reliable operation.
Metadata
Slug bird-watching-mode
Version 1.0.0
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 1
Frequently Asked Questions

What is Bird Watching Mode?

Bird-watching log workflow: ask for place on enable, resolve eBird region via superpicky-cli region-query, persist to workspace/bird.json; record sightings (... It is an AI Agent Skill for Claude Code / OpenClaw, with 115 downloads so far.

How do I install Bird Watching Mode?

Run "/install bird-watching-mode" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Bird Watching Mode free?

Yes, Bird Watching Mode is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Bird Watching Mode support?

Bird Watching Mode is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Bird Watching Mode?

It is built and maintained by yoshino-s (@yoshino-s); the current version is v1.0.0.

💬 Comments