A coding agent that runs entirely on your own machine. No API keys, no cloud, works offline.
pi is the agent you talk to. It runs against a local llama.cpp server hosting Google Gemma 4 (the unsloth
| {%- macro format_parameters(properties, required) -%} | |
| {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%} | |
| {%- set ns = namespace(found_first=false) -%} | |
| {%- for key, value in properties | dictsort -%} | |
| {%- set add_comma = false -%} | |
| {%- if key not in standard_keys -%} | |
| {%- if ns.found_first %},{% endif -%} | |
| {%- set ns.found_first = true -%} | |
| {{ key }}:{ | |
| {%- if value['description'] -%} |
A pattern for building personal knowledge bases using LLMs.
This is an idea file, it is designed to be copy pasted to your own LLM Agent (e.g. OpenAI Codex, Claude Code, OpenCode / Pi, or etc.). Its goal is to communicate the high level idea, but your agent will build out the specifics in collaboration with you.
Most people's experience with LLMs and documents looks like RAG: you upload a collection of files, the LLM retrieves relevant chunks at query time, and generates an answer. This works, but the LLM is rediscovering knowledge from scratch on every question. There's no accumulation. Ask a subtle question that requires synthesizing five documents, and the LLM has to find and piece together the relevant fragments every time. Nothing is built up. NotebookLM, ChatGPT file uploads, and most RAG systems work this way.
Highly extensible software like Emacs, Vim, and Neovim tend to grow their own package managers. A software developer, for example, might want to install editor plugins that hook into a particular programming language's linter or language server. The programmer's text editor is therefore extended to support managing additional software to extend the text editor. If this loop continues for too long, the programmer's editor becomes more delicate and complex. The remedy for this problem is to manage software using dedicated tools apart
| # | |
| # This file supports http://davesteele.github.io/development/2021/08/29/python-asyncio-curses/ | |
| # | |
| import asyncio | |
| from abc import ABC, abstractmethod | |
| from curses import ERR, KEY_RESIZE, curs_set, wrapper | |
| import _curses |
Extracted from W3Challs Syscalls
| # | Name | eax | ebx | ecx | edx | esi | edi | ebp | Definition |
|---|---|---|---|---|---|---|---|---|---|
| 0 | restart_syscall | 0x00 | - | - | - | - | - | - | kernel/signal.c:2501 |
| 1 | exit | 0x01 | int error_code | - | - | - | - | - | kernel/exit.c:1095 |
| 2 | fork | 0x02 | - | - | - | - | - | - | arch/x86/kernel/process.c:271 |
| 3 | read | 0x03 | unsigned int fd | char *buf | size_t count | - | - | - | fs/read_write.c:460 |
| """ | |
| Example of using sub-parser, sub-commands and sub-sub-commands :-) | |
| """ | |
| import argparse | |
| def main(args): | |
| """ | |
| Just do something |
| import sys | |
| from subprocess import call | |
| import json | |
| import os | |
| import requests | |
| def download_gists(gists: list): | |
| for gist in gists: | |
| call(["git", "clone", gist["git_pull_url"]]) |
| " Specify a directory for plugins | |
| call plug#begin('~/.vim/plugged') | |
| Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
| Plug 'scrooloose/nerdtree' | |
| "Plug 'tsony-tsonev/nerdtree-git-plugin' | |
| Plug 'Xuyuanp/nerdtree-git-plugin' | |
| Plug 'tiagofumo/vim-nerdtree-syntax-highlight' | |
| Plug 'ryanoasis/vim-devicons' | |
| Plug 'airblade/vim-gitgutter' |