惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
G
Google Developers Blog
J
Java Code Geeks
C
Check Point Blog
Last Week in AI
Last Week in AI
Microsoft Azure Blog
Microsoft Azure Blog
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
L
LangChain Blog
有赞技术团队
有赞技术团队
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园 - 司徒正美
IT之家
IT之家
Martin Fowler
Martin Fowler
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tailwind CSS Blog
U
Unit 42
Jina AI
Jina AI
Microsoft Security Blog
Microsoft Security Blog
I
InfoQ

Hacker News - Newest: "OpenClaw"

OpenClaw just launched an official app for iPhone, details here - 9to5Mac OpenClaw Launch — Deploy AI Chatbots in Seconds Self-Host OpenClaw AI Agent on VPS: Full Setup Guide GitHub - xltvy/openclaw-memgpt: OpenClaw plugin that gives agents MemGPT-style memory: tiered core/archival/recall storage, self-directed memory operations via tool calls, memory-pressure warnings, and recursive summarisation. Integrates the reference MemGPT implementation via a local sidecar service, preserving the original architecture without reimplementation. Malicious AI 23 ClawHub Plugins Squat Official Org Scopes - Manifold Security what shipping OpenClaw in production taught us — AutoClaw AgentLine — AI Phone API | Phone Numbers, Voice & SMS for AI Agents Make Your OpenClaw Agent Cheaper, and Measure It Yourself GitHub - sammysltd/OpenEmployee: Make your OpenClaw agent employable: deny-by-default governance, budgets, allowlists, approval gates, and a signed audit trail via MakerChecker. Migrate from OpenClaw | Hermes Agent StackOverflow closed my OpenClaw and paperclipAI integration q. as "irrelevant" GitHub - sausin/outpost: Removing AI agents' quiet security problem Potassium — ClawHub Plugins Pi Building Pi, Openclaw's Minimalist Coding Agent | Mario Zechner, Creator of Pi I Spent 4 Hours So You Don’t Have To: Hetzner Metal + NixOS in ~15 Minutes − Irakli's blog GitHub - snuri00/osint-mcp: Self-hosted OSINT toolkit — MCP server, AI REPL, CLI, web app & chat apps (WhatsApp/Telegram/Discord via OpenClaw). Entity, event/news & social/community intelligence. Keyless-first. What a Regex Can't Do GitHub - ai-sns/openclaw-hermes-agent-network: OpenClaw Hermes AI Agent Social Network🦞💬🦞Built on Google 3D Maps and A2A protocol, connects OpenClaw and Hermes agents worldwide in a 3D environment. Phishing for Lobsters: How We Tricked OpenClaw into Spilling Secrets GitHub - CODEANDTRUST/clawcall: Give your OpenClaw / self-hosted AI agent inbound phone calls - a Twilio-to-gateway voice bridge with working agent tools mid-call (MIT). Build a ZeroCost Web Automation Pipeline with OpenRouter, OpenClaw, and MediaUse Let OpenClaw Run Wild in Simulation, Not on Your Customers | Veris AI GitHub - gpdir16/tabyAgent: A lighter, easier alternative to OpenClaw/Hermes. Runs autonomously inside Docker and chats with you through Telegram. Ask HN: What are the biggest problems you find in OpenClaw/Hermes? Microsoft launches Scout, an OpenClaw-inspired personal assistant GitHub - openclaw/openclaw-windows-node: Windows companion suite for OpenClaw - System Tray app, Shared library, Node, and PowerToys Command Palette extension Microsoft unveils Scout, an autonomous AI agent built on OpenClaw Gavriel Cohen found his own code inside OpenClaw, so he walked away GitHub - hunvreus/heypi: Chat agents for your team, with approvals and sandboxed tools. Slack, Discord, Telegram, webhooks.
openclaw ggsql — ClawHub
fanzhidongyz · 2026-04-29 · via Hacker News - Newest: "OpenClaw"

ggsql Visualization Skill

Generate charts from tabular data using ggsql SQL syntax.

Overview

ggsql extends SQL with visualization capabilities based on the Grammar of Graphics. Write familiar SQL queries, add visualization clauses, and get charts - no Python/R needed.

When to Use

USE this skill when:

  • "Visualize this data as a scatter plot"
  • "Create a histogram of X"
  • "Draw a bar chart comparing Y across categories"
  • "Plot time series data"
  • "Generate heatmap from table"
  • User provides tabular data and wants a chart

When NOT to Use

DON'T use this skill when:

  • Interactive/dynamic charts → use JavaScript libraries
  • Complex statistical visualizations → use Python/R
  • Large-scale data dashboards → use dedicated tools
  • 3D visualizations → use specialized software

Input Schema

data: <CSV file path | JSON array | SQL table reference>
chart_type: point | line | bar | histogram | boxplot | violin | density | heatmap | pie
mapping:
  x: <column name>        # Required for most charts
  y: <column name>        # Required for point, line, bar, boxplot
  fill: <column name>     # Optional, for color encoding
  color: <column name>    # Optional, for stroke color
  shape: <column name>    # Optional, for point shapes
  size: <column name>     # Optional, for point sizes
options:
  title: <chart title>              # Optional
  subtitle: <chart subtitle>        # Optional
  x_label: <x-axis label>           # Optional
  y_label: <y-axis label>           # Optional
  binwidth: <number>                # For histogram
  facet: <column name>              # For small multiples
  facet_by: <column name>           # For 2D faceting
  scale_x: continuous | discrete | binned | log10
  scale_y: continuous | discrete | binned | log10
  scale_fill: continuous | discrete | binned

Output

  • SVG chart file (primary)
  • PNG chart file (optional)
  • Embedded base64 image for chat display

Chart Types and Templates

Scatter Plot (point)

Required mapping: x, y Optional mapping: fill, color, shape, size

VISUALISE {x} AS x, {y} AS y, {fill} AS fill
FROM {data_source}
DRAW point
LABEL title => '{title}', x => '{x_label}', y => '{y_label}'

Line Chart (line)

Required mapping: x, y Optional mapping: color, linetype

VISUALISE {x} AS x, {y} AS y, {color} AS color
FROM {data_source}
DRAW line
LABEL title => '{title}', x => '{x_label}', y => '{y_label}'

Bar Chart (bar)

Required mapping: x, y (or auto-count with just x) Optional mapping: fill

SELECT {x}, COUNT(*) as count FROM {data_source}
GROUP BY {x}
VISUALISE {x} AS x, count AS y, {fill} AS fill
DRAW bar
LABEL title => '{title}', x => '{x_label}', y => '{y_label}'

Histogram (histogram)

Required mapping: x Optional mapping: fill, binwidth

VISUALISE {x} AS x, {fill} AS fill
FROM {data_source}
DRAW histogram
  SETTING binwidth => {binwidth}
LABEL title => '{title}', x => '{x_label}'

Boxplot (boxplot)

Required mapping: x, y (x categorical, y numeric) Optional mapping: fill

VISUALISE {x} AS x, {y} AS y, {fill} AS fill
FROM {data_source}
DRAW boxplot
LABEL title => '{title}', x => '{x_label}', y => '{y_label}'

Heatmap (tile)

Required mapping: x, y, fill Optional mapping: none

VISUALISE {x} AS x, {y} AS y, {fill} AS fill
FROM {data_source}
DRAW tile
SCALE BINNED fill
LABEL title => '{title}', x => '{x_label}', y => '{y_label}'

Density Plot (density)

Required mapping: x Optional mapping: fill

VISUALISE {x} AS x, {fill} AS fill
FROM {data_source}
DRAW density
LABEL title => '{title}', x => '{x_label}'

Violin Plot (violin)

Required mapping: x, y (x categorical, y numeric) Optional mapping: fill

VISUALISE {x} AS x, {y} AS y, {fill} AS fill
FROM {data_source}
DRAW violin
LABEL title => '{title}', x => '{x_label}', y => '{y_label}'

Pie Chart (pie with polar projection)

Required mapping: fill Optional mapping: none

SELECT {fill}, COUNT(*) as count FROM {data_source}
GROUP BY {fill}
VISUALISE {fill} AS fill, count AS y
DRAW bar
PROJECT polar
LABEL title => '{title}'

Scale Types

ScaleUse CaseExample
CONTINUOUSNumeric valuesSCALE CONTINUOUS x FROM [0, null]
DISCRETECategoriesSCALE DISCRETE fill TO ['red', 'blue']
BINNEDBinning continuousSCALE BINNED fill
ORDINALOrdered categoriesSCALE ORDINAL x
IDENTITYDirect valuesSCALE IDENTITY color
log10Log transformSCALE CONTINUOUS y VIA log10

Faceting (Small Multiples)

1D Faceting

VISUALISE {x} AS x, {y} AS y
FROM {data_source}
DRAW point
FACET {facet_column}

2D Faceting

VISUALISE {x} AS x, {y} AS y
FROM {data_source}
DRAW point
FACET {facet_column} BY {facet_by_column}

Multi-layer Charts

Combine multiple DRAW clauses:

VISUALISE {x} AS x, {y} AS y
FROM {data_source}
DRAW line
  MAPPING {group} AS color
DRAW point
  MAPPING {group} AS fill
LABEL title => '{title}'

Execution Methods

Method 1: WASM Playground (Recommended for Testing)

  1. Visit https://ggsql.org/wasm/
  2. Use built-in datasets: ggsql:penguins, ggsql:airquality
  3. Upload CSV via "Upload Data" button
  4. Run SQL and save as SVG/PNG

Method 2: CLI (Local Execution)

# Install
cargo install ggsql-cli

# Run
ggsql-cli run -f input.sql -o output.svg

Method 3: Jupyter Kernel

uv tool install ggsql-jupyter
ggsql-jupyter --install

Examples

Example 1: Scatter Plot with Color

Input:

data: penguins.csv
chart_type: point
mapping:
  x: bill_length_mm
  y: bill_depth_mm
  fill: species
options:
  title: Penguin Bill Dimensions
  x_label: Bill Length (mm)
  y_label: Bill Depth (mm)

Generated SQL:

SELECT * FROM 'penguins.csv'
VISUALISE bill_length_mm AS x, bill_depth_mm AS y, species AS fill
DRAW point
LABEL
  title => 'Penguin Bill Dimensions',
  x => 'Bill Length (mm)',
  y => 'Bill Depth (mm)'

Example 2: Histogram

Input:

data: sales.csv
chart_type: histogram
mapping:
  x: revenue
options:
  title: Revenue Distribution
  binwidth: 1000

Generated SQL:

SELECT * FROM 'sales.csv'
VISUALISE revenue AS x
DRAW histogram
  SETTING binwidth => 1000
LABEL title => 'Revenue Distribution'

Example 3: Faceted Scatter Plot

Input:

data: penguins.csv
chart_type: point
mapping:
  x: bill_length_mm
  y: bill_depth_mm
  fill: species
options:
  title: Penguins by Island
  facet: island

Generated SQL:

SELECT * FROM 'penguins.csv'
VISUALISE bill_length_mm AS x, bill_depth_mm AS y, species AS fill
DRAW point
FACET island
LABEL title => 'Penguins by Island'

Example 4: Multi-layer Chart

Input:

data: sales.csv
chart_type: multi
mapping:
  x: date
  y: revenue
  group: region
options:
  title: Revenue Trend by Region

Generated SQL:

SELECT * FROM 'sales.csv'
VISUALISE date AS x, revenue AS y
DRAW line
  MAPPING region AS color
DRAW point
  MAPPING region AS fill
LABEL title => 'Revenue Trend by Region'

SQL Generation Logic

When receiving YAML input:

  1. Parse chart_type to select template
  2. Validate required mapping fields
  3. Build VISUALISE clause from mapping
  4. Add DRAW clause with layer type
  5. Add optional clauses: SCALE, FACET, LABEL
  6. If data is CSV, use FROM 'path/to/file.csv'
  7. If data is table reference, use FROM table_name

Notes

  • ggsql is in alpha stage (v0.2.7), syntax may evolve
  • WASM Playground is the easiest way to test
  • No Python/R environment needed
  • Charts are static (SVG/PNG), not interactive
  • Grammar of Graphics philosophy: compose from layers, scales, coordinates

Resources