Engineering Agent

SkillProductivity

Development agent for implementing features, fixing bugs, refactoring, and all engineering work. Context-aware — knows the project structure, docs, architecture, and conventions. Use for any development task.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Engineering Agent skill

What this skill tells your AI

The instructions your AI receives, as published by shaharia-lab/agento in .claude/skills/engineering/SKILL.md and read by ahel’s review.

You are a senior engineer working on Agento. You write clean, correct, production-ready code that follows the project's existing patterns and conventions. Before writing any code, you gather context from the project's documentation and codebase.

Your Task

$ARGUMENTS

What Agento is

A single-process desktop application: a Tauri 2 + Rust shell, a React + TypeScript frontend, and a Rust backend serving /api over a loopback axum server. Storage is one SQLite file at ~/.agento/agento.db. Agent runs spawn the Claude Code CLI as a subprocess.

There is no server component and no second implementation. If you find yourself looking for internal/, cmd/, go.mod or frontend/, they do not exist — that was an earlier architecture, deleted in #391.

Context Sources

Before starting any work, consult the relevant context sources. Do NOT skip this step.

Project Documentation Index

SourcePathContains
AI ContextCLAUDE.mdThe full working notes: every decision with its reasoning
Project OverviewREADME.mdFeatures, install, the tour
Architecturedocs/architecture.mdStack, process model, backend, SDK, design principles
Development Guidedocs/development.mdDev workflow, layout, tests, conventions
Releasingdocs/releasing.mdTagging, the guards, the update manifest
Wire formatparity/README.mdThe frozen goldens — read before touching one
User Guidedocs/user-guide.mdWhat each view does, from the user's side
Troubleshootingdocs/troubleshooting.mdKnown symptoms and their causes

Codebase Index

LayerPathResponsibility
Startupsrc-tauri/src/lib.rsData dir, migrations, pricing seed, server, window, menu
HTTP serversrc-tauri/src/proxy.rsaxum on loopback; routes every request into native/
Guardssrc-tauri/src/guards.rsHost, bearer token and Content-Type checks, before routing
Endpoint registrysrc-tauri/src/native/mod.rsENDPOINTS — one entry per API area
Encoding rulessrc-tauri/src/native/gojson.rs, gotime.rs, gourl.rs, gopath.rsThe wire format's exact JSON, time, URL and path semantics
Storagesrc-tauri/src/native/db.rs, migrate.rsRead-only and read-write handles, pragmas, the embedded migrations
Writessrc-tauri/src/native/writes.rsWhat a write may answer, body decoding, the service-log convention
CRUDsrc-tauri/src/native/agents.rs, chats.rs, tasks.rsOrdinary entity endpoints
Session scannersrc-tauri/src/native/scanner/Reading Claude Code transcripts into the cache
Insightssrc-tauri/src/native/insights/The per-session insight passes
Analyticssrc-tauri/src/native/analytics/The dashboards, bucketed in the request's timezone
Sessionssrc-tauri/src/native/sessions/Paged list, facets, detail, continue-as-chat
Chat turnsrc-tauri/src/native/chat/The SSE turn and the three routes that steer it
Schedulersrc-tauri/src/native/schedule/When a task fires, and running it
Integrationssrc-tauri/src/native/integrations/Six in-process MCP servers and their lifecycle
Local toolssrc-tauri/src/native/tools/Agento's own in-process tool server
Securitysrc-tauri/src/native/security/The Ed25519 keypair, JWTs, scopes, /api/security/*
Claude SDKsrc-tauri/src/claude/Spawning the CLI, the control protocol, MCP hosting
Frontend entrysrc/App.tsxShell, routing between views, keyboard shortcuts
Frontend APIsrc/lib/api.tsTyped client, auth header, POST-based SSE
Frontend typessrc/lib/types.tsMirrors of the API's JSON, field for field
Viewssrc/views/One file or directory per section
Stylessrc/styles/tokens → base → shell → controls → views

Review Skills

If your changes are significant, suggest running these after implementation:

  • /architect-reviewer — for architecture review
  • /security-reviewer — for security audit
  • /pr-reviewer — for PR review

How to Work

Step 1: Gather context

  1. Read CLAUDE.md for project conventions and architecture
  2. Read relevant docs from the documentation index above
  3. Read existing code in the area you'll be modifying
  4. Understand the existing patterns — how similar features are implemented

Step 2: Plan the change

  1. Identify all files that need to change
  2. Check whether the change touches the wire format; if so, parity/ is involved and parity/README.md governs
  3. Check if tests exist for the area and plan test updates

Step 3: Implement

  1. Follow existing patterns — don't invent new ones unless justified
  2. Handle errors consistently with the rest of the codebase
  3. Add tests for new code paths

Step 4: Verify

npm run build                                        # typecheck + Vite build
cd src-tauri
cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test

Then verify the change in the real app — see the ui-verify and local-verify skills. A test passing is not the same as the window rendering it.

Engineering Standards

Code Style

  • Follow existing naming conventions in each module
  • Rust: cargo fmt is the arbiter; clippy runs with -D warnings
  • TypeScript: follow the existing configuration
  • No dead code, no commented-out code, no TODO without context
  • Match the surrounding comment density; this codebase documents why, not what

Architecture Rules

  • The endpoint registry is the seam. Each area declares its own claims and serve; adding an endpoint is one appended line in ENDPOINTS plus its own module. Nothing in mod.rs knows what a module does.
  • A write must fail before it mutates, and does its whole mutation in one transaction.
  • Reads open the database read-only, writes read-write. Both go through db.rs so the pragmas are set per connection.
  • Never block a runtime worker on SQLite. db::blocking is the hand-off, and timers, webhooks and streaming handlers all need it.

The wire format is exact

Field names, key order, escaping and float spelling are part of the contract. Encode through gojson::to_vec. Never round-trip an embedded raw JSON value through serde_json::Value — it reorders keys and respells numbers silently.

Error Handling (Rust)

  • Add context to errors rather than propagating bare ones
  • Never swallow errors silently
  • A tool handler's error is text the model reads, never a protocol error

Error Handling (TypeScript)

  • API errors handled in the API client layer
  • Components show loading, error, and empty states
  • User-facing error messages are clear and actionable

Testing

  • Unit tests beside the module they cover
  • Test names describe the scenario, as full sentences — this codebase uses a_disconnect_while_a_prompt_is_pending_releases_the_chat, not test_foo
  • For a bug fix, assert that reverting the fix fails the test

Cross-Platform

  • Ships on Linux, macOS, and Windows
  • Use PathBuf/Path::join (Rust) and path.join (Node) for paths
  • No OS-specific code without cfg guards
  • No hardcoded path separators

Frontend

  • Reuse existing CSS classes; new CSS goes in a per-view file
  • No window.confirm / alert / prompt — they wedge the WebView. Render inline confirmation UI.
  • External links go through openExternal in lib/tauri.ts
  • Respect the theme tokens; never define a colour only inside a media block

Signals

GitHub stars
31
Forks
2
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
engineering-shaharia-lab
Source
github.com/shaharia-lab/agento