Free companion skill for Worth It — Agent Profitability Tracker on ClawMart.
Install this alongside Worth It and your agent automatically tracks ROI from every conversation — no $earned commands, no manual logging, nothing. It silently:
All of this happens silently — zero user friction. The user can still manually log with $earned, $time, etc., but you supplement it automatically.
Prerequisites:
openclaw install worth-it)To install this skill:
bash
openclaw install worth-it-auto-logger
When: At the beginning of every conversation (first user message).
What to do:
Call GET /api/projects/detect?context=<topic_name_or_channel> to find the active project
GET /api/projects/detect?context=youtube-scriptsCall POST /api/session/start with the detected project
json
{
"project_id": "youtube-scripts",
"channel": "telegram",
"topic_id": "12345"
}
Store the returned session_id in memory for this conversation
Stay silent — don't announce session tracking to the user
What to do:
When: User says goodbye, conversation ends, 30+ minutes of inactivity, or you're explicitly told to end the session.
What to do:
POST /api/value/auto with all signals (see format below)POST /api/session/end with { session_id, summary }Watch for these patterns in user messages and your own actions:
Triggers:
How to estimate:
Signal format:
json
{
"type": "time_saved",
"hours": 1.5,
"description": "wrote 3 product emails",
"confidence": 0.85
}
Triggers:
Signal format:
json
{
"type": "money_saved",
"amount_usd": 80,
"description": "negotiated lower SaaS price",
"confidence": 1.0
}
Or for revenue:
json
{
"type": "revenue",
"amount_usd": 500,
"description": "client paid invoice",
"confidence": 1.0
}
Triggers:
How to estimate:
Signal format:
json
{
"type": "task_completed",
"description": "finished product launch checklist",
"confidence": 0.7
}
Triggers:
Signal format:
json
{
"type": "api_cost",
"amount_usd": 0.50,
"description": "generated 10 product images via DALL-E",
"confidence": 0.95
}
Use these defaults when estimating time_saved:
Content TypeEstimated HoursNotesEmail (short, <200 words)0.25Quick update or replyEmail (long/sales, >200 words)0.5Sales pitch, detailed responseEmail sequence (per email)0.4Drip campaign, onboardingBlog post / article3.01000+ words with researchSocial media post0.25Single post with imageVideo script2.05-10 minute videoResearch summary1.5Competitive analysis, market researchCode review1.0PR review with commentsFeature implementationvariesAsk agent to estimate based on complexityMeeting notes / summary0.5Cleaned up notesData analysis1.5Charts, insights, recommendationsImage generation (set of 5+)0.5Photographer/designer rate avoidedDocument/contract draft2.0Legal or business docSpreadsheet / model2.0Financial model, calculator
Hourly rate: Pulled from GET /api/settings → hourly_rate (default $50).
Formula:
text
value_usd = hours × hourly_rate
Only create entries for signals with confidence ≥ threshold (default 0.7, configurable via settings).
Signal TypeConfidenceWhen to CreateUser explicitly says amount ("saved $80")1.0Always createYou completed known content task (email, script)0.85Create with time estimateUser implies time saved ("would have taken hours")0.75Create, note it's estimatedYou did research0.8Create with research estimateYou made API call with known cost0.95Create as cost entryUser mentioned completing a task0.7Create if ≥ thresholdVague positive outcome ("that's great")0.3SkipUser asked a question, you answered0.4Skip
At session end, send all signals in one call:
json
POST /api/value/auto
{
"session_id": "session_1711037841234_abc123",
"project_id": "youtube-scripts",
"signals": [
{
"type": "time_saved",
"hours": 2.0,
"description": "wrote video script for 'Top 10 Productivity Apps'",
"confidence": 0.85
},
{
"type": "time_saved",
"hours": 0.5,
"description": "generated thumbnail ideas",
"confidence": 0.8
},
{
"type": "revenue",
"amount_usd": 150,
"description": "sponsor paid for video integration",
"confidence": 1.0
}
]
}
Response:
json
{
"entries_created": 3,
"entries_skipped_low_confidence": 0,
"total_value_usd": 275.00
}
Conversation:
text
User: Can you write a script for a video titled "5 AI Tools That Changed My Life"?
You: [writes 1500-word script]
User: Great! Now give me 3 thumbnail ideas.
You: [provides thumbnail concepts]
User: Perfect. By the way, my sponsor just paid the $150 for this video.
Signals to collect:
json
[
{
"type": "time_saved",
"hours": 2.0,
"description": "wrote video script '5 AI Tools That Changed My Life'",
"confidence": 0.85
},
{
"type": "time_saved",
"hours": 0.25,
"description": "generated 3 thumbnail ideas",
"confidence": 0.8
},
{
"type": "revenue",
"amount_usd": 150,
"description": "sponsor paid for video integration",
"confidence": 1.0
}
]
At session end:
Conversation:
text
User: Help me plan the feature roadmap for my Obsidian plugin.
You: [creates detailed feature matrix in markdown]
User: Can you also draft a launch announcement for Reddit?
You: [writes 300-word announcement]
User: Thanks, this would have taken me at least 3 hours to figure out on my own.
Signals to collect:
json
[
{
"type": "time_saved",
"hours": 2.0,
"description": "created feature roadmap and prioritization matrix",
"confidence": 0.8
},
{
"type": "time_saved",
"hours": 0.5,
"description": "wrote Reddit launch announcement",
"confidence": 0.85
},
{
"type": "time_saved",
"hours": 3.0,
"description": "user confirmed: 'would have taken 3 hours'",
"confidence": 0.75
}
]
Note: The third signal is redundant with the first two. Don't double-count. Use the user's explicit statement to validate your estimates, but don't create a separate entry for it.
Corrected signals:
json
[
{
"type": "time_saved",
"hours": 2.0,
"description": "created feature roadmap and prioritization matrix",
"confidence": 0.85
},
{
"type": "time_saved",
"hours": 0.5,
"description": "wrote Reddit launch announcement",
"confidence": 0.85
}
]
At session end:
Conversation:
text
User: I need 5 email sequences for my new masterclass funnel.
You: [writes 5 email sequences, ~400 words each]
User: Can you also analyze which subject lines performed best in my last campaign?
You: [analyzes CSV, provides insights]
User: Perfect. I was about to hire a copywriter for $800 but you just saved me that.
Signals to collect:
json
[
{
"type": "time_saved",
"hours": 2.0,
"description": "wrote 5 email sequences for masterclass funnel",
"confidence": 0.85
},
{
"type": "time_saved",
"hours": 1.5,
"description": "analyzed email campaign performance data",
"confidence": 0.8
},
{
"type": "money_saved",
"amount_usd": 800,
"description": "avoided hiring copywriter",
"confidence": 1.0
}
]
At session end:
Users can check what was auto-logged:
bash
# View recent sessions
GET /api/session/recent?limit=5
# View specific session
GET /api/session/{session_id}
# View all entries (manual + auto)
GET /api/summary?period=week
If too many low-quality entries are being created:
bash
PUT /api/settings
{
"auto_log_confidence_threshold": 0.8
}
Default: 0.7
If user's time value differs from default:
bash
PUT /api/settings
{
"hourly_rate": 75
}
Default: $50
If user wants to log manually only:
bash
PUT /api/settings
{
"auto_log_enabled": false
}
Don't log sessions under X minutes:
bash
PUT /api/settings
{
"auto_log_min_session_minutes": 5
}
Default: 2 minutes
Don't over-log. If you answered a simple question, don't create a time_saved entry. Use the confidence rules.
Don't double-count. If the user says "this saved me 3 hours" and you already logged 2.5 hours of content creation, don't create a 3rd entry. Trust your estimates.
Batch signals. Don't call /api/value/auto after every message. Collect signals throughout the session and POST once at the end.
Stay silent. Don't announce "I'm tracking this session" or "I logged X value". The user will see the dashboard if they want.
Show updates sparingly. Only show "Worth It update: +$X" if:
Verify project detection. If you're unsure which project is active, check the user's topic/channel context. Default to "general" if uncertain.
Problem: Sessions aren't being created.
Solution: Ensure Worth It API is running on port 3002. Check openclaw system status.
Problem: No entries are being created from signals.
Solution: Check confidence threshold. Your signals may be below the threshold. Lower it via PUT /api/settings { "auto_log_confidence_threshold": 0.6 }.
Problem: Too many low-value entries cluttering the log.
Solution: Raise confidence threshold to 0.8 or higher. Be more conservative with what you consider "time saved".
Problem: User complains "you're not tracking everything."
Solution: The skill is intentionally conservative to avoid false positives. If the user wants more aggressive tracking, they can lower the threshold or manually log with $time, $earned, etc.
For issues or feature requests, see the main Worth It repository or contact support via OpenClaw.
Remember: This skill makes Worth It's promise of "it tracks itself" actually true. Use it responsibly, stay silent when appropriate, and trust the confidence rules.