Skip to content

Mascot intro, --yolo and a launch prompt, ~/.agents/skills, and the Omarchy theme - #18

Merged
VladoIvankovic merged 8 commits into
mainfrom
claude/vibrant-cannon-qk4ar2
Oct 2, 2026
Merged

VladoIvankovic merged 8 commits into
mainfrom
claude/vibrant-cannon-qk4ar2

Conversation

@VladoIvankovic

@VladoIvankovic VladoIvankovic commented Oct 2, 2026 •

Copy link
Copy Markdown
Owner

This PR started as the brand work: the mascot in the intro and the README logo. It now also carries what Codeep needs to sit well on Omarchy as an agent:

  • an unattended launch with a prompt, which Omarchy's omarchy-agent launcher needs,
  • the shared ~/.agents/skills directory, where Omarchy links its skills,
  • the TUI following the Omarchy theme.

The release notes are under CHANGELOG [Unreleased], and the README has the new flags and the new setting.

Brand

fix(brand): the README logo gets full-size inner chevrons

Codeep.svg was the off-brand variant, with its inner chevrons at about 84% and thinned from 104 to 65 units. It now uses the same geometry as codeep.dev and the Mac app icon (VladoIvankovic/Codeep-MacOs#1).

feat(intro): the mascot glances around while CODEEP decrypts

 █▀▀▀▀█  █▀▀▀▀█
 █▐█▌ ████▐█▌ █     ██████╗ ██████╗ ██████╗ ███████╗███████╗██████╗
 █▄▄▄▄████▄▄▄▄█    ██╔════╝██╔═══██╗██╔══██╗██╔════╝██╔════╝██╔══██╗
████████████████   ██║     ██║   ██║██║  ██║█████╗  █████╗  ██████╔╝
▀▀▀██████████▀▀▀   ██║     ██║   ██║██║  ██║██╔══╝  ██╔══╝  ██╔═══╝
   ██████████      ╚██████╗╚██████╔╝██████╔╝███████╗███████╗██║
   ███    ███       ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝╚══════╝╚═╝
  • The mascot (src/renderer/components/mascot.ts) is the creature from Codeep Maskot.svg, drawn in half blocks. It has four frames (idle, look-left, look-right, blink) that differ only on the pupil row.
  • Layout: the mascot sits to the left of the wordmark. It glances centre → left → centre → right, then blinks once as CODEEP finishes. Below 72 columns the intro is exactly the old one.
  • Bug fix: the decrypt phase now starts at progress 0. Before, the first frame was random, and on main the wordmark was already glitched on its first frame.

fix(help): /mcp browse no longer promises 12 servers

The marketplace now has 9 entries, and codeep.dev's command reference repeated the stale count.

Omarchy

feat(cli): --yolo and a launch prompt

  • codeep -- <prompt> (also -p and --prompt) starts a new session with the prompt as its first message, as if typed.
    • Everything after -- is the prompt, so codeep -- review asks the model instead of running codeep review.
    • A missing or doubled prompt is an error.
  • codeep --yolo asks nothing for this launch only:
    • Agent actions run without confirmation, and vague tasks get no clarifying questions.
    • The folder is used as the project, with read & write access, and a new session starts.
    • Nothing is saved. Changing Agent Confirmation or Agent Interactive Mode in /settings ends the override for that setting.
    • Writes to files that decide what runs later are still confirmed, and a workspace's own MCP servers still ask to be trusted.
    • The status bar shows YOLO while confirmations are off.
  • Startup fix: the MCP trust question now comes after "Set as Project?" instead of replacing it, and the launch prompt is sent last.

feat(skills): ~/.agents/skills, folded descriptions, skill files

  • Load order: skills in ~/.agents/skills load. On a name clash the order is project .codeep/skills, then ~/.codeep/skills, then ~/.agents/skills.
  • Block-scalar descriptions: a description: written as a > or | block (Omarchy's are) is read correctly, instead of loading as ">".
  • Skill files: invoke_skill gives the skill's directory and reads files inside it, such as reporting.md.
  • Catalog length: entries are no longer cut mid-word at 200 characters.
  • Security: writing to .agents/skills/ is confirmed in every mode, as .codeep/skills/ already was.

feat(tui): follow the Omarchy theme, live (+ review fixes)

How it works

  • On Omarchy, the colours Codeep paints itself come from ~/.local/state/omarchy/current/theme/colors.toml. They use the same mapping Omarchy's templates use for Claude Code and Pi.
  • A theme switch recolours an open session.
  • Follow Omarchy theme in /settings turns it off. It is On by default and only shown on Omarchy.
  • Off Omarchy, nothing is watched or read, and every escape sequence is the same as before. palette.defaults.test.ts pins the colour escapes of every formatter and component to the pre-change output, and palette.test.ts pins all the defaults.

Which colours follow the theme

  • The brand pair and the chat greys.
  • Syntax colours and code punctuation.
  • Headings and the inline-code colour.
  • Warnings, the warning toast and the confirm modal.
  • The YOLO badge.

Readability

  • Greys are placed by target contrast between the theme's background and foreground. A fixed mix would invert or merge them on light themes.
  • Each kind of text has a minimum contrast; a theme colour below it is moved toward the foreground until it reaches it:
    • 4.5:1 for sentence text (warnings, hints, blockquotes)
    • 3:1 for code and short labels
    • 2.5:1 for welcome labels
    • 1.5:1 for separators
  • All 22 bundled themes meet these.
  • A theme whose accent equals its foreground (kanagawa) uses its blue for the brand colour, so selected rows still stand out.

Watching for changes

  • Codeep watches current/ and current/theme/, waits 150 ms after a burst of events, then repaints only if a colour changed.
  • If current/ is removed, it watches the nearest existing parent until current/ comes back.
  • No SIGUSR2 handler. conf's exit hook catches SIGUSR2 together with SIGTERM and SIGHUP, so keeping the process alive on SIGUSR2 left the next SIGTERM or SIGHUP unable to end it. Omarchy only signals OpenCode, by name.

Review: an independent review (regression, visual on 10 themes, tests) raised 17 findings. All of them are addressed in fc3a579.

Checks

  • npx tsc --noEmit: clean.
  • npx vitest run: 4390 passed, 2 skipped, 2 failed in the sandbox. Both failures are root-only permission tests in files this PR doesn't touch, and they pass on CI:
    • src/config/index.test.ts "not writable"
    • src/utils/git.hardening.test.ts "unreadable submodule"
  • Renders: real App frames on defaults, tokyo-night, catppuccin-latte, gruvbox, kanagawa and matte-black.

No version bump; that's for the release.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo

claude added 2 commits October 2, 2026 14:41
Codeep.svg (the README logo) was the variant whose four inner chevrons were
scaled to ~84% and thinned from 104 to 65 units, so they no longer matched
the corner brackets. It is now the same geometry as codeep.dev's logo and
the Mac app icon: brackets 312 long and 104 thick, chevrons 104 thick with
their tips on the outer edge, on a clean 960 grid.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
- components/mascot.ts: the pixel creature from Codeep Maskot.svg in half
  blocks (one cell = two pixels), 16 columns x 7 lines. Idle, look-left,
  look-right and blink frames differ only on the pupil row; ▐█▌ moves the
  pupils by half a cell, so they never touch the eye's rim.
- The startup intro (App.renderIntro) draws it left of the wordmark, 3
  columns apart, the pair centred, with the wordmark on mascot lines 1..6.
  The mascot skips the noise/decrypt effect: it is idle from the first
  frame, then glances centre, left, centre, right, holds centre, and blinks
  once as the wordmark finishes. The steps scale with the decrypt length
  (250 ms each over the App's 1.5 s). Below 72 columns the layout is
  exactly the old wordmark-only one.
- The decrypt phase now starts at progress 0: the noise phase's last tick
  scheduled a render after the switch, which read its random progress as
  decrypt time (a random first mascot frame, and a glitched first wordmark
  frame that predates this change).
- Intro.ts (showIntro/showLogoStatic, currently unused) follows the same
  layout so the two don't drift.
- No timers added (it reuses the intro's intervals); SPINNER_FRAMES, the
  agent panel, ACP/Zed and non-TUI output are untouched.
- Tests: frames are 7x16 and differ only on line 1; layout centring, gap
  and the 72/71-column fallback; the glance/blink sequence at 1000 and
  1500 ms; and the real startIntro under fake timers yields idle, left,
  idle, right, idle, blink.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Codeep Review — Score: 0/100 ❌

Reviewed 42 changed files.

Severity Count
❌ Error 1
⚠️ Warning 5
ℹ️ Info 105
💡 Suggestion 155

CHANGELOG.md

  • ℹ️ maintainability: File has 4094 lines - consider splitting into smaller modules

README.md

  • ⚠️ performance (L1484): SELECT * can be inefficient, select only needed columns
    • 💡 Specify required columns explicitly
  • ℹ️ maintainability: File has 1571 lines - consider splitting into smaller modules

src/config/index.ts

  • ℹ️ bug (L965): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L965): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L222): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L242): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L268): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L289): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L308): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L353): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L354): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L471): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • …and 48 more in this file

src/renderer/App.palette.test.ts

  • ℹ️ maintainability (L48): Function is 81 lines long - consider breaking it down

src/renderer/App.test.ts

  • ℹ️ maintainability (L51): Function is 74 lines long - consider breaking it down
  • ℹ️ maintainability (L142): Function is 95 lines long - consider breaking it down

src/renderer/App.ts

  • ℹ️ bug (L1299): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L3188): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L137): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability: File has 3251 lines - consider splitting into smaller modules

src/renderer/agentConfirmation.test.ts

  • ℹ️ maintainability (L146): Function is 53 lines long - consider breaking it down

src/renderer/agentConfirmation.ts

  • ℹ️ bug (L44): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L32): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L37): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L43): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L49): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L55): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/agentExecution.ts

  • ℹ️ performance (L696): Consider if sequential await in loop is necessary
    • 💡 Use Promise.all() if operations can run in parallel
  • 💡 documentation (L32): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L71): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L80): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L120): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L899): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability: File has 913 lines - consider splitting into smaller modules

src/renderer/cliArgs.test.ts

  • ℹ️ maintainability (L79): Function is 65 lines long - consider breaking it down

src/renderer/cliArgs.ts

  • 💡 documentation (L44): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability (L44): Function is 62 lines long - consider breaking it down

src/renderer/commands/registry.ts

  • 💡 documentation (L44): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L62): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L103): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L326): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L342): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L362): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L368): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L412): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability: File has 668 lines - consider splitting into smaller modules

src/renderer/components/Intro.ts

  • ℹ️ bug (L127): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L11): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L85): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L100): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L143): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability (L16): Function is 64 lines long - consider breaking it down

src/renderer/components/Login.ts

  • 💡 documentation (L27): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L224): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/components/MessageFormatter.ts

  • ℹ️ bug (L413): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L55): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L141): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L192): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L334): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L386): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability (L55): Function is 74 lines long - consider breaking it down

src/renderer/components/Modal.ts

  • 💡 documentation (L38): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L91): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L157): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L228): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/components/Search.ts

  • 💡 documentation (L36): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L101): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/components/SelectScreen.ts

  • 💡 documentation (L26): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L106): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/components/Settings.test.ts

  • ⚠️ types (L15): Type assertion to "any" bypasses type safety
    • 💡 Use proper type assertion or fix the types

src/renderer/components/Settings.ts

  • ⚠️ types (L32): Type assertion to "any" bypasses type safety
    • 💡 Use proper type assertion or fix the types
  • 💡 documentation (L70): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L394): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability: File has 526 lines - consider splitting into smaller modules

src/renderer/components/WelcomeFormatter.ts

  • 💡 documentation (L31): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability (L31): Function is 67 lines long - consider breaking it down

src/renderer/components/mascot.ts

  • 💡 documentation (L15): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L16): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L19): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L35): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L64): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L88): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/components/uiConstants.ts

  • 💡 documentation (L22): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L25): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L35): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/highlight.ts

  • ℹ️ style (L23): Anonymous function expression
    • 💡 Consider using arrow functions or named functions
  • 💡 documentation (L18): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L49): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/renderer/main.launch.test.ts

  • ℹ️ maintainability (L137): Function is 53 lines long - consider breaking it down

src/renderer/main.ts

  • ❌ security (L892): Hardcoded API key detected
    • 💡 Use environment variables for API keys
  • ℹ️ bug (L602): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L949): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L1190): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L1199): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ maintainability (L644): Console statement found - remove before production
    • 💡 Use a proper logging library
  • ℹ️ maintainability (L648): Console statement found - remove before production
    • 💡 Use a proper logging library
  • ℹ️ maintainability (L693): Console statement found - remove before production
    • 💡 Use a proper logging library
  • ℹ️ maintainability (L708): Console statement found - remove before production
    • 💡 Use a proper logging library
  • ℹ️ maintainability (L713): Console statement found - remove before production
    • 💡 Use a proper logging library
  • …and 41 more in this file

src/renderer/omarchyTheme.test.ts

  • ℹ️ maintainability (L130): Function is 60 lines long - consider breaking it down
  • ℹ️ maintainability (L407): Function is 92 lines long - consider breaking it down

src/renderer/omarchyTheme.ts

  • ℹ️ bug (L407): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L413): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L413): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L497): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L503): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L45): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L65): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L81): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L104): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L161): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • …and 8 more in this file

src/renderer/palette.test.ts

  • ℹ️ maintainability (L23): Function is 60 lines long - consider breaking it down
  • ℹ️ maintainability (L85): Function is 91 lines long - consider breaking it down

src/renderer/palette.ts

  • 💡 documentation (L36): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L107): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L127): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L128): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L165): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L174): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L185): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L200): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L233): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/utils/agent.ts

  • ℹ️ bug (L1401): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ⚠️ types (L376): Type assertion to "any" bypasses type safety
    • 💡 Use proper type assertion or fix the types
  • 💡 documentation (L99): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L129): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L206): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L220): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L238): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L439): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L1869): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L1905): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • …and 2 more in this file

src/utils/skillBundles.integration.test.ts

  • ℹ️ maintainability (L65): Function is 148 lines long - consider breaking it down

src/utils/skillBundles.test.ts

  • ℹ️ maintainability (L83): Function is 61 lines long - consider breaking it down
  • ℹ️ maintainability (L147): Function is 95 lines long - consider breaking it down

src/utils/skillBundles.ts

  • 💡 documentation (L89): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L150): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L280): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L302): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L326): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L352): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L363): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L394): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L434): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability (L89): Function is 59 lines long - consider breaking it down
  • …and 1 more in this file

src/utils/skillBundlesCloud.ts

  • 💡 documentation (L175): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L204): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L212): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs

src/utils/toolExecution.test.ts

  • ℹ️ maintainability: File has 851 lines - consider splitting into smaller modules
  • ℹ️ maintainability (L122): Function is 72 lines long - consider breaking it down
  • ℹ️ maintainability (L196): Function is 71 lines long - consider breaking it down
  • ℹ️ maintainability (L338): Function is 52 lines long - consider breaking it down
  • ℹ️ maintainability (L410): Function is 59 lines long - consider breaking it down
  • ℹ️ maintainability (L471): Function is 61 lines long - consider breaking it down
  • ℹ️ maintainability (L534): Function is 218 lines long - consider breaking it down
  • ℹ️ maintainability (L760): Function is 51 lines long - consider breaking it down

src/utils/toolExecution.ts

  • ℹ️ bug (L299): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • ℹ️ bug (L805): Using == for null check also matches undefined
    • 💡 Use === null or == null intentionally
  • 💡 documentation (L42): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L255): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L405): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L431): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • 💡 documentation (L1215): Exported function/class without JSDoc
    • 💡 Add JSDoc documentation for public APIs
  • ℹ️ maintainability: File has 1267 lines - consider splitting into smaller modules
  • ℹ️ maintainability (L523): Function is 52 lines long - consider breaking it down
  • ℹ️ maintainability (L1215): Function is 51 lines long - consider breaking it down

Powered by Codeep review · codeep@latest · fail-on: none

Copy link
Copy Markdown
Owner Author

Re the Codeep Review above: all 18 items are info/suggestion, and they stay as is.

  • The == null flags don't apply to this diff: the new check at App.ts:3143 is a strict !== null, and the other two lines are unchanged code.
  • The JSDoc and function-length items follow the file's existing style. The new mascot.ts exports already carry doc comments where they explain something.

Generated by Claude Code

claude added 4 commits October 2, 2026 16:36
The marketplace was trimmed to 9 entries when the catalog was synced
(src/utils/mcpMarketplace.ts), but the /help line still said "12 servers",
and codeep.dev's command reference, generated from this registry, repeats
it next to the site's own "Browse all 9 servers". The description no
longer carries a count that can go stale.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
… unattended

Launchers like Omarchy start every coding agent unattended, optionally
with a task: 'crush --yolo', 'claude --permission-mode auto -- "<prompt>"'.
Codeep only took subcommands, so it could not be one of them.

- cliArgs.ts parses the launch line in one pure function. `-- <words>`
  is the prompt (so `-- review` asks the model instead of running
  `codeep review`); `-p` / `--prompt` take the next argument. A missing or
  doubled prompt is an error, not a guess. The subcommands, --help and
  --version route as before.
- --yolo pins Agent Confirmation to Never and Agent Interactive Mode to Off
  for this process only (agentConfirmation.ts). Every runtime reader goes
  through that pin; nothing is written to the config. It also skips "Set
  as Project?", the access dialog (read & write, unsaved) and the session
  picker. Changing either setting in /settings releases the pin.
- A YOLO badge leads the status bar for as long as confirmations are off.
- A launch prompt goes in through the same path as a phone instruction
  (submitAsTyped): it shows as the user's message, after every startup
  question, including the workspace MCP trust question, which no longer
  replaces "Set as Project?" in plain folders.
- Still confirmed under --yolo: writes to files that decide what runs
  later, and a workspace's own MCP servers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
…ll files

Omarchy links its skills (desktop customisation, crash diagnosis, app
building) into ~/.agents/skills, the directory agent tools share.
Codeep only read .codeep/skills and ~/.codeep/skills, and would have
dropped those skills anyway.

- ~/.agents/skills is a third, global source. Project .codeep/skills wins
  a name, then ~/.codeep/skills, then ~/.agents/skills. Global symlinks
  load; the project rule against links leading out of the repo is
  unchanged. /skills bundles groups them by directory.
- parseFrontmatter reads YAML block scalars for any key (`>` folded, `|`
  literal, chomping and indentation indicators). Omarchy's descriptions
  are `description: >` and parsed as ">", so the skill was skipped.
  js-yaml stays out: it rejects plain values like "Deploy: build, then
  ship" that SKILL.md files in the wild use.
- invoke_skill names the skill's directory and can read a file beside
  SKILL.md (Omarchy's point at hooks.md, theming.md...), only inside that
  directory, with the same size and regular-file checks.
- The catalog keeps whole descriptions (it cut at 200 characters,
  mid-word, losing "Triggers:"), and writes to .agents/skills/ are
  confirmed in every mode, as .codeep/skills/ already were.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
README: two rows in the CLI table and the three skill locations in their
precedence order. CHANGELOG: an [Unreleased] entry, per CONTRIBUTING.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo

Copy link
Copy Markdown
Owner Author

Re the refreshed Codeep Review (0/100): the new ❌ and ⚠️ items are all false positives on lines that are unchanged from main, so nothing changes.

  • ❌ main.ts:881 "Hardcoded API key": this is apiKey = 'ollama', the placeholder sent to providers that need no key. It is the same line as main:834, moved down by this PR's additions above it.
  • ⚠️ Settings.ts:31 and Settings.test.ts:15 "as any": the words appear in comments describing the refactor that removed those casts. Both comments are already on main.
  • ⚠️ agent.ts:376 "as any": the comment reads "the same gate as any other bot", also on main.
  • ⚠️ README.md:1483 "SELECT *": this is "select **Codeep** as the agent", where Markdown bold was matched as SQL.

The rest is info/suggestion (JSDoc, file and function length), same as before.


Generated by Claude Code

claude added 2 commits October 2, 2026 19:00
On Omarchy Linux, Claude Code, OpenCode, Pi and Hermes recolour
themselves when the user switches the desktop theme; Codeep kept its own
truecolor red and One Dark syntax colours. The basic 16 ANSI colours
already followed (Omarchy recolours the terminal); only truecolor did not.

- palette.ts: one semantic palette for every truecolor use (brand,
  greys by role, syntax roles), replacing the literals and the five
  components' own copies of PRIMARY_COLOR. Defaults are today's exact
  values, pinned byte for byte by a test, so nothing changes off Omarchy.
- omarchyTheme.ts reads ~/.local/state/omarchy/current/theme/colors.toml
  (a minimal, never-throwing TOML reader) and maps it the way Omarchy's
  own Claude Code template does: accent for the brand, greys mixed from
  foreground and background so light themes stay readable.
- Live: it watches the theme directory (Omarchy swaps it with rm + mv)
  and handles SIGUSR2 like OpenCode, re-rendering the running TUI. Only
  the TUI starts it; acp, review, hook and account do not.
- Settings: "Follow Omarchy theme" (on by default, applies immediately).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
- Drop the SIGUSR2 handler. conf's exit hook (when-exit) catches SIGUSR2
  with SIGTERM/SIGHUP and re-raises it; keeping the process alive left the
  hook spent, so the next SIGTERM or SIGHUP no longer ended the session.
  The directory watch already sees every switch, and Omarchy signals only
  OpenCode by name. README no longer suggests `pkill -USR2`.
- While current/ is gone, watch the nearest existing directory above it,
  so it is picked up again when it comes back without a signal.
- Theme the last fixed colours: code punctuation, the YOLO badge (theme
  yellow with the most readable text colour), the warning toast and the
  confirm modal / picker prompts.
- Place each grey by target contrast instead of a fixed sRGB mix, so light
  themes keep the greys' order and spacing; sentence text (hint,
  blockquote, warning) gets a 4.5:1 floor.
- A theme whose accent equals its foreground (kanagawa) uses blue for the
  brand pair, so selected rows still stand out.
- Tests: no frame written to the runner output, a theme/ re-watch test,
  recovery tests without a signal, readable per-entry colour fixture
  instead of a sha256, shared handle in the stop() test.
- CHANGELOG: TL;DR covers the theme; stray blank line removed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Bp1pRXzJVR8Rb2CsNWzzmo
@VladoIvankovic VladoIvankovic changed the title The mascot in the intro + the README logo with full-size chevrons Mascot intro, --yolo and a launch prompt, ~/.agents/skills, and the Omarchy theme Oct 2, 2026
@VladoIvankovic
VladoIvankovic marked this pull request as ready for review October 2, 2026 23:22
@VladoIvankovic
VladoIvankovic merged commit 97ec80b into main Oct 2, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants