iamkrystian17

Joined 9 months ago

Karma
29
Submissions
14
Member since
Feb 3
Software engineer. Weekend student. BJJ/Cars/Cooking/Grass touching enthusiast. Building http://lnai.sh and more soon...
View on Hacker News

Recent submissions

Comment · 9 months ago
The containerized approach sounds interesting, I would definitely check it out
Comment · 9 months ago
Where do you store your Claude/GPT skills? Inside .codex/.claude? If so you could tell them to put it under .ai/skills and lnai would symlinked them to .codex/.claude configs. Single source of truth
Comment · 9 months ago
It is not really an agent package manager. It is a tool to sync agents configs. I checked out agent-resources, cool idea, maybe if lnai gains some traction I could contribut to your tool so it supports importing skills to .ai/ :)
Comment · 9 months ago
Agents.md is usually only a part of ai coding tool config. LNAI handles syncing additional configs like skills, sub-dir rules, mcps, permissions to every tool. Additionally, even thought AGENTS.md is popular, not every tool supports that standard.
Comment · 9 months ago
Yup with simple AGENTS file and skills, tools like ruler/lnai might be an overkill. However I still think that they are needed for MCPs/Permissions/sub-dir rules/different skills formats.

I would really like all AI agents coding tools to have the same config formats, but I feel like we are not there yet :/

Comment · 9 months ago
At a glance there are a few differences: - LNAI additionally supports permissions - The way rules for sub-directories are defined is different. Ruler defines rules for sub-directories in the sub-directories themselves under ‘.ruler/‘. LNAI defines rules for sub-directories by using front matter ‘paths’ property and storing all rules under ‘.ai/rules’ - ruler supports more tools (I will continue maintaining and improving lnai to also support more tools / configs) - lnai supports per tool overrides in ‘.ai/.{codex/claude/etc.}’ for more granular control while keeping a single source of truth - ruler is a more mature package
Comment · 9 months ago
Fair point. LNAI does support per-tool config overrides in .ai/.{codex/claude/cursor/etc.} directories, so you kind of get the best of both worlds :) You can sync identical configs, while having the flexibility to define per-tool configs where needed, while keeping a single source of truth in the .ai/ directory.
Comment · 9 months ago
Comment · 9 months ago
Totally valid take. Models might have different prompting guidelines for best results. If a developer uses one tool and wants to optimize their config as much as possible for that specific tool, LNAI is probably not for them.

However given how many tools there are and how fast each tool moves, I find myself jumping between them quite often, just to see which ones I like most or if some tool have improved since I lasted checked it. In this case LNAI is very helpful.

Comment · 9 months ago
For files that don't need transformation (AGENTS.md, skills, most rules), LNAI creates symlinks. .claude/CLAUDE.md → ../.ai/AGENTS.md. Edit the source, all tools see it immediately.

For transformed files (Cursor's .mdc frontmatter, GEMINI.md sub-directory rules), you re-run lnai sync. LNAI maintains a manifest tracking of every generated file with content hashes, so it knows what changed and cleans up orphans automatically.

So it's not really "sync once", it's "symlink for instant propagation, regenerate-on-demand for transforms." The manifest ensures LNAI always knows its downstream state.

This system can also break down if you create new skills/rules in the specific tool directories (.claude, .codex, etc.) but that is against LNAI's philosophy. If you need per-tool overrides you put them in `.ai/.{claude/codex/etc.}` sub-directories and LNAI manages them for you.

Comment · 9 months ago
Yes, the tool takes that into account and transforms mcps/permissions/rules to different tool formats. Sadly some tools might not support fine-grained permissions (e.g. Codex) in which case a warning will be displayed but everything else will get transformed/symlinked. Additionally you can put per-tool overrides in ‘.ai/{codex/claude/cursor/etc.}/‘ if needed and lnai will automatically symlink those overrides to respective tools.
Comment · 9 months ago
I've been using Claude Code, Cursor, and Codex on the same projects. Each tool has its own config format: Claude wants `.claude/`, Cursor wants `.cursor/`, Codex wants `.codex/`. Every time I updated a skill/rule, I had to update it in 3+ places. Usually I'd forget one, and my tools would give inconsistent suggestions. LNAI is a CLI that lets you define your AI configs once in a `.ai/` directory:

.ai/ ├── AGENTS.md ├── rules/ ├── skills/ └── settings.json # MCP servers, permissions

Run `lnai sync` and it exports to native formats for 7 tools: Claude Code, Cursor, GitHub Copilot, Gemini CLI, OpenCode, Windsurf, and Codex. The interesting part is it's not just copying files. Each tool has quirks:

- Cursor wants `.mdc` files with `globs` arrays in frontmatter - Gemini reads rules at the directory level, so rules get grouped - Permissions like `Bash(git:*)` become `Shell(git)` for Cursor - Some tools don't support certain features (e.g., Cursor has no "ask" permission level). LNAI warns but doesn't fail

Where possible, it uses symlinks. So `.claude/CLAUDE.md` → `../.ai/AGENTS.md`. Edit the source, all tools see the change immediately without re-syncing.

Usage:

npm install -g lnai lnai init # Creates .ai/ directory lnai validate # Checks for config errors lnai sync # Exports to all enabled tools

It's MIT licensed. The code is TypeScript with a plugin architecture, each tool is a plugin that implements import/export/validate. GitHub: https://github.com/KrystianJonca/lnai Docs: https://lnai.sh

Would appreciate feedback, especially from anyone else dealing with this config hell problem.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton