whatisxlistening-to
Query Last.fm listening data, show now playing, sync scrobble history to local DB, and deploy a personal "now playing" web dashboard. Use when user asks about current music, listening stats, scrobble history, or wants to set up a Last.fm dashboard.
Best use case
whatisxlistening-to is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Query Last.fm listening data, show now playing, sync scrobble history to local DB, and deploy a personal "now playing" web dashboard. Use when user asks about current music, listening stats, scrobble history, or wants to set up a Last.fm dashboard.
Teams using whatisxlistening-to should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/whatisxlistening-to/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How whatisxlistening-to Compares
| Feature / Agent | whatisxlistening-to | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Query Last.fm listening data, show now playing, sync scrobble history to local DB, and deploy a personal "now playing" web dashboard. Use when user asks about current music, listening stats, scrobble history, or wants to set up a Last.fm dashboard.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# whatisxlistening.to
Last.fm CLI + real-time "now playing" web dashboard.
**Live demo**: https://whatisbenlistening.to
## Quick Start
### CLI
```bash
# 1. Initialize config
./lastfm init
# Edit ~/.config/lastfm/config.json with your API key
# 2. Test
./lastfm now
./lastfm stats
./lastfm recent
```
### Dashboard
```bash
# Docker
docker run -d -p 8765:8765 \
-e LASTFM_API_KEY=your_key \
-e LASTFM_USERNAME=your_user \
-e TZ=America/Los_Angeles \
ghcr.io/poiley/whatisxlistening.to:latest
# → http://localhost:8765
```
## CLI Commands
| Command | Description |
|---------|-------------|
| `lastfm init` | Create config file template |
| `lastfm now` | Show current/last played track |
| `lastfm stats` | Show listening statistics |
| `lastfm recent [N]` | Show N recent tracks (default 10) |
| `lastfm backfill` | Download **full** listening history to local DB |
| `lastfm sync` | Sync new scrobbles (incremental) |
| `lastfm search <query>` | Search local DB by artist/track/album |
| `lastfm db` | Show local database statistics |
## Setup
### 1. Get Last.fm API Key
1. Go to https://www.last.fm/api/account/create
2. Create an application (any name)
3. Copy your API Key
### 2. Create Config
```bash
./lastfm init
# Then edit ~/.config/lastfm/config.json:
```
```json
{
"api_key": "YOUR_API_KEY",
"username": "YOUR_LASTFM_USERNAME"
}
```
## Clawdbot Usage
| User Says | Action |
|-----------|--------|
| "What am I listening to?" | `lastfm now` |
| "My listening stats" | `lastfm stats` |
| "What did I listen to recently?" | `lastfm recent` |
| "Search for Radiohead" | `lastfm search "Radiohead"` |
---
## Dashboard Deployment
### Docker
```bash
docker run -d -p 8765:8765 \
-e LASTFM_API_KEY=your_key \
-e LASTFM_USERNAME=your_user \
-e DISPLAY_NAME="Your Name" \
-e TZ=America/Los_Angeles \
ghcr.io/poiley/whatisxlistening.to:latest
```
### Kubernetes
See `k8s/` directory and `README.md` for full deployment guide with Kustomize.
```bash
kubectl create namespace listening-dashboard
kubectl create secret generic lastfm-credentials \
-n listening-dashboard \
--from-literal=api_key=YOUR_KEY \
--from-literal=username=YOUR_USER
kubectl apply -k k8s/
```
## Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| `LASTFM_API_KEY` | ✅ | Last.fm API key |
| `LASTFM_USERNAME` | ✅ | Last.fm username |
| `DISPLAY_NAME` | ❌ | Name in header (defaults to username) |
| `TZ` | ❌ | Timezone for "today" stats (e.g., `America/Los_Angeles`) |
| `PORT` | ❌ | Server port (default: 8765) |
## API Endpoints
| Endpoint | Description |
|----------|-------------|
| `GET /` | Now playing dashboard |
| `GET /history` | Listening history page |
| `GET /healthz` | Health check |
| `GET /api/config` | `{username, display_name}` |
| `GET /api/now` | Current/last track |
| `GET /api/stats` | Listening statistics (total, artists, today, streak) |
| `GET /api/recent?limit=N&page=N` | Recent tracks with album art |
## Files
```
whatisxlistening.to/
├── SKILL.md # Clawdbot skill config
├── lastfm # CLI symlink
├── lastfm_cli.py # CLI source
├── config.example.json # Config template
├── server.py # Dashboard server
├── schema.sql # SQLite schema
├── Dockerfile
├── README.md
├── web/
│ ├── index.html # Now playing page
│ └── history.html # History browser
├── k8s/ # Kubernetes manifests
└── tests/ # 100% coverage
```
## License
MITRelated Skills
bgo
Automated Blender build-go workflow. Automatically builds, removes old version, installs, enables, and launches Blender with your extension/add-on. Use when you want to quickly test changes, execute complete build-to-launch cycle, or run custom packaging scripts with automatic Blender launch.
codereadr-automation
Automate Codereadr tasks via Rube MCP (Composio). Always search tools first for current schemas.
codeinterpreter-automation
Automate Codeinterpreter tasks via Rube MCP (Composio). Always search tools first for current schemas.
code-generation
Use when generating boilerplate code, __init__.py files, or test scaffolds. Provides scripts that generate consistent, convention-following code.
codacy-automation
Automate Codacy tasks via Rube MCP (Composio). Always search tools first for current schemas.
coassemble-automation
Automate Coassemble tasks via Rube MCP (Composio). Always search tools first for current schemas.
clipper
Analyze video transcriptions to identify interesting segments for clipping. Finds highlights, key moments, and reactions with precise timestamps. Use when working with video transcriptions to extract clip-worthy moments. (project)
clink-standalone
Standalone CLI bridge - launch external AI CLIs (gemini, codex, claude) directly without MCP server. Use when you need to delegate tasks to specialized CLI tools with their own context windows. Supports role-based prompts and file references.
client-management
Manage client relationships using the local CRM — add contacts, track deals through the pipeline, schedule follow-ups, log interactions, and generate reports. All data stored locally in SQLite.
clickmeeting-automation
Automate Clickmeeting tasks via Rube MCP (Composio). Always search tools first for current schemas.
cli
Use this when you need to perform mutations on plyr.fm - uploading, deleting, liking tracks. The MCP server is read-only - use this skill when you need to trigger uploads, delete tracks, or modify likes.
clearout-automation
Automate Clearout tasks via Rube MCP (Composio). Always search tools first for current schemas.