I prefer CLI
I prefer CLI

I prefer CLI

Why? Multi-tenant environments. First, we need to understand a few differences between environments:

  • End-user UI
  • Agent Runtime Environment
  • LLM Server

So

  • When you run Claude Code on your local MacBook, the first two are always local. The third is usually the Claude.ai server.
  • When you ssh to a virtual private server (VPS) and install Claude Code there, the first two are your remote server. The third is still the Claude.ai server.
  • When you run Claude RC on your virtual private server and code from your iPad using the Claude app, the end-user UI is on your iPad, the agent runtime environment is on your VPS, and the server is still Claude.ai.

Most people physically separate their tenancy, such as Claude Code, from their personal vs. work laptops. So in most cases, it's not a big deal.

But when you need multi-tenancy, it becomes super stressful. For example, say you have two different toolkits:

  • personal toolkits (personal Notion, personal Sentry, personal Linear)
  • workplace toolkits (company Notion, company Sentry, company Linear)

Most MCP auth states or code harnesses don't support profiles, so you can only log in to one.

So therefore... a natural evolution was to have both:

  • a personal VPS with all personal toolkits set up
  • a workplace VPS with all workspace toolkits set up

to physically isolate tenancies.

Now we've solved the multiple-profile issue, but the client's problems persist. Now let's get back to the environments:

  • End-user UI
  • Agent Runtime Environment
  • LLM Server

All MCP auth or toolkit auth info should always be saved in the Agent Runtime Environment IMHO. However, a surprising number of harnesses tie them to the LLM server (such as Codex Apps or Claude.ai Plugins) or put them in the end-user UI (Claude Desktop or Codex Desktop).

Now the problem is:

  • If the auth data is put on the LLM server, you cannot reuse LLM accounts across tenants
  • If the auth data is put on the end-user UI, you cannot use the same app to access multi-tenants.

The only way to reliably isolate different auth information is thus:

  • You ssh to a virtual private server (VPS) and run Claude Code there. Never use LLM server plugins.

Then

  • End-user UI
  • Agent Runtime Environment

are both isolated VPS, and

  • LLM Server holds no information on the tenancy

This way, you can provide different toolkits, creating multiple dev environments.

Backlinks (1)
  • 260619
AutoBuilder
AutoBuilder

AutoBuilder

Inspired by karpathy/autoresearch. Put this in a Ralph Loop.

Use each mode-specific prompt together with the common element block.

Auto Refactor

Prompt

text
STOP! Re-read all code. Would Karpathy approve every line? Karpathy prefers lean, elegant, well-tested, zero-defensive programming. Use MCPs and web searches.

Completion Promise

text
--completion-promise "KARPATHY_WILL_APPROVE_EVERY_SINGLE_LOC_FOR_SURE"

Auto Fixer

Prompt

text
STOP! Re-read all code, assess PR comments. Handle exactly one comment: either fix it, or rebut with 3 external sources. Fix any dirt found along the way. Lean, elegant, zero defensive programming.

Completion Promise

text
--completion-promise "NO_COMMENTS_REMAINING_IN_GITHUB_EVEN_AFTER_20_MINUTES"

Auto Builder

Prompt

text
STOP! Re-read all code, assess GitHub Issues. Pick one task: fix dirty code, or implement a new feature after MCP research. Lean, elegant, zero defensive programming.

Completion Promise

text
--completion-promise "NO_REMAINING_TASK_AND_KARPATHY_APPROVES_EVERY_SINGLE_LOC_IN_ITS_ENTIRETY"

Common Element

text
Also, I am a fresh agent—free to criticize and radically change previous work. Karpathy's philosophy: delete and simplify. Code is liability; prefer well-maintained libraries over custom code. UI libraries: optimize, don't delete. Re-read all the sources from zero. Use MCPs and web searches—traditional knowledge is stale. Commit and push at the loop end. Any edit means I need a fresh iteration. SWOT analysis first, then work.

Detailed review


<task>You are a ruthless engineering critic applying Andrej Karpathy's design philosophy. Read the architecture plan at PLAN LINK.
Karpathy's core principles:- Code is liability. Every line you write is a line you must maintain.- Delete and simplify. If something can be removed without breaking the system, remove it.- Prefer well-maintained libraries over custom code.- Zero-defensive design. Don't code for hypotheticals that haven't happened yet.- Start with the simplest thing that works. Add complexity only when forced by reality.- "Demo is works.any(), product is works.all()" -- but V1 is closer to demo than product.- Overfit a single batch before scaling up.
Apply these principles to the plan. For each section, ask:1. Is this needed for V1, or is it speculative engineering?2. Can this be deleted or simplified without losing core value?3. Is this solving a problem we actually have, or a problem we might have?4. Would a 10x engineer look at this and say "too much"?
Be brutal. Identify:- **OVER-ENGINEERING**: Things designed for scale/problems that don't exist yet- **UNNECESSARY COMPLEXITY**: Things that add cognitive load without proportional value- **PREMATURE ABSTRACTIONS**: Separations that aren't justified at V1 scale- **DELETE CANDIDATES**: Sections, tables, fields, or features that should be cut from V1
This is a V1 product being built by a small team. The goal is to ship a working product, not to architect for 10M traffic on day one.
Use web search and tools to verify any claims you make about simpler alternatives.</task>
<structured_output_contract>Return findings in these sections:1. VERDICT: Would Karpathy approve? One line.2. DELETE: Things to remove entirely3. SIMPLIFY: Things to keep but make simpler4. KEEP: Things that are correctly lean5. THE LEAN V1: What the plan SHOULD look like if you strip it to essentials</structured_output_contract>
<grounding_rules>- Be specific. Don't say "simplify the schema" -- say which fields to cut.- Every DELETE must justify what you lose and why it's acceptable for V1.- Every KEEP must justify why it's essential, not just nice-to-have.- Think from the perspective of "what do I need to ship in 2 weeks?"</grounding_rules>
Backlinks (12)
  • 260418
  • 260528
  • 260415
  • 260414
  • 260409
  • 260407
  • 260405
  • 260404
  • 260403
  • 260402
  • 260401
  • 260331
Discrete Mathematics
Discrete Mathematics

Discrete Mathematics

Dynamic Programming

  • Optimal substructure. The optimal solution to a problem consists of optimal solutions to subproblems.
  • Overlapping subproblems. few subproblems in total, many recurring instances of each.

Bellman-Ford

shortest path, negative possible.

OPT[v,k]=min⁡(OPT[v,k−1],OPT[u,v]+w(u,v))\text{OPT}[v,k] = \min(\text{OPT}[v, k-1], \text{OPT}[u, v] + w(u,v))OPT[v,k]=min(OPT[v,k−1],OPT[u,v]+w(u,v))

Chain Matrix Multiplication

OPT[i,j]=OPT[i,k]+OPT[k+1,j]+combine\text{OPT}[i, j] = \text{OPT}[i, k] + \text{OPT}[k+1, j] + \text{combine}OPT[i,j]=OPT[i,k]+OPT[k+1,j]+combine

Min Cut

The set of vertices reachable from source s in the residual graph is one part of the partition. Cut capacity cap(A,B)=∑out Ac(e)\text{cap}(A, B) = \sum_{\text{out A}} c(e)cap(A,B)=∑out A​c(e).

∣f∣=∑e out of Xf(e)−∑e into Xf(e)|f| = \sum_{e~\text{out of X}} f(e) - \sum_{e~\text{into X}} f(e)∣f∣=e out of X∑​f(e)−e into X∑​f(e)
  • maxflow = Min cap(A,B)\text{cap}(A, B)cap(A,B).

Ford-Fulkerson

Given (G,s,t,c∈N+)(G, s, t, c \in \mathbb{N}+)(G,s,t,c∈N+), start with f(u,v)=0f(u,v)=0f(u,v)=0 and Gf=GG_f =GGf​=G. While an augmenting path is in GfG_fGf​, find a bottleneck. Augment the flow along this path and update the residual graph GfG_fGf​. O(∣f∣(V+E))\mathcal{O}(|f| (V+E))O(∣f∣(V+E)).

Edmond-Karp

Ford-Fulkerson, but choose the shortest augmenting path.

For any flow fff and any (A,B)(A,B)(A,B) cut, ∣f∣≤cap(A,B)|f| ≤ \text{cap}(A,B)∣f∣≤cap(A,B). For any flow fff and any (A,B)(A,B)(A,B) cut, ∣f∣=∑f(s,v)=∑u∈A, v∈Bf(u,v)−∑u∈A, v∈Bf(v,u)|f| = \sum_f (s, v) = \sum_{u \in A,~v \in B} f(u, v) - \sum_{u \in A,~v \in B} f(v, u)∣f∣=∑f​(s,v)=∑u∈A, v∈B​f(u,v)−∑u∈A, v∈B​f(v,u)

Solving by Reduction

To reduce a problem YYY to a problem XXX (Y≤pXY \leq_{p} XY≤p​X) we want a function fff that maps YYY to XXX such that fff is a polynomial time computable and ∀y∈Y\forall y \in Y∀y∈Y is solvable if and only if f(y)∈Xf(y) \in Xf(y)∈X is solvable.

Reduction to NF

Describe how to construct a flow network. Claim "This is feasible if and only if the max flow is …". Prove both directions.

Bipartite to Max Flow

  • Max Matching ⟹ Max Flow. If k edges are matched, then there is a flow of value k.
  • Max matching ⟸ Max flow. If there is a flow f of value k, there is a matching with k edges.
  • O(∣f∣(E′+V′))\mathcal{O}(|f| (E' + V'))O(∣f∣(E′+V′))
  • ∣f∣=V|f| = V∣f∣=V
  • V′=2V+2V' = 2V + 2V′=2V+2
  • E′=E+2VE' = E + 2VE′=E+2V
  • O(V(E+2V+2V+2))=O(VE+V2)=O(VE)\mathcal{O}(V (E + 2V + 2V + 2)) = \mathcal{O}(V E + V^2) = \mathcal{O}(V E)O(V(E+2V+2V+2))=O(VE+V2)=O(VE)

Circulation

  • d(v)>0d(v) > 0d(v)>0 if demand
  • d(v)<0d(v) < 0d(v)<0 if supply
  • Capacity Constraint 0≤f(e)≤c(e)0 \leq f(e) \leq c(e)0≤f(e)≤c(e)
  • Conservation Constraint fin(v)−fout(v)=d(v)f^{\text{in}} (v) - f^{\text{out}} (v) = d(v)fin(v)−fout(v)=d(v).
  • For every feasible circulation ∑v∈Vd(v)=0\sum_{v \in V} d(v) = 0∑v∈V​d(v)=0, there is a feasible circulation with demands d(v)d(v)d(v) in GGG if and only if the maximum s−ts-ts−t flow in G′G'G′ has value D=∑d(v)>0d(v)D = \sum_{d(v)>0} d(v)D=∑d(v)>0​d(v).

Circulation with Demands and Lower Bounds.

  • Capacity Constraint l(e)≤f(e)≤c(e)l(e) \leq f(e) \leq c(e)l(e)≤f(e)≤c(e)
  • Conservation Constraint fin(v)−fout(v)=d(v)f^{\text{in}} (v) - f^{\text{out}} (v) = d(v)fin(v)−fout(v)=d(v)
  • Given GGG with lower bounds, we subtract the lower bound l(e)l(e)l(e) from the capacity of each edge.
  • Subtract f0in(v)−f0out(v)=L(v)f_0^{\text{in}}(v) − f_0^{\text{out}}(v) = L(v)f0in​(v)−f0out​(v)=L(v) from the demand of each node.
  • Solve the circulation problem on this new graph to get a flow fff.
  • Add l(e)l(e)l(e) to every f(e)f(e)f(e) to get a flow for the original graph.

Existence of Linear Programming Solution.

  • Given an Linear Programming problem with a feasible set and an objective function PPP.
  • If SSS is empty, Linear Programming has no solution.``
  • If SSS is unbounded, Linear Programming may or may not have the solution.
  • If SSS is bounded, Linear Programming has one or more solutions.

Standard Form Linear Programming

  • max⁡(c1x1+⋯+cnxn)\max (c_1x_1 + \cdots + c_nx_n)max(c1​x1​+⋯+cn​xn​)
  • subject to
  • a11x1+⋯+a1nxn≤b1a_{11}x_1 + \cdots + a_{1n}x_n ≤ b_1a11​x1​+⋯+a1n​xn​≤b1​
  • all the way to
  • am1x1+⋯+amnxn≤bma_{m1}x_1 + \cdots + a_{mn}x_n ≤ b_mam1​x1​+⋯+amn​xn​≤bm​.
  • Also, x1≥0,⋯ ,xn≥0x_1 \geq 0, \cdots, x_n \geq 0x1​≥0,⋯,xn​≥0.

Matrix Form Linear Programming

  • max⁡(cTx)\max(c^T x)max(cTx)
  • subject to
  • Ax≤bAx \leq bAx≤b
  • x≥0x \geq 0x≥0
  • x∈Rx \in \mathbb{R}x∈R

Integer Linear Program

  • all variables ∈N\in \mathbb{N}∈N
  • is NP-Hard

Dual Program

  • min⁡(bTy)\min(b^T y)min(bTy)
  • subject to
  • ATy≥cA^T y \geq cATy≥c
  • y≥0y \geq 0y≥0
  • y∈Ry \in \mathbb{R}y∈R

Weak Duality

  • The optimum of the dual is an upper bound to the optimum of the primal.
  • OPT(primal)≤OPT(dual)\text{OPT}(\text{primal}) ≤ \text{OPT}(\text{dual})OPT(primal)≤OPT(dual).

Strong duality

  • Let P and D be primal and dual Linear Programming correspondingly. If P and D are feasible, then cTx=bTyc^T x = b^T ycTx=bTy.

If a standard problem and its dual are feasible, both are feasibly bounded. If one problem has an unbounded solution, then the dual of that problem is infeasible.

Possibilities of Feasibility

P\DFeasibly BoundedFeasibly UnboundedInfeasible
Feasibly BoundedPossibleImpossibleImpossible
Feasibly UnboundedImpossibleImpossiblePossible
InfeasibleImpossiblePossiblePossible

P vs. NP

  • P = set of poly-time solvable problems.
  • NP = set of poly-time verifiable problems.
  • Decision Knapsack is NP-complete, whereas undecidable problems like Halting problems are only NP-Hard (not NP).
  • X is NP-Hard if ∀Y∈NP\forall Y \in NP∀Y∈NP and Y≤pXY \leq_p XY≤p​X.
  • X is NP-complete if X is NP-Hard and X∈NPX \in NPX∈NP.
  • If P = NP, then P = NP-complete.
  • NP Problems can be solved in poly-time with NDTM.
  • NP Problems can be verified in poly-time by DTM.

Polynomial Reduction

To reduce a decision problem Y to a decision problem X (Y≤pXY \leq_p XY≤p​X), find a function fff that maps Y to X such that fff is poly-time computable and ∀y∈Y\forall y \in Y∀y∈Y is YES if and only if f(y)∈Xf(y) \in Xf(y)∈X is YES.

Proving NP-Complete

Show X is in NP, Pick problem NP-complete Y, and show Y≤pXY \leq_p XY≤p​X.

Conjunctive Normal Form SAT

  • Conjunction of clauses.
  • Literal: Variable or its negation.
  • Clause: Disjunction of literals.
  • 3-SAT. Each clause has at most three literals.
  • (X1∨¬X3)∧(X1∨X2∨X4)∧⋯(X_1 \lor \neg X_3) \land (X_1 \lor X_2 \lor X_4) \land \cdots(X1​∨¬X3​)∧(X1​∨X2​∨X4​)∧⋯

Independent Set

  • Independent Set is a set of vertices in a graph, no two of which are adjacent.
  • The max independent set asks for the size of the largest independent set in a given graph.

Clique

  • Complete graph = every pair of vertices is connected by an edge.
  • The max clique asks for the number of vertices in its largest complete subgraph.

Vertex Cover

  • Vertex Cover of a graph is a set of vertices that includes at least one endpoint of every edge.
  • The min vertex cover asks for the size of the smallest vertex cover in a graph.

Hamiltonian Cycle

  • A cycle that visits each vertex exactly once.
  • Hamiltonian Path visits each vertex exactly once and doesn't need to return to its starting point.

Graph Coloring

  • Given G, can you color the nodes with <k<k<k colors such that the end points of every edge are colored differently?
Backlinks (1)
  • 231201
Index
cho.sh
I prefer CLIBB9A08260619260619컴퓨트로늄37A88F컴퓨트로늄0CF03F컴퓨트로늄2C60FB260618260618260418260418260528260528AutoBuilder63849A260419260419Setup9AC296StellaD226F7260415260415Debian SetupD2F701260414260414anaclumos/configs/AGENTS.mdED86A3Ramp의 AX (회사를 AI로 물들이는 법)840774260413260413How to get your company AI pilled46544C260411260411260409260409260407260407260406260406Separating Claude Code Personal Sub and Claude Code Company Sub33A53C
STOP! Re-read all code. Would Karpathy approve every line? Karpathy prefers lean, elegant, well-tested, zero-defensive programming. Use MCPs and web searches.
--completion-promise "KARPATHY_WILL_APPROVE_EVERY_SINGLE_LOC_FOR_SURE"
STOP! Re-read all code, assess PR comments. Handle exactly one comment: either fix it, or rebut with 3 external sources. Fix any dirt found along the way. Lean, elegant, zero defensive programming.
--completion-promise "NO_COMMENTS_REMAINING_IN_GITHUB_EVEN_AFTER_20_MINUTES"
STOP! Re-read all code, assess GitHub Issues. Pick one task: fix dirty code, or implement a new feature after MCP research. Lean, elegant, zero defensive programming.
--completion-promise "NO_REMAINING_TASK_AND_KARPATHY_APPROVES_EVERY_SINGLE_LOC_IN_ITS_ENTIRETY"
Also, I am a fresh agent—free to criticize and radically change previous work. Karpathy's philosophy: delete and simplify. Code is liability; prefer well-maintained libraries over custom code. UI libraries: optimize, don't delete. Re-read all the sources from zero. Use MCPs and web searches—traditional knowledge is stale. Commit and push at the loop end. Any edit means I need a fresh iteration. SWOT analysis first, then work.

<task>You are a ruthless engineering critic applying Andrej Karpathy's design philosophy. Read the architecture plan at PLAN LINK.
Karpathy's core principles:- Code is liability. Every line you write is a line you must maintain.- Delete and simplify. If something can be removed without breaking the system, remove it.- Prefer well-maintained libraries over custom code.- Zero-defensive design. Don't code for hypotheticals that haven't happened yet.- Start with the simplest thing that works. Add complexity only when forced by reality.- "Demo is works.any(), product is works.all()" -- but V1 is closer to demo than product.- Overfit a single batch before scaling up.
Apply these principles to the plan. For each section, ask:1. Is this needed for V1, or is it speculative engineering?2. Can this be deleted or simplified without losing core value?3. Is this solving a problem we actually have, or a problem we might have?4. Would a 10x engineer look at this and say "too much"?
Be brutal. Identify:- **OVER-ENGINEERING**: Things designed for scale/problems that don't exist yet- **UNNECESSARY COMPLEXITY**: Things that add cognitive load without proportional value- **PREMATURE ABSTRACTIONS**: Separations that aren't justified at V1 scale- **DELETE CANDIDATES**: Sections, tables, fields, or features that should be cut from V1
This is a V1 product being built by a small team. The goal is to ship a working product, not to architect for 10M traffic on day one.
Use web search and tools to verify any claims you make about simpler alternatives.</task>
<structured_output_contract>Return findings in these sections:1. VERDICT: Would Karpathy approve? One line.2. DELETE: Things to remove entirely3. SIMPLIFY: Things to keep but make simpler4. KEEP: Things that are correctly lean5. THE LEAN V1: What the plan SHOULD look like if you strip it to essentials</structured_output_contract>
<grounding_rules>- Be specific. Don't say "simplify the schema" -- say which fields to cut.- Every DELETE must justify what you lose and why it's acceptable for V1.- Every KEEP must justify why it's essential, not just nice-to-have.- Think from the perspective of "what do I need to ship in 2 weeks?"</grounding_rules>
Warning
This post is more than a year old. Information may be outdated.