Weather
一个面向 Data & APIs 场景的 Agent 技能。原始说明:Get current weather and forecasts (no API key required).
一个面向 Data & APIs 场景的 Agent 技能。原始说明:Create, list, update, and record Fulcra annotations through the Fulcra Life API. Use when a user asks to log an annotation, create an annotation button/defin...
name: fulcra-annotations
description: Create, list, update, and record Fulcra annotations through the Fulcra Life API. Use when a user asks to log an annotation, create an annotation button/definition, record a moment/boolean/numeric/scale annotation, inspect annotation IDs/source IDs, or build agent workflows that write Fulcra annotation events.
Use this skill when the user wants an agent to create, record, or verify Fulcra annotations.
Fulcra gives agents and their humans scoped, secure access to read and write real-world context and shared human/agent memory: attention, events, location, calendar, health, wearables, and other streams. Use this skill for the write side of that loop: creating reusable annotation definitions and recording user-approved moments or values.
Agents should use the bundled script first. Do not hand-write curl calls unless the script is missing a required capability, because the script keeps tokens out of chat, builds the Fulcra ingest payload consistently, and performs readback verification.
When a user is new to Fulcra annotations, optimize for a quick useful loop: choose a concrete thing to track, create one or two definitions, record one real data point, verify it, and show the user what now exists.
uv tool run fulcra-api user-info fails, run uv tool run fulcra-api auth login, keep the process alive, and send only the device URL/code through the trusted user channel.moment for occurrences, boolean for yes/no, numeric for counts or measured quantities, and scale for subjective ratings.list before create to avoid duplicates. If creating multiple definitions, save the returned annotation.id, source_id, and type from each create result in your working notes so the next record step does not need another lookup.record --id ... with --value when needed. Treat success as confirmed only when verified_matches >= 1.Focus or Asked Agent to Do Something New. Created once with create.record.--value.create --tag.record --tag.--recorded-at.verified_matches >= 1.The script gets auth from a trusted secret manager token when FULCRA_ACCESS_TOKEN is set, otherwise from the locally authenticated Fulcra CLI command configured by FULCRA_CLI_COMMAND.
Fulcra requires an authenticated account, not an API key. Accounts can be created through the CLI auth flow and include 5 GB of storage free forever. Users who want biometrics, location, calendar, and other mobile context can install the Context iOS app and sign in with the same account; the app uses the same free storage and is no longer subscription gated. Android is coming soon.
Authenticate first:
uv tool run fulcra-api auth login
For remote agents, keep the CLI running, surface the printed device authorization URL and code to the intended user in chat through the active trusted user channel, and wait for approval. The user can open the URL from any browser on any device. After approval, verify auth with a non-token command such as uv tool run fulcra-api user-info; do not paste tokens into chat.
Set FULCRA_HOME=/path/to/home if credentials are not under the process HOME.
List annotation definitions before creating a new one:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py list
Create a moment annotation definition:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py create \
--type moment \
--name "Asked Agent to Do Something New" \
--description "Logged when the user asks the agent to try a new category of work" \
--tag agent \
--tag new-task
Use create --tag more than once to attach multiple tags to the definition. Definition tags should be short, stable labels such as agent, health, or research. The script resolves tag names to Fulcra tag IDs before sending the API payload.
Record a moment annotation now:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py record \
--name "Asked Agent to Do Something New" \
--note "User asked for a new annotation workflow" \
--tag new-task
Use record --tag more than once to attach tags to the individual record. If record --tag is omitted, the record inherits the definition tags. If record --tag is present, those explicit record tags are resolved to Fulcra tag IDs and sent for that record.
Record a historical moment annotation:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py record \
--name "Asked Agent to Do Something New" \
--recorded-at "2026-05-15T10:00:00-04:00" \
--note "User asked for a new annotation workflow"
Use a full ISO-8601 timestamp with timezone for historical writes. If the user says "yesterday at 10am", resolve it in the user's timezone and pass the offset explicitly, for example 2026-05-15T10:00:00-04:00. Fulcra readback may show the equivalent UTC time, such as 2026-05-15T14:00:00+00:00.
Record by annotation ID when names are ambiguous:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py record \
--id "<annotation-id>" \
--note "Logged from automation"
Create a 1-5 scale annotation definition:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py create \
--type scale \
--name "Focus" \
--description "How focused do I feel right now?" \
--scale-labels "1=Scattered,2=Low,3=Neutral,4=Focused,5=Locked In" \
--default-value 3
Create a numeric count annotation:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py create \
--type numeric \
--name "Coffee Count" \
--description "Number of coffees consumed today" \
--measurement-type count \
--tag health \
--tag intake
For measurements with specialized units, inspect the live schema through the bundled helper before creating the definition and then prefer adding script support over ad hoc API calls:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py measurement-schema
Use measurement-schema --raw only for local debugging. Do not paste raw schema output into chat if it includes private account context.
Record a scale/numeric/boolean value:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py record \
--name "Focus" \
--value 4 \
--note "Deep work block started well"
Read back recent records for verification:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py recent \
--name "Asked Agent to Do Something New" \
--hours 72 \
--limit 20
Update definition metadata or replace definition tags only after user approval:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py update \
--id "<annotation-id>" \
--description "Updated description" \
--tag workflow \
--tag agent
Delete a definition only after user approval:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py delete \
--id "<annotation-id>"
Dry-run any write before sending it:
python3 skills/fulcra-annotations/scripts/fulcra_annotations.py record \
--name "Focus" --value 4 --dry-run
list and check whether the definition already exists.update --id ...; dry-run first for broad retagging.create.record --name ... or record --id ....--recorded-at "<ISO-8601 timestamp with timezone>".verified_matches >= 1 for confirmed writes.204, wait briefly and rerun recent --id <annotation-id> or recent --name "<name>" --hours <window>.For onboarding, the first verified record should lead to a small payoff instead of a dry "done" message.
For automated or backfilled annotation pipelines, use an append-only, ledger-backed writer:
verified, retry pending or failed, and write only unseen keys.record output or recent readback and mark the ledger verified only when verified_matches >= 1.health, agent, research, or workflow.new-task, manual-test, backfill, or user-requested.create --tag <tag>. Repeat --tag for multiple definition tags.record --tag <tag>. Repeat --tag for multiple record tags.--tag accepts either a Fulcra tag name or an existing tag UUID.record --tag is omitted, the record uses the definition tags.record --tag is provided, the explicit record tags are sent for that record.new-task over a full sentence.town-springfield, village-riverside, neighborhood-downtown, or place-main-campus over abstract tags such as scope-town or scope-neighborhood.category-traffic, source-town-feed, or severity-advisory.--recorded-at, --note, --value, --source, and local metadata/ledger state for those.update --id ... --tag ... after user approval; --tag replaces the definition tag set.--recorded-at is omitted, the script records the annotation at the current time.--recorded-at.Example: on 2026-05-16 in Eastern Time, "yesterday at 10am" means 2026-05-15T10:00:00-04:00, which readback may show as 2026-05-15T14:00:00+00:00.
record returns recorded_at and verified_matches.verified_matches >= 1 means the script found the written record in Fulcra after ingest.recent --hours with a window large enough to include the target time if a second verification is needed.recorded_at, value if relevant, and note if relevant.Core REST endpoints:
GET /user/v1alpha1/annotation lists annotation definitions.POST /user/v1alpha1/annotation creates a definition.PUT /user/v1alpha1/annotation/{annotation_id} updates a definition.DELETE /user/v1alpha1/annotation/{annotation_id} deletes a definition.POST /ingest/v1/record records annotation events./data/v1alpha1/event/MomentAnnotation for moment/duration and /data/v1alpha1/metric/{BooleanAnnotation|NumericAnnotation|ScaleAnnotation} for metric annotation values.For schema details or upstream gaps, read references/api-notes.md.