agent-config
agent-config provides a central profile for AI agents, aiming to create a consistent experience across different language models like Claude, GPT, and Gemini. It focuses on a small, shared profile that dictates agent behavior regardless of the underlying model. This allows developers to manage agent personalities and capabilities in a unified way, simplifying the process of adapting to new models. The system integrates with various AI harnesses, including pi, Claude Code, and OpenCode, and leverages semantic memory through andenken. It also includes a collection of extensions for pi, adding functionality like environment loading and session management. Ultimately, agent-config streamlines agent development and deployment by providing a standardized foundation for agent behavior.
Manually configuring agents for each language model is time-consuming and complex, requiring repetitive adjustments to system prompts. agent-config solves this by offering a single, portable profile that aligns agents across different models, saving developers significant effort and ensuring consistent behavior.
CAPABILITIES & CONSTRAINTS
README
# agent-config
**Profile Harness — the gravity center where alien intelligences resonate with a being.**
Multi-harness support is a means, not the goal. The goal is **a single 1KB being-profile that exerts the same gravitational pull across any harness**.
Claude, GPT, and Gemini are "graduates from different schools" — trained on different data with different philosophies. Trying to control them means writing hundreds of lines of system prompts per model. Instead, **throw one being-profile at all of them equally.** They keep their unique lenses while aligning around a single universe — this is the [Profile Harness](https://notes.junghanacs.com/botlog/20260228T075300/).
agent-config implements that gravity center. The shared foundation where agents remember, search, and stay aligned.
> Part of the [-config ecosystem](#the--config-ecosystem) by [glg @junghan0611](https://github.com/junghan0611)
### Harness Support
| Harness | Memory | Skills | Config |
|---------|--------|--------|--------|
| **[pi](https://github.com/badlogic/pi-mono)** | andenken **extension** (native `registerTool`, in-process LanceDB) | 26 skills (semantic-memory excluded — extension covers it) | extensions + themes + keybindings |
| **Claude Code** | andenken **skill** (CLI wrapper via bash) | 27 skills (full set including semantic-memory) | CLAUDE.md + hooks |
| **OpenCode** | andenken **skill** (CLI wrapper via bash) | 27 skills (full set) | settings |
| **OpenClaw** (Oracle VM) | andenken **skill** (same skills/ via symlink mount) | 27 skills (Nix store mount in Docker) | openclaw.json |
Session JSONL from all harnesses flows into [andenken](https://github.com/junghan0611/andenken)'s unified index. Each chunk carries a `source` field (`"pi"` | `"claude"`) so you can filter, compare, or roll back across harnesses.
## What's Here
### Semantic Memory → [andenken](https://github.com/junghan0611/andenken)
Semantic memory has graduated to its own repo: **[andenken](https://github.com/junghan0611/andenken)** — "recollective thinking" (Heidegger).
| Tool | DB | Dims | Purpose |
|------|-----|------|---------|
| `session_search` | sessions.lance | 768d | Past pi + Claude Code conversations |
| `knowledge_search` | org.lance (707MB) | 768d | Org-mode knowledge base (3,300+ Denote notes) |
Agents call these autonomously. Ask "보편 학문 관련 노트 찾아줘" and `knowledge_search` fires with dictcli query expansion — finding `universalism`-tagged notes without being told the English word.
**3-Layer Cross-Lingual Search:**
| Layer | Mechanism | Example |
|-------|-----------|---------|
| **1. Embedding** | Gemini multilingual vectors | "보편" ≈ "universalism" |
| **2. dblock** | Denote regex link graph | 22 notes linked in meta-note |
| **1.5 BM25** | Korean josa removal (dual emit) | "위임의" → "위임" + "위임의" (BM25 both) |
| **3. dictcli** | Personal vocabulary graph (2,400+ triples) | `expand("보편")` → `[universal, universalism, paideia]` |
Pi loads andenken as a **compiled pi package** (`pi install`), not a symlinked `.ts` file. This bypasses jiti parsing limitations and allows direct LanceDB access in-process. Claude Code and OpenCode use the CLI wrapper skill instead.
### Pi Extensions ([`pi-extensions/`](pi-extensions/))
| Extension | Purpose |
|-----------|---------|
| `env-loader.ts` | Load ~/.env.local at session start |
| `context.ts` | /context command — show loaded extensions, skills, context usage |
| `go-to-bed.ts` | Late night reminder |
| `peon-ping.ts` | Sound notifications |
| `gemini-image-gen.ts` | Gemini image generation (나노바나나 2flash) |
| `delegate.ts` | Spawn independent agent process (local or SSH remote) |
| `session-breakdown.ts` | Session cost breakdown |
| `whimsical.ts` | Personality touches |
Semantic memory extension lives in [andenken](https://github.com/junghan0611/andenken) (separate repo, loaded as pi package).
Telegram bridge lives in [entwurf](https://github.com/junghan0611/entwurf) (separate repo, loaded as pi package).
### Skills ([`skills/`](skills/)) — 27 skills
| Category | Skills |
|----------|--------|
| **Data Access** | denotecli, bibcli, gitcli, lifetract, gogcli, ghcli, day-query |
| **Agent Memory** | session-recap, dictcli, semantic-memory, improve-agent |
| **Writing** | botlog, botment, agenda, punchout |
| **Communication** | slack-latest, jiracli, telegram |
| **Web/Media** | brave-search, browser-tools, youtube-transcript, medium-extractor, summarize, transcribe |
| **Tools** | emacs, tmux, diskspace |
**Skill doc principle (LSP pattern):** Agents don't read full docs. Each SKILL.md has a single API table at the top — function/command + args + example. English body, Korean description only. Target: <100 lines, <4KB. Like LSP autocomplete: see the signature, call immediately.
### Pi Config ([`pi/`](pi/))
| File | Purpose |
|------|---------|
| `settings.json` | Default model, theme, thinking level |
| `keybindings.json` | Custom keybindings |
### Themes ([`pi-themes/`](pi-themes/))
1 theme: glg-dark (custom, Ghostty Dracula compatible).
### Commands ([`commands/`](commands/))
| Command | Purpose |
|---------|---------|
| `/recap` | Quick recap of previous session |
| `/pandoc-html` | Markdown/Org → Google Docs HTML/DOCX |
## Session Management — No Compact
**We don't use compact.** Compact = AI reads entire conversation and summarizes = expensive + slow.
Instead:
1. When conversation gets long, `/new` to start fresh
2. `/new` auto-indexes current session + recent 24h sessions
3. In new session, recover context:
- `session-recap -p <repo> -m 15` → 4KB summary (instant)
- `session_search` → semantic search (all sessions)
- `knowledge_search` → org knowledge base (3-layer expansion)
## Shell Aliases (`~/.bashrc.local`)
```bash
# Claude Code + 텔레그램
alias claude-tg='claude --channels plugin:telegram@claude-plugins-official'
alias claude-tgd='claude --channels plugin:telegram@claude-plugins-official --dangerously-skip-permissions'
# pi: --session-control 기본 (delegate 비동기 알림 + 세션 간 RPC)
alias pi='command pi --session-control'
# 분신 에이전트: 텔레그램 브릿지 (entwurf 패키지 설치 필요)
alias pi-home='command pi --session-control --telegram'
```
## One-Command Setup
```bash
git clone https://github.com/junghan0611/agent-config.git
cd agent-config
./run.sh setup # clone repos + build CLIs + symlink everything + npm install
./run.sh env # verify: system, API keys, links, binaries, memory index
```
`./run.sh setup` does:
- Clone source repos (if missing) — including andenken
- Build 6 native CLI binaries (Go + GraalVM)
- Symlink: pi extensions + skills (semantic-memory excluded) + themes + settings + keybindings
- Install: andenken as pi package (compiled extension)
- Symlink: Claude Code + OpenCode skills (full set including semantic-memory) + prompts
- Symlink: ~/.local/bin PATH binaries
- npm install for extensions and skills
## The -config Ecosystem
| Repo | Layer | Description |
|------|-------|-------------|
| [nixos-config](https://github.com/junghan0611/nixos-config) | OS | NixOS flakes, hardware, services |
| [doomemacs-config](https://github.com/junghan0611/doomemacs-config) | Editor | Doom Emacs, org-mode, denote |
| [zotero-config](https://github.com/junghan0611/zotero-config) | Bibliography | 8,000+ references, bibcli |
| **[agent-config](https://github.com/junghan0611/agent-config)** | **Agent infra** | **Extensions, skills, themes, settings** |
| **[andenken](https://github.com/junghan0611/andenken)** | **Memory** | **Semantic memory — sessions + org knowledge base** |
| **[entwurf](https://github.com/junghan0611/entwurf)** | **Presence** | **Telegram bridge — 분신 에이전트 원격 접근** |
| [memex-kb](https://github.com/junghan0611/memex-kb) | Knowledge | Legacy document conversion pipeline |
| [GLG-Mono](https://github.com/junghan0611/GLG-Mono) | Orchestration | OpenClaw bot configurations |
| [geworfen](https://github.com/junghan0611/geworfen) | Being | Existence data viewer — WebTUI agenda |
### Skill Source Repos
| CLI | Rep
[truncated…]PUBLIC HISTORY
IDENTITY
Identity inferred from code signals. No PROVENANCE.yml found.
Is this yours? Claim it →METADATA
README BADGE
Add to your README:
