Add decision journal, metrics, ideas, weather, standup - decide.py: Decision journal with outcomes and lessons - metrics.py: Track arbitrary metrics over time - ideas.py: Idea incubator with stages - weather.py: Quick weather via wttr.in - standup.py: Daily standup generator - 27 tools total now

This commit is contained in:
2026-01-30 23:55:37 -06:00
parent 9b7d7db55c
commit 3c9dc28852
12 changed files with 957 additions and 6 deletions

72
tools/weather.py Executable file
View File

@ -0,0 +1,72 @@
#!/usr/bin/env python3
"""
weather - Quick weather check
Get current weather and forecasts using wttr.in.
"""
import sys
import subprocess
from pathlib import Path
WORKSPACE = Path("/home/wdjones/.openclaw/workspace")
DEFAULT_LOCATION = "auto" # wttr.in auto-detects
def get_weather(location: str = None, detailed: bool = False):
"""Get weather for a location."""
loc = location or DEFAULT_LOCATION
loc = loc.replace(' ', '+')
if detailed:
# Full forecast
cmd = f'curl -s "wttr.in/{loc}?T"'
else:
# Compact format
cmd = f'curl -s "wttr.in/{loc}?format=%l:+%c+%t+%h+%w"'
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
output = result.stdout.strip()
if 'Unknown location' in output:
print(f"Location not found: {location}")
return
print(output)
def get_moon():
"""Get moon phase."""
cmd = 'curl -s "wttr.in/moon"'
result = subprocess.run(cmd, shell=True, capture_output=True, text=True)
print(result.stdout)
def main():
if len(sys.argv) < 2:
# Default: compact weather for auto location
get_weather()
return
cmd = sys.argv[1]
if cmd == 'moon':
get_moon()
elif cmd == 'full':
location = ' '.join(sys.argv[2:]) if len(sys.argv) > 2 else None
get_weather(location, detailed=True)
elif cmd in ['-h', '--help']:
print("Usage:")
print(" weather - Current weather (auto location)")
print(" weather <location> - Weather for location")
print(" weather full [loc] - Detailed forecast")
print(" weather moon - Moon phase")
print("")
print("Examples:")
print(" weather London")
print(" weather 'New York'")
print(" weather full Chicago")
else:
# Treat as location
location = ' '.join(sys.argv[1:])
get_weather(location)
if __name__ == "__main__":
main()