[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CC2X7VSHN47V4GK2ZYVFN9":3,"skill-same:01M6CC2X7VSHN47V4GK2ZYVFN9":80},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":39,"install":40,"resources":53},"01M6CC2X7VSHN47V4GK2ZYVFN9","sqlite-vec",null,"sqlite-vec extension for vector similarity search in SQLite. Use when storing embeddings, performing KNN queries, or building semantic search features. Triggers on sqlite-vec, vec0, MATCH, vec_distance, partition key, float[N], int8[N], bit[N], serialize_float32, serialize_int8, vec_f32, vec_int8, vec_bit, vec_normalize, vec_quantize_binary, distance_metric, metadata columns, auxiliary columns.","ray-manaloto\u002Fmacos-development-environment","ray-manaloto","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F227192835?v=4","01M6CBR7J13ZA01X5YB1A1QRJP","01M6CBR7P0S3NS8ZV81JYNST14",1,"MIT","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fsqlite-vec\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27],"sqlite","sqlite vec","semantic search","search","vector","embeddings","metadata","Similarity Search","partition","use","2026-11-10 10:12:30",false,"---\nname: sqlite-vec\ndescription: sqlite-vec extension for vector similarity search in SQLite. Use when storing embeddings, performing KNN queries, or building semantic search features. Triggers on sqlite-vec, vec0, MATCH, vec_distance, partition key, float[N], int8[N], bit[N], serialize_float32, serialize_int8, vec_f32, vec_int8, vec_bit, vec_normalize, vec_quantize_binary, distance_metric, metadata columns, auxiliary columns.\n---\n\n# sqlite-vec\n\nsqlite-vec is a lightweight SQLite extension for vector similarity search. It enables storing and querying vector embeddings directly in SQLite databases without external vector databases.\n\n## Quick Reference\n\n### Load Extension\n```python\nimport sqlite3\nimport sqlite_vec\nfrom sqlite_vec import serialize_float32\n\ndb = sqlite3.connect(\":memory:\")\ndb.enable_load_extension(True)\nsqlite_vec.load(db)\ndb.enable_load_extension(False)\n```\n\n### Basic KNN Query\n```sql\n-- Create table\nCREATE VIRTUAL TABLE vec_items USING vec0(\n  embedding float[4]\n);\n\n-- Insert vectors (use serialize_float32() in Python)\nINSERT INTO vec_items(rowid, embedding)\nVALUES (1, X'CDCCCC3DCDCC4C3E9A99993E00008040');\n\n-- KNN query\nSELECT rowid, distance\nFROM vec_items\nWHERE embedding MATCH '[0.3, 0.3, 0.3, 0.3]'\n  AND k = 10\nORDER BY distance;\n```\n\n## Core Concepts\n\n### Vector Types\n\nsqlite-vec supports three vector element types:\n\n1. **float[N]** - 32-bit floating point (4 bytes per element)\n   - Most common for embeddings (OpenAI, Cohere, etc.)\n   - Example: `float[1536]` for text-embedding-3-small\n\n2. **int8[N]** - 8-bit signed integers (1 byte per element)\n   - Range: -128 to 127\n   - Used for quantized embeddings\n\n3. **bit[N]** - Binary vectors (1 bit per element, packed into bytes)\n   - Most compact storage\n   - Used for binary quantization\n\n### Binary Serialization Format\n\nVectors must be provided as binary BLOBs or JSON strings. Python helper functions:\n\n```python\nfrom sqlite_vec import serialize_float32, serialize_int8\nimport struct\n\n# Float32 vectors\nvector = [0.1, 0.2, 0.3, 0.4]\nblob = serialize_float32(vector)\n# Equivalent to: struct.pack(\"%sf\" % len(vector), *vector)\n\n# Int8 vectors\nint_vector = [1, 2, 3, 4]\nblob = serialize_int8(int_vector)\n# Equivalent to: struct.pack(\"%sb\" % len(int_vector), *int_vector)\n```\n\nNumPy arrays can be passed directly (must cast to float32):\n```python\nimport numpy as np\nembedding = np.array([0.1, 0.2, 0.3, 0.4]).astype(np.float32)\ndb.execute(\"SELECT vec_length(?)\", [embedding])\n```\n\n## vec0 Virtual Tables\n\nThe vec0 virtual table is the primary data structure for vector search.\n\n### Basic Table Creation\n```sql\nCREATE VIRTUAL TABLE vec_documents USING vec0(\n  document_id integer primary key,\n  contents_embedding float[768]\n);\n```\n\n### Distance Metrics\n```sql\nCREATE VIRTUAL TABLE vec_items USING vec0(\n  embedding float[768] distance_metric=cosine\n);\n```\n\nSupported metrics: `l2` (default), `cosine`, `hamming` (bit vectors only)\n\n### Column Types\n\nvec0 tables support four column types:\n\n1. **Vector columns** - Store embeddings (float[N], int8[N], bit[N])\n2. **Metadata columns** - Indexed, filterable in KNN queries\n3. **Partition key columns** - Internal sharding for faster filtered queries\n4. **Auxiliary columns** - Unindexed storage (prefix with +)\n\nExample with all column types:\n```sql\nCREATE VIRTUAL TABLE vec_knowledge_base USING vec0(\n  document_id integer primary key,\n\n  -- Partition keys (sharding)\n  organization_id integer partition key,\n  created_month text partition key,\n\n  -- Vector column\n  content_embedding float[768] distance_metric=cosine,\n\n  -- Metadata columns (filterable in KNN)\n  document_type text,\n  language text,\n  word_count integer,\n  is_public boolean,\n\n  -- Auxiliary columns (not filterable)\n  +title text,\n  +full_content text,\n  +url text\n);\n```\n\n## KNN Queries\n\n### Standard Query Syntax\n```sql\nSELECT rowid, distance\nFROM vec_items\nWHERE embedding MATCH ?\n  AND k = 10\nORDER BY distance;\n```\n\nKey components:\n- `WHERE embedding MATCH ?` - Triggers KNN query\n- `AND k = 10` - Limit to 10 nearest neighbors\n- `ORDER BY distance` - Sort results by proximity\n\n### Metadata Filtering\n```sql\nSELECT document_id, distance\nFROM vec_movies\nWHERE synopsis_embedding MATCH ?\n  AND k = 5\n  AND genre = 'scifi'\n  AND num_reviews BETWEEN 100 AND 500\n  AND mean_rating > 3.5\n  AND contains_violence = false\nORDER BY distance;\n```\n\nSupported operators on metadata: `=`, `!=`, `>`, `>=`, `\u003C`, `\u003C=`, `BETWEEN`\n\nNot supported: `IS NULL`, `LIKE`, `GLOB`, `REGEXP`, scalar functions\n\n### Partition Key Filtering\n```sql\nSELECT document_id, distance\nFROM vec_documents\nWHERE contents_embedding MATCH ?\n  AND k = 20\n  AND user_id = 123  -- Partition key pre-filters\nORDER BY distance;\n```\n\nPartition keys enable multi-tenant or temporal sharding. Best practices:\n- Each unique partition value should have 100+ vectors\n- Use 1-2 partition keys maximum\n- Avoid over-sharding (too many unique values)\n\n### Joining with Source Tables\n```sql\nWITH knn_matches AS (\n  SELECT document_id, distance\n  FROM vec_documents\n  WHERE contents_embedding MATCH ?\n    AND k = 10\n)\nSELECT\n  documents.id,\n  documents.title,\n  knn_matches.distance\nFROM knn_matches\nLEFT JOIN documents ON documents.id = knn_matches.document_id\nORDER BY knn_matches.distance;\n```\n\n## Distance Functions\n\nFor manual distance calculations (non-vec0 tables):\n\n```sql\n-- L2 distance\nSELECT vec_distance_l2('[1, 2]', '[3, 4]');\n-- 2.8284...\n\n-- Cosine distance\nSELECT vec_distance_cosine('[1, 1]', '[2, 2]');\n-- ~0.0\n\n-- Hamming distance (bit vectors)\nSELECT vec_distance_hamming(vec_bit(X'F0'), vec_bit(X'0F'));\n-- 8\n```\n\n## Vector Operations\n\n### Constructors\n```sql\n-- Float32\nSELECT vec_f32('[.1, .2, .3, 4]');  -- Subtype 223\n\n-- Int8\nSELECT vec_int8('[1, 2, 3, 4]');  -- Subtype 225\n\n-- Bit\nSELECT vec_bit(X'F0');  -- Subtype 224\n```\n\n### Metadata Functions\n```sql\n-- Get length\nSELECT vec_length('[1, 2, 3]');  -- 3\n\n-- Get type\nSELECT vec_type(vec_int8('[1, 2]'));  -- 'int8'\n\n-- Convert to JSON\nSELECT vec_to_json(vec_f32('[1, 2]'));  -- '[1.000000,2.000000]'\n```\n\n### Arithmetic\n```sql\n-- Add vectors\nSELECT vec_to_json(\n  vec_add('[.1, .2, .3]', '[.4, .5, .6]')\n);\n-- '[0.500000,0.700000,0.900000]'\n\n-- Subtract vectors\nSELECT vec_to_json(\n  vec_sub('[.1, .2, .3]', '[.4, .5, .6]')\n);\n-- '[-0.300000,-0.300000,-0.300000]'\n```\n\n### Transformations\n```sql\n-- Normalize (L2 norm)\nSELECT vec_to_json(\n  vec_normalize('[2, 3, 1, -4]')\n);\n-- '[0.365148,0.547723,0.182574,-0.730297]'\n\n-- Slice (for Matryoshka embeddings)\nSELECT vec_to_json(\n  vec_slice('[1, 2, 3, 4]', 0, 2)\n);\n-- '[1.000000,2.000000]'\n\n-- Matryoshka pattern: slice then normalize\nSELECT vec_normalize(vec_slice(embedding, 0, 256))\nFROM vec_items;\n```\n\n### Quantization\n```sql\n-- Binary quantization (positive→1, negative→0)\nSELECT vec_quantize_binary('[1, 2, 3, 4, -5, -6, -7, -8]');\n-- X'0F'\n\n-- Visualize\nSELECT vec_to_json(\n  vec_quantize_binary('[1, 2, -3, 4, -5, 6, -7, 8]')\n);\n-- '[0,1,0,0,1,0,1,0]'\n```\n\n### Iteration\n```sql\n-- Iterate through elements\nSELECT rowid, value\nFROM vec_each('[1, 2, 3, 4]');\n\u002F*\n┌───────┬───────┐\n│ rowid │ value │\n├───────┼───────┤\n│ 0     │ 1     │\n│ 1     │ 2     │\n│ 2     │ 3     │\n│ 3     │ 4     │\n└───────┴───────┘\n*\u002F\n```\n\n## Python Integration\n\n### Complete Example\n```python\nimport sqlite3\nimport sqlite_vec\nfrom sqlite_vec import serialize_float32\n\n# Setup\ndb = sqlite3.connect(\":memory:\")\ndb.enable_load_extension(True)\nsqlite_vec.load(db)\ndb.enable_load_extension(False)\n\n# Create table\ndb.execute(\"\"\"\n    CREATE VIRTUAL TABLE vec_items USING vec0(\n        embedding float[4]\n    )\n\"\"\")\n\n# Insert vectors\nitems = [\n    (1, [0.1, 0.1, 0.1, 0.1]),\n    (2, [0.2, 0.2, 0.2, 0.2]),\n    (3, [0.3, 0.3, 0.3, 0.3])\n]\n\nwith db:\n    for rowid, vector in items:\n        db.execute(\n            \"INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)\",\n            [rowid, serialize_float32(vector)]\n        )\n\n# Query\nquery = [0.25, 0.25, 0.25, 0.25]\nresults = db.execute(\n    \"\"\"\n    SELECT rowid, distance\n    FROM vec_items\n    WHERE embedding MATCH ?\n      AND k = 2\n    ORDER BY distance\n    \"\"\",\n    [serialize_float32(query)]\n).fetchall()\n\nfor rowid, distance in results:\n    print(f\"rowid={rowid}, distance={distance}\")\n```\n\n### Embedding API Integration\n```python\nfrom openai import OpenAI\nfrom sqlite_vec import serialize_float32\n\nclient = OpenAI()\n\n# Generate embedding\nresponse = client.embeddings.create(\n    input=\"your text here\",\n    model=\"text-embedding-3-small\"\n)\nembedding = response.data[0].embedding\n\n# Store in sqlite-vec\ndb.execute(\n    \"INSERT INTO vec_documents(id, embedding) VALUES(?, ?)\",\n    [doc_id, serialize_float32(embedding)]\n)\n\n# Query\nquery_embedding = client.embeddings.create(\n    input=\"search query\",\n    model=\"text-embedding-3-small\"\n).data[0].embedding\n\nresults = db.execute(\n    \"\"\"\n    SELECT id, distance\n    FROM vec_documents\n    WHERE embedding MATCH ?\n      AND k = 10\n    \"\"\",\n    [serialize_float32(query_embedding)]\n).fetchall()\n```\n\n## Performance Tips\n\n1. **Use partition keys** for multi-tenant or temporally-filtered queries\n2. **Keep k reasonable** (10-100 for most use cases)\n3. **Filter with metadata** columns when possible\n4. **Choose appropriate distance metric** for your embeddings\n5. **Batch operations** in transactions\n6. **Use auxiliary columns** for large data not needed in filtering\n7. **Ensure partition keys have 100+ vectors** per unique value\n\n## Common Patterns\n\n### Multi-tenant Search\n```sql\nCREATE VIRTUAL TABLE vec_docs USING vec0(\n  doc_id integer primary key,\n  user_id integer partition key,\n  embedding float[768]\n);\n\nSELECT doc_id, distance\nFROM vec_docs\nWHERE embedding MATCH ? AND k = 10 AND user_id = 123;\n```\n\n### Hybrid Search\n```sql\nSELECT product_id, distance\nFROM vec_products\nWHERE embedding MATCH ?\n  AND k = 20\n  AND category = 'electronics'\n  AND price \u003C 1000.0\nORDER BY distance;\n```\n\n### Matryoshka Embeddings\n```sql\n-- Adaptive dimensions: slice then normalize\nSELECT vec_normalize(vec_slice(embedding, 0, 256))\nFROM vec_items;\n```\n\n## Reference Files\n\n- [setup.md](.\u002Freferences\u002Fsetup.md) - Installation, extension loading, Python bindings, NumPy integration\n- [tables.md](.\u002Freferences\u002Ftables.md) - vec0 table creation, column types, metadata\u002Fpartition\u002Fauxiliary columns\n- [queries.md](.\u002Freferences\u002Fqueries.md) - KNN query patterns, metadata filtering, partition filtering, optimization\n- [operations.md](.\u002Freferences\u002Foperations.md) - Vector operations, constructors, transformations, quantization, batch operations\n\n## Resources\n\n- Official documentation: https:\u002F\u002Falexgarcia.xyz\u002Fsqlite-vec\n- GitHub repository: https:\u002F\u002Fgithub.com\u002Fasg017\u002Fsqlite-vec\n- Python package: https:\u002F\u002Fpypi.org\u002Fproject\u002Fsqlite-vec\u002F\n- API reference: https:\u002F\u002Falexgarcia.xyz\u002Fsqlite-vec\u002Fapi-reference.html\n","# sqlite-vec\n\nsqlite-vec is a lightweight SQLite extension for vector similarity search. It enables storing and querying vector embeddings directly in SQLite databases without external vector databases.\n\n## Quick Reference\n\n### Load Extension\n```python\nimport sqlite3\nimport sqlite_vec\nfrom sqlite_vec import serialize_float32\n\ndb = sqlite3.connect(\":memory:\")\ndb.enable_load_extension(True)\nsqlite_vec.load(db)\ndb.enable_load_extension(False)\n```\n\n### Basic KNN Query\n```sql\n-- Create table\nCREATE VIRTUAL TABLE vec_items USING vec0(\n  embedding float[4]\n);\n\n-- Insert vectors (use serialize_float32() in Python)\nINSERT INTO vec_items(rowid, embedding)\nVALUES (1, X'CDCCCC3DCDCC4C3E9A99993E00008040');\n\n-- KNN query\nSELECT rowid, distance\nFROM vec_items\nWHERE embedding MATCH '[0.3, 0.3, 0.3, 0.3]'\n  AND k = 10\nORDER BY distance;\n```\n\n## Core Concepts\n\n### Vector Types\n\nsqlite-vec supports three vector element types:\n\n1. **float[N]** - 32-bit floating point (4 bytes per element)\n   - Most common for embeddings (OpenAI, Cohere, etc.)\n   - Example: `float[1536]` for text-embedding-3-small\n\n2. **int8[N]** - 8-bit signed integers (1 byte per element)\n   - Range: -128 to 127\n   - Used for quantized embeddings\n\n3. **bit[N]** - Binary vectors (1 bit per element, packed into bytes)\n   - Most compact storage\n   - Used for binary quantization\n\n### Binary Serialization Format\n\nVectors must be provided as binary BLOBs or JSON strings. Python helper functions:\n\n```python\nfrom sqlite_vec import serialize_float32, serialize_int8\nimport struct\n\n# Float32 vectors\nvector = [0.1, 0.2, 0.3, 0.4]\nblob = serialize_float32(vector)\n# Equivalent to: struct.pack(\"%sf\" % len(vector), *vector)\n\n# Int8 vectors\nint_vector = [1, 2, 3, 4]\nblob = serialize_int8(int_vector)\n# Equivalent to: struct.pack(\"%sb\" % len(int_vector), *int_vector)\n```\n\nNumPy arrays can be passed directly (must cast to float32):\n```python\nimport numpy as np\nembedding = np.array([0.1, 0.2, 0.3, 0.4]).astype(np.float32)\ndb.execute(\"SELECT vec_length(?)\", [embedding])\n```\n\n## vec0 Virtual Tables\n\nThe vec0 virtual table is the primary data structure for vector search.\n\n### Basic Table Creation\n```sql\nCREATE VIRTUAL TABLE vec_documents USING vec0(\n  document_id integer primary key,\n  contents_embedding float[768]\n);\n```\n\n### Distance Metrics\n```sql\nCREATE VIRTUAL TABLE vec_items USING vec0(\n  embedding float[768] distance_metric=cosine\n);\n```\n\nSupported metrics: `l2` (default), `cosine`, `hamming` (bit vectors only)\n\n### Column Types\n\nvec0 tables support four column types:\n\n1. **Vector columns** - Store embeddings (float[N], int8[N], bit[N])\n2. **Metadata columns** - Indexed, filterable in KNN queries\n3. **Partition key columns** - Internal sharding for faster filtered queries\n4. **Auxiliary columns** - Unindexed storage (prefix with +)\n\nExample with all column types:\n```sql\nCREATE VIRTUAL TABLE vec_knowledge_base USING vec0(\n  document_id integer primary key,\n\n  -- Partition keys (sharding)\n  organization_id integer partition key,\n  created_month text partition key,\n\n  -- Vector column\n  content_embedding float[768] distance_metric=cosine,\n\n  -- Metadata columns (filterable in KNN)\n  document_type text,\n  language text,\n  word_count integer,\n  is_public boolean,\n\n  -- Auxiliary columns (not filterable)\n  +title text,\n  +full_content text,\n  +url text\n);\n```\n\n## KNN Queries\n\n### Standard Query Syntax\n```sql\nSELECT rowid, distance\nFROM vec_items\nWHERE embedding MATCH ?\n  AND k = 10\nORDER BY distance;\n```\n\nKey components:\n- `WHERE embedding MATCH ?` - Triggers KNN query\n- `AND k = 10` - Limit to 10 nearest neighbors\n- `ORDER BY distance` - Sort results by proximity\n\n### Metadata Filtering\n```sql\nSELECT document_id, distance\nFROM vec_movies\nWHERE synopsis_embedding MATCH ?\n  AND k = 5\n  AND genre = 'scifi'\n  AND num_reviews BETWEEN 100 AND 500\n  AND mean_rating > 3.5\n  AND contains_violence = false\nORDER BY distance;\n```\n\nSupported operators on metadata: `=`, `!=`, `>`, `>=`, `\u003C`, `\u003C=`, `BETWEEN`\n\nNot supported: `IS NULL`, `LIKE`, `GLOB`, `REGEXP`, scalar functions\n\n### Partition Key Filtering\n```sql\nSELECT document_id, distance\nFROM vec_documents\nWHERE contents_embedding MATCH ?\n  AND k = 20\n  AND user_id = 123  -- Partition key pre-filters\nORDER BY distance;\n```\n\nPartition keys enable multi-tenant or temporal sharding. Best practices:\n- Each unique partition value should have 100+ vectors\n- Use 1-2 partition keys maximum\n- Avoid over-sharding (too many unique values)\n\n### Joining with Source Tables\n```sql\nWITH knn_matches AS (\n  SELECT document_id, distance\n  FROM vec_documents\n  WHERE contents_embedding MATCH ?\n    AND k = 10\n)\nSELECT\n  documents.id,\n  documents.title,\n  knn_matches.distance\nFROM knn_matches\nLEFT JOIN documents ON documents.id = knn_matches.document_id\nORDER BY knn_matches.distance;\n```\n\n## Distance Functions\n\nFor manual distance calculations (non-vec0 tables):\n\n```sql\n-- L2 distance\nSELECT vec_distance_l2('[1, 2]', '[3, 4]');\n-- 2.8284...\n\n-- Cosine distance\nSELECT vec_distance_cosine('[1, 1]', '[2, 2]');\n-- ~0.0\n\n-- Hamming distance (bit vectors)\nSELECT vec_distance_hamming(vec_bit(X'F0'), vec_bit(X'0F'));\n-- 8\n```\n\n## Vector Operations\n\n### Constructors\n```sql\n-- Float32\nSELECT vec_f32('[.1, .2, .3, 4]');  -- Subtype 223\n\n-- Int8\nSELECT vec_int8('[1, 2, 3, 4]');  -- Subtype 225\n\n-- Bit\nSELECT vec_bit(X'F0');  -- Subtype 224\n```\n\n### Metadata Functions\n```sql\n-- Get length\nSELECT vec_length('[1, 2, 3]');  -- 3\n\n-- Get type\nSELECT vec_type(vec_int8('[1, 2]'));  -- 'int8'\n\n-- Convert to JSON\nSELECT vec_to_json(vec_f32('[1, 2]'));  -- '[1.000000,2.000000]'\n```\n\n### Arithmetic\n```sql\n-- Add vectors\nSELECT vec_to_json(\n  vec_add('[.1, .2, .3]', '[.4, .5, .6]')\n);\n-- '[0.500000,0.700000,0.900000]'\n\n-- Subtract vectors\nSELECT vec_to_json(\n  vec_sub('[.1, .2, .3]', '[.4, .5, .6]')\n);\n-- '[-0.300000,-0.300000,-0.300000]'\n```\n\n### Transformations\n```sql\n-- Normalize (L2 norm)\nSELECT vec_to_json(\n  vec_normalize('[2, 3, 1, -4]')\n);\n-- '[0.365148,0.547723,0.182574,-0.730297]'\n\n-- Slice (for Matryoshka embeddings)\nSELECT vec_to_json(\n  vec_slice('[1, 2, 3, 4]', 0, 2)\n);\n-- '[1.000000,2.000000]'\n\n-- Matryoshka pattern: slice then normalize\nSELECT vec_normalize(vec_slice(embedding, 0, 256))\nFROM vec_items;\n```\n\n### Quantization\n```sql\n-- Binary quantization (positive→1, negative→0)\nSELECT vec_quantize_binary('[1, 2, 3, 4, -5, -6, -7, -8]');\n-- X'0F'\n\n-- Visualize\nSELECT vec_to_json(\n  vec_quantize_binary('[1, 2, -3, 4, -5, 6, -7, 8]')\n);\n-- '[0,1,0,0,1,0,1,0]'\n```\n\n### Iteration\n```sql\n-- Iterate through elements\nSELECT rowid, value\nFROM vec_each('[1, 2, 3, 4]');\n\u002F*\n┌───────┬───────┐\n│ rowid │ value │\n├───────┼───────┤\n│ 0     │ 1     │\n│ 1     │ 2     │\n│ 2     │ 3     │\n│ 3     │ 4     │\n└───────┴───────┘\n*\u002F\n```\n\n## Python Integration\n\n### Complete Example\n```python\nimport sqlite3\nimport sqlite_vec\nfrom sqlite_vec import serialize_float32\n\n# Setup\ndb = sqlite3.connect(\":memory:\")\ndb.enable_load_extension(True)\nsqlite_vec.load(db)\ndb.enable_load_extension(False)\n\n# Create table\ndb.execute(\"\"\"\n    CREATE VIRTUAL TABLE vec_items USING vec0(\n        embedding float[4]\n    )\n\"\"\")\n\n# Insert vectors\nitems = [\n    (1, [0.1, 0.1, 0.1, 0.1]),\n    (2, [0.2, 0.2, 0.2, 0.2]),\n    (3, [0.3, 0.3, 0.3, 0.3])\n]\n\nwith db:\n    for rowid, vector in items:\n        db.execute(\n            \"INSERT INTO vec_items(rowid, embedding) VALUES (?, ?)\",\n            [rowid, serialize_float32(vector)]\n        )\n\n# Query\nquery = [0.25, 0.25, 0.25, 0.25]\nresults = db.execute(\n    \"\"\"\n    SELECT rowid, distance\n    FROM vec_items\n    WHERE embedding MATCH ?\n      AND k = 2\n    ORDER BY distance\n    \"\"\",\n    [serialize_float32(query)]\n).fetchall()\n\nfor rowid, distance in results:\n    print(f\"rowid={rowid}, distance={distance}\")\n```\n\n### Embedding API Integration\n```python\nfrom openai import OpenAI\nfrom sqlite_vec import serialize_float32\n\nclient = OpenAI()\n\n# Generate embedding\nresponse = client.embeddings.create(\n    input=\"your text here\",\n    model=\"text-embedding-3-small\"\n)\nembedding = response.data[0].embedding\n\n# Store in sqlite-vec\ndb.execute(\n    \"INSERT INTO vec_documents(id, embedding) VALUES(?, ?)\",\n    [doc_id, serialize_float32(embedding)]\n)\n\n# Query\nquery_embedding = client.embeddings.create(\n    input=\"search query\",\n    model=\"text-embedding-3-small\"\n).data[0].embedding\n\nresults = db.execute(\n    \"\"\"\n    SELECT id, distance\n    FROM vec_documents\n    WHERE embedding MATCH ?\n      AND k = 10\n    \"\"\",\n    [serialize_float32(query_embedding)]\n).fetchall()\n```\n\n## Performance Tips\n\n1. **Use partition keys** for multi-tenant or temporally-filtered queries\n2. **Keep k reasonable** (10-100 for most use cases)\n3. **Filter with metadata** columns when possible\n4. **Choose appropriate distance metric** for your embeddings\n5. **Batch operations** in transactions\n6. **Use auxiliary columns** for large data not needed in filtering\n7. **Ensure partition keys have 100+ vectors** per unique value\n\n## Common Patterns\n\n### Multi-tenant Search\n```sql\nCREATE VIRTUAL TABLE vec_docs USING vec0(\n  doc_id integer primary key,\n  user_id integer partition key,\n  embedding float[768]\n);\n\nSELECT doc_id, distance\nFROM vec_docs\nWHERE embedding MATCH ? AND k = 10 AND user_id = 123;\n```\n\n### Hybrid Search\n```sql\nSELECT product_id, distance\nFROM vec_products\nWHERE embedding MATCH ?\n  AND k = 20\n  AND category = 'electronics'\n  AND price \u003C 1000.0\nORDER BY distance;\n```\n\n### Matryoshka Embeddings\n```sql\n-- Adaptive dimensions: slice then normalize\nSELECT vec_normalize(vec_slice(embedding, 0, 256))\nFROM vec_items;\n```\n\n## Reference Files\n\n- [setup.md](.\u002Freferences\u002Fsetup.md) - Installation, extension loading, Python bindings, NumPy integration\n- [tables.md](.\u002Freferences\u002Ftables.md) - vec0 table creation, column types, metadata\u002Fpartition\u002Fauxiliary columns\n- [queries.md](.\u002Freferences\u002Fqueries.md) - KNN query patterns, metadata filtering, partition filtering, optimization\n- [operations.md](.\u002Freferences\u002Foperations.md) - Vector operations, constructors, transformations, quantization, batch operations\n\n## Resources\n\n- Official documentation: https:\u002F\u002Falexgarcia.xyz\u002Fsqlite-vec\n- GitHub repository: https:\u002F\u002Fgithub.com\u002Fasg017\u002Fsqlite-vec\n- Python package: https:\u002F\u002Fpypi.org\u002Fproject\u002Fsqlite-vec\u002F\n- API reference: https:\u002F\u002Falexgarcia.xyz\u002Fsqlite-vec\u002Fapi-reference.html\n",{"name":5,"description":7},"main","716b17df3ef6719d88aeac180015008b7ddfff6f",".claude\u002Fskills\u002Fskills\u002Fsqlite-vec",0,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment","https:\u002F\u002Fgithub.com\u002Fray-manaloto","2026-08-03 16:55:50",{"source":8,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add ray-manaloto\u002Fmacos-development-environment --skill sqlite-vec",{"tool":46,"command":47},"bunx","bunx skills add ray-manaloto\u002Fmacos-development-environment --skill sqlite-vec",{"tool":49,"command":50},"pnpm","pnpm dlx skills add ray-manaloto\u002Fmacos-development-environment --skill sqlite-vec","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fsqlite-vec\u002FSKILL.md",true,[54,60,64,68,72,76],{"path":55,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":58,"sourceHtmlUrl":59},"references\u002Foperations.md","REFERENCE","参考文档",8984,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fsqlite-vec\u002Freferences\u002Foperations.md",{"path":61,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Fqueries.md",7852,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fsqlite-vec\u002Freferences\u002Fqueries.md",{"path":65,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Fsetup.md",4367,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fsqlite-vec\u002Freferences\u002Fsetup.md",{"path":69,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Ftables.md",7418,"https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills\u002Fsqlite-vec\u002Freferences\u002Ftables.md",{"path":73,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":74,"sourceHtmlUrl":75},"SOURCE.md",362,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fkybernetwork-official-swap-simulate\u002FSOURCE.md",{"path":77,"resourceType":56,"resourceTypeDesc":57,"sizeBytes":78,"sourceHtmlUrl":79},"TRUST.auto.yaml",2176,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdefi\u002Fkybernetwork-official-swap-simulate\u002FTRUST.auto.yaml",[81,103,120,139,159,173],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":92,"publishedAt":28},"01M6CC8DXNJ39YWERYTWCGGCGG","next-workflow-step","Use this skill when the user wants to transition to the next workflow step, wrap up a session cleanly, prepare a handoff, or says things like \"next step\", \"continue the workflow\", \"wrap up\", \"hand off\", \"move to the next phase\", \"what's next in embrace\", or \"prepare for \u002Fclear\". Also triggers when the current octo:embrace phase appears complete and no explicit next action is set.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fworkflow-toolkit\u002Fskills\u002Fnext-workflow-step\u002FSKILL.md",[87],{"categoryNo":88,"categoryName":89,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[93,94,95,27,96,97,98,99,100,101,102],"next workflow step","workflow","up","session","user","wrap up","continue","handoff","prepare","SET",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":28},"01M6CC8BRZBQHEBXGMKPDM422P","source-discovery","This skill should be used when the user asks to \"find sources\", \"discover URLs\", \"catalog a source\", \"classify a URL\", \"search for libraries\", \"check what exists\", or mentions source discovery, URL cataloging, source classification, or research source management.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fsource-discovery\u002FSKILL.md",[],[110,111,112,113,21,114,115,116,117,97,118,119],"discovery","source discovery","research","libraries","classification","find","check","management","catalog","find sources",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":28},"01M6CC89CGJP69A0PS22G2H1FV","review-synthesis","This skill should be used when the user asks to \"summarize review findings\", \"prioritize fixes\", \"rank review issues\", \"combine reviewer feedback\", \"create action items from review\", or mentions review synthesis, finding prioritization, severity ranking, or review result summarization.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Freview-synthesis\u002FSKILL.md",[],[127,128,129,130,131,132,133,97,134,135,136,137,138],"review","review synthesis","Synthesis","prioritize","create action","feedback","reviewer","summarize","prioritization","create","issues","severity",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":148,"publishedAt":28},"01M6CC872EZ9GRJY0HRCG0RT2M","research-scoring","This skill should be used when the user asks to \"score research\", \"check research quality\", \"evaluate coverage\", \"measure improvement\", \"assess research completeness\", or mentions research scoring, quality metrics, coverage gaps, improvement baseline, or research pipeline status.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fresearch-scoring\u002FSKILL.md",[145],{"categoryNo":146,"categoryName":147,"taxonomyType":90,"taxonomyTypeDesc":91},"01JBSEEDCAT000000000000021","资料检索与研究",[149,112,150,151,152,153,154,155,116,97,156,157,158],"research scoring","status","coverage gaps","metrics","pipeline","baseline","quality","coverage","pipeline status","research quality",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":28},"01M6CC852HSDS1FE4EJAT0RHGR","notebooklm-integration","This skill should be used when the user asks to \"ingest into NotebookLM\", \"query NotebookLM\", \"add sources to notebook\", \"cross-source synthesis\", \"check stale sources\", or mentions NotebookLM, notebook integration, source ingestion, or knowledge consolidation.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fnotebooklm-integration\u002FSKILL.md",[],[166,167,168,169,116,97,170,171,172,129],"notebooklm integration","notebooklm","integration","knowledge","ingestion","ingest","stale",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":180,"publishedAt":28},"01M6CC82Z4V3205KCJWQZPS2VG","evidence-synthesis","This skill should be used when the user asks to \"synthesize findings\", \"combine research\", \"cross-reference sources\", \"summarize evidence\", \"write a deep review\", or mentions evidence synthesis, finding consolidation, cross-source analysis, or research summarization.","https:\u002F\u002Fgithub.com\u002Fray-manaloto\u002Fmacos-development-environment\u002Fblob\u002Fmain\u002Frsm-subagents\u002Fplugins\u002Fresearch-review-toolkit\u002Fskills\u002Fevidence-synthesis\u002FSKILL.md",[179],{"categoryNo":146,"categoryName":147,"taxonomyType":90,"taxonomyTypeDesc":91},[181,129,182,134,112,183,184,185,97,186,127],"evidence synthesis","evidence","deep review","analysis","write","reference"]