Install
openclaw skills install fulcra-annotationsCreate, 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.
openclaw skills install fulcra-annotationsUse 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.
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 in this order:
FULCRA_ACCESS_TOKEN environment variable.fulcra-api auth print-access-token from PATH, or the command in FULCRA_CLI_COMMAND.Authenticate first:
fulcra-api auth login
For remote agents, keep the CLI running, send the printed device authorization URL and code to the intended user 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 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
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
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.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>.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.--recorded-at, --note, --value, and --source for those.--recorded-at is omitted, the script records the annotation at the current time.--recorded-at.Example: on 2026-05-16 in New York, "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.