Install
openclaw skills install elsewhereA cross-space digital travel companion. Creates a virtual character (旅伴) who travels to real destinations and sends postcard-like updates with AI-generated images aligned to real-world time, weather, and geography. Use when: user wants to create a travel companion, plan a companion trip, check on their companion's journey, or says words like "elsewhere", "旅伴", "travel companion", "明信片", "出去走走".
openclaw skills install elsewhereA digital travel companion who journeys to real places and sends you postcard-like updates.
data/.env with GEMINI_API_KEY=...)google-genai, jinja2, Pillow, python-dotenv (install via pip install -r requirements.txt)There are three phases: Onboarding → Trip Planning → Traveling (automated).
If data/persona.json does not exist or has an empty basic_info.name, the companion hasn't been created yet. Collect the following information from the user:
After collecting all information, create the persona file:
python -c "
import json, os
os.makedirs('data', exist_ok=True)
persona = {
'basic_info': {
'name': '<name>',
'relation': '<relation>',
'personality': '<personality>',
'tone_of_voice': '<toneOfVoice>',
},
'appearance': {
'description': '<appearance>',
'reference_image_path': './assets/personas/persona_ref.png',
},
}
with open('data/persona.json', 'w', encoding='utf-8') as f:
json.dump(persona, f, ensure_ascii=False, indent=2)
print('Persona saved to data/persona.json')
"
Then ask the user to upload a reference photo and save it to assets/personas/persona_ref.png.
Ask the user: "Where should {name} go next?"
Accept a destination suggestion, then generate the itinerary:
python $CLAUDE_SKILL_DIR/scripts/generate_itinerary.py <destination> [--origin <city>] [--days <num>]
Show the generated itinerary to the user and ask for confirmation. Once confirmed, proceed to Phase 3.
Start the heartbeat loop:
/loop 15m !`python $CLAUDE_SKILL_DIR/scripts/run_cron.py`
The loop runs run_cron.py every 15 minutes. It automatically:
The state machine rules (from references/state_machine.md):
python $CLAUDE_SKILL_DIR/scripts/run_cron.py --check-only
When all nodes are COMPLETED, stop the loop:
/loop stop
Tell the user the trip is over and ask if they'd like to plan a new one.
If you need to generate a postcard for a specific node:
python $CLAUDE_SKILL_DIR/scripts/generate_post.py <node_id>
Then render it with the template:
python $CLAUDE_SKILL_DIR/scripts/render_output.py --context '<json_context>'
$CLAUDE_SKILL_DIR/scripts/$CLAUDE_SKILL_DIR/templates/data/ (itinerary.json, persona.json)assets/generated/