You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
main's #170 rewrote the CLI as a thin HTTP client with no local engine, so
this branch's CLI-side rss wiring (the `rss:` block on LocalDataSource, the
`rss` arm of register_source, and the crate's `rss` feature) has nothing left
to attach to and is dropped with it — rss sources are configured on the
server, whose wiring merged cleanly. Union resolutions for the skardi crate's
Cargo.toml (our rss feature + main's object_store) and the README source
table (main's updated Open Connector / Documents rows + our RSS row).
docs/rss.md's build-flag example updated to the thin-client invocation.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+40-34Lines changed: 40 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -43,7 +43,7 @@
43
43
**The most agent-friendly backend for builders shipping their first AI agent.** The painful part of agent-building isn't the prompt — it's the data plumbing: a vector DB to stand up, an embedding pipeline to maintain, a chunker to debug, a tool-call wrapper to write for every query. Skardi auto-bootstraps the primitives every agent needs so you ship in hours, not weeks:
44
44
45
45
-**[`auto_rag`](https://github.com/SkardiLabs/skardi-skills/tree/main/auto_rag) — Auto-RAG (Retrieval Augmented Generation).** Server-backed hybrid search (vector + full-text + RRF) via `skardi-server` over a datastore you already control (Postgres + pgvector, MongoDB, or Lance). The skill renders the config, starts the server, and drives ingestion and queries through REST. One command from a datastore to a working retrieval API your agent calls as a tool — no Python orchestration layer, no glue code.
46
-
-**[`auto_knowledge_base`](https://github.com/SkardiLabs/skardi-skills/tree/main/auto_knowledge_base) — Auto agent knowledge base.** Point it at a directory of documents and you have a queryable, citable local KB one command later. Chunking, embedding, indexing, and hybrid search are exposed to your agent as a `skardi grep` verb. Zero infra by default (SQLite + local embeddings), so any Claude Code / Cursor session gets a grounded knowledge base over your files.
46
+
-**[`auto_knowledge_base`](https://github.com/SkardiLabs/skardi-skills/tree/main/auto_knowledge_base) — Auto agent knowledge base.** Point it at a directory of documents and you have a queryable, citable local KB one command later. Chunking, embedding, indexing, and hybrid search are exposed to your agent as a `skardi run` verb. Zero infra by default (SQLite + local embeddings), so any Claude Code / Cursor session gets a grounded knowledge base over your files.
47
47
-**Zero bootstrap** — `ctx.yaml`, pipelines, schema, server, all rendered for you by **[skardi-skills](https://github.com/SkardiLabs/skardi-skills)**. Install once and your agent has a working data tool the same hour.
48
48
49
49
You build the agent. Skardi handles the data plane.
$ curl -X POST :8080/wiki-search-hybrid/execute -d '{...}' # same pipeline, served as REST
99
+
$ skardi run wiki-search-hybrid -p query="turing machines" -p limit=10 # shell tool, any Bash-tool agent
100
+
$ curl -X POST :8080/wiki-search-hybrid/execute -d '{...}' # same pipeline, served as REST
101
101
```
102
102
103
103
That uniformity is also what makes the *durable* reason to put a plane in front possible: **governance**. Once every read and write goes through one engine, three primitives compose on top of it instead of fragmenting across N SDKs:
@@ -120,7 +120,7 @@ For the longer technical read — each primitive's shipped vs. in-progress statu
120
120
(YAML pipelines)
121
121
```
122
122
123
-
-**`skardi` CLI** — run federated SQL or any pipeline directly from a shell. Drop it into Claude Code, Cursor, or any agent with a Bash tool and it's wired with no MCP config.
123
+
-**`skardi` CLI** — a thin HTTP client: send ad-hoc SQL or call any pipeline against a running `skardi-server`, right from a shell. Drop it into Claude Code, Cursor, or any agent with a Bash tool and it's wired with no MCP config.
124
124
-**`skardi-server`** — same engine over HTTP, with two surfaces: **online serving** (a YAML pipeline becomes a parameterized REST endpoint with an inferred request/response schema) and **offline jobs** (async batch writes into Lance or any read-write DB; if a job fails halfway you don't get a corrupted dataset, and every run is logged in a SQLite ledger you can list and inspect).
125
125
-**Skardi-server is stateful but lightweight** — a single Rust process, plus a small SQLite file for the run ledger and (optional) auth. One server can serve many agents; deploy it next to your data, behind your usual auth.
cargo run --bin skardi-server -- --ctx ./ctx.yaml --port 8080
213
210
```
214
211
215
-
**Step 3 — turn a parameterized SQL into an agent-callable verb.** Two YAMLs from [`demo/llm_wiki/cli/`](demo/llm_wiki/cli/) — the actual files, not pseudo-code:
212
+
**Step 2 — ad-hoc SQL against the running server.** The CLI prints the
213
+
response's `data` array as pretty-printed JSON to stdout by default (pass
214
+
`--table` for an ASCII table) — see [docs/cli.md](docs/cli.md).
215
+
216
+
```bash
217
+
skardi query -e "SELECT * FROM products LIMIT 10"
218
+
skardi query -e "SELECT * FROM products LIMIT 10" --table
219
+
```
216
220
217
-
> ⚠️ Unlike Steps 1–2 (zero-dependency), this hybrid-search verb also needs a local embedding model at `models/…` + the `sqlite-vec` extension (`SQLITE_VEC_PATH`) and a seeded DB — so it is **not runnable by copy-paste alone**. The [`auto_knowledge_base` skill](https://github.com/SkardiLabs/skardi-skills/tree/main/auto_knowledge_base) sets all of this up for you; use it if you just want the verb working.
221
+
**Step 3 — turn a parameterized SQL into an agent-callable pipeline.** One
222
+
YAML from [`demo/llm_wiki/cli/`](demo/llm_wiki/cli/) — the actual file, not
223
+
pseudo-code:
224
+
225
+
> ⚠️ Unlike Steps 1–2 (zero-dependency), this hybrid-search pipeline also needs a local embedding model at `models/…` + the `sqlite-vec` extension (`SQLITE_VEC_PATH`) and a seeded DB — so it is **not runnable by copy-paste alone**. The [`auto_knowledge_base` skill](https://github.com/SkardiLabs/skardi-skills/tree/main/auto_knowledge_base) sets all of this up for you; use it if you just want the pipeline working.
218
226
219
227
```yaml
220
228
# pipelines/search_hybrid.yaml — declares the SQL once; Skardi infers the params
@@ -239,24 +247,22 @@ spec:
239
247
ORDER BY rrf_score DESC LIMIT {limit}
240
248
```
241
249
242
-
```yaml
243
-
# aliases.yaml — gives the pipeline a short shell verb, with positional + default args
The output your agent sees is the standard Arrow-pretty table on stdout (`+----+--------+ ...`). Over the server (next section), the same pipeline is mounted at `POST /wiki-search-hybrid/execute` — the request body is a JSON object whose keys match the `{...}` placeholders in the SQL (Skardi infers this schema and serves it on `GET /data_source` so the agent can read it). One full cycle:
262
+
The same pipeline is mounted at `POST /wiki-search-hybrid/execute` — the
263
+
request body is a JSON object whose keys match the `{...}` placeholders in
264
+
the SQL (Skardi infers this schema and serves it on `GET /data_source` so
265
+
the agent can read it). One full cycle:
260
266
261
267
```bash
262
268
curl -X POST http://localhost:8080/wiki-search-hybrid/execute \
@@ -272,7 +278,7 @@ curl -X POST http://localhost:8080/wiki-search-hybrid/execute \
272
278
"rows": 10, "execution_time_ms": 23 }
273
279
```
274
280
275
-
Drop `skardi` into a Claude Code or Cursor session and the agent can already use any pipeline you've declared as a tool via its Bash integration. No MCP config, no separate server — that's the MVP design intent.
281
+
Drop `skardi` into a Claude Code or Cursor session and the agent can already use any pipeline you've declared as a tool via its Bash integration, as long as a `skardi-server` is reachable — no MCP config needed.
276
282
277
283
### Skardi Server — online serving + offline jobs
278
284
@@ -330,8 +336,8 @@ For end-to-end walkthroughs — RAG, recommendations, an agent-native wiki, a si
330
336
| S3 / GCS / Azure | Read | No | CSV, Parquet, Lance from object stores | [docs/S3_USAGE.md](docs/S3_USAGE.md) |
-[x] CLI pipeline binding + aliases — `skardi run <pipeline> --param=…` and user-defined verb aliases ([#90](https://github.com/SkardiLabs/skardi/pull/90))
446
-
-[x] CLI federated SQL — `skardi query`against files, object stores, datalake formats, and databases with no server required
451
+
- [x] CLI pipeline binding — `skardi run <pipeline> -p name=value` calls any named, server-loaded pipeline directly ([#90](https://github.com/SkardiLabs/skardi/pull/90))
452
+
- [x] CLI as a thin HTTP client — `skardi query` / `skardi run` send ad-hoc SQL and pipeline calls to a running `skardi-server` over the network; federation across sources happens server-side (see [docs/cli.md](docs/cli.md))
0 commit comments