- Throw if getDaemonPid() can't determine the PID instead of storing 0
(process.kill(0, 0) signals the caller's process group, not the daemon)
- Forward essential system env vars (PATH, HOME, etc.) into the plist
so the tool-server can find binaries like xcrun
Replace child_process.spawn with a user-domain LaunchAgent plist
(com.argent.tool-server) managed via launchctl bootstrap/bootout.
The daemon is bootstrapped on-demand, health-checked via polling,
and fully torn down (bootout + plist removal) on kill/uninstall.
* switch to NPM private registry for @swmansion/argent publishing
* switch publish workflow, constants, and test to npmjs.org registry
* revert publish.yml — deprecated workflow
* feat: add update notification and update-argent tool
Injects an update note into HTTP responses when a newer version of Argent
is available, forwards the note through the MCP server so agents see it
prepended to tool results, and adds an update-argent tool that agents can
call (with explicit user consent) to apply the pending update.
* test: add edge-case tests for update note injection and update-argent tool
* fix: guard update-argent against double-spawn and no-op calls, use argent binary
* feat: auto-suppress update note for 30min after delivery, add dismiss-update tool
* fix: correct npm package name to @software-mansion/argent
* fix: use semver ordering for version comparison, guard double-start, handle response stream errors
* feat: add update notification and update-argent tool
Injects an update note into HTTP responses when a newer version of Argent
is available, forwards the note through the MCP server so agents see it
prepended to tool results, and adds an update-argent tool that agents can
call (with explicit user consent) to apply the pending update.
* test: add edge-case tests for update note injection and update-argent tool
* fix: guard update-argent against double-spawn and no-op calls, use argent binary
* feat: auto-suppress update note for 30min after delivery, add dismiss-update tool
* fix: correct npm package name to @software-mansion/argent
* fix: use semver ordering for version comparison, guard double-start, handle response stream errors
* fix unresolved conflicts
* add yarn to gitignore
* cleanup typecasting
* isolate update note builder
* remove unused import
* fix package name
* change update rate to once per day
* add note against using permanent storage mediums
* update tool descriptions
* fix tests
When lib is explicitly set in tsconfig, TypeScript does not auto-include
@types/node. Adding "types": ["node"] to both tsconfig.base.json and
packages/mcp/tsconfig.json resolves errors for process, performance, etc.
* fix: move describe to native devtools
Replace the AX describe path with an app-scoped native hierarchy adapter so coordinate discovery stays on the supported injection flow.
Also add safer targeting and restart guidance to reduce ambiguous Home and cold-start recovery paths.
Made-with: Cursor
* init
* update sim server
* Delete NATIVE_DEVTOOLS_DESCRIBE_MIGRATION_NOTE.md
* fix: initial optimization blindspot coverage (too long, will optimize compactness)
* fix: significantly shorten optimization skill, isolate references to separate files
* compact references
* fix: compress core optimization skill
* fix: optimization edge-cases where the agent did not check for regressions in some situations
* fix: tune resources for latest test run
* fix: further cleanup core skill, tune for latest run
* fix: cleanup duplicated instructions
* fix: use linter instead of grep
* fix: simplify SKILL.md, expand semantic-checklist.md
* fix: more abstract semantic checklist
* cleanup
* fix: cleanup unused file after merge
* fix: compress optimization skill body
* fix: addendum to the last part of the optimization flow
* fix: address review feedback on react-native-optimization skill
- Align checklist phase labels with pipeline section headers (lint=1, semantic=2, profiling=3, verify=4)
- Fix pipeline header — replace contradictory "Profile first" slogan with accurate description of the two-track approach
- Fix sub-agents rule: "Phases 2–3" → "Phases 1–2" (sub-agents run during lint + semantic, not profiling)
- Create references/fix-reference.md with the fix table removed from §3; fix dangling reference in semantic-checklist.md
- Add profiler-combined-report to Phase 3 analyze step
- Add flow-repair reminder to Phase 3 (was dropped from old skill)
- Expand Phase 4 to explicitly mention regression checking, not only crash checking
- Replace unresolved {src_dir} placeholder in lint-rules.md with actionable instruction
- Add trailing newline to SKILL.md
* merge, move files
* feat: update CLI to make local installation of MCP and skills by default and allow for custom path
* feat: enhance CLI path validation in init function
* chore: rename "argent" in installator to "Argent"
* refactor: improve CLI initialization and path handling
* feat: add update notification and update-argent tool
Injects an update note into HTTP responses when a newer version of Argent
is available, forwards the note through the MCP server so agents see it
prepended to tool results, and adds an update-argent tool that agents can
call (with explicit user consent) to apply the pending update.
* test: add edge-case tests for update note injection and update-argent tool
* fix: guard update-argent against double-spawn and no-op calls, use argent binary
* feat: auto-suppress update note for 30min after delivery, add dismiss-update tool
* fix: correct npm package name to @software-mansion/argent
* fix: use semver ordering for version comparison, guard double-start, handle response stream errors
- auto-screenshot: update delay expectations to match current
launch-app base of 3000ms (was 1700ms), use keyboard (base=300)
to properly test env override as floor
- uninstall: use readToml for Codex adapter configs instead of
JSON.parse, since Codex writes TOML format
`tsc --build` fails to resolve `@argent/registry` and
`@argent/native-devtools-ios` because neither package was listed in the
root or tool-server tsconfig references. This broke `npm run build` and
`npm run pack:mcp` after native-devtools-ios was introduced.
* improve: rewrite all tool descriptions to score 9.8/10 on SpiderShield
Updated description fields for all 53 tools in packages/tool-server/src/tools
to satisfy all 6 SpiderShield quality criteria: has_action_verb,
has_scenario_trigger (Use when), has_param_docs, has_param_examples,
has_error_guidance, and has_return_docs. Description score improved from
5.0 to 9.8/10. The two remaining sub-10 tools (gesture-pinch, gesture-rotate)
are limited by disambiguation_score (0.49) which is outside description control.
* improve: replace verbose description rewrites with minimal targeted additions
* chore: reset tool descriptions to original
* improve: minimal description additions to satisfy quality criteria
* slight adjustment, reformat
* fix: correct inaccurate claims in tool descriptions
- screenshot: default scale is 0.3, not 0.5
- run-sequence: no screenshot is auto-captured; call screenshot separately
- stop-metro: returns stopped=false when no process found, does not fail
- gather-workspace-data: gracefully returns nulls, does not fail on missing path
- debugger-log-registry: returns empty stats on no data, does not fail
- list-simulators: add missing runtime field to return description
- debugger-status: clarify sourceMapReady is always true (waits before returning)
- view-network-request-details: returns error string on missing requestId, does not throw
- Adds native-devtools-ios package with pre-built dylibs (libNativeDevtoolsIos, libKeyboardPatch, libInjectionBootstrap)
- Passive simulator watcher injects dylibs into all booted simulators on tool-server startup, eliminating manual restart requirement
- Lazy network activation: NSURLProtocol interception is opt-in per bundleId via Control socket command, re-activated on reconnect
- New tools: native-find-views, native-full-hierarchy, native-network-logs, native-devtools-status
- dev script: non-fatal argent-private submodule (uses pre-built dylibs when source unavailable)
- Adds Prettier config and format script
- Updates CONTRIBUTING.md with npm run dev workflow and project structure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Add argent-private as git submodule at packages/argent-private
- Remove Sources/ from packages/native-devtools-ios (now in submodule)
- Update build.sh to resolve SRC_DIR from submodule path with clear
error message if submodule is not initialised
- Update scripts/dev.cjs to run git submodule update --init before
building dylibs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: write profiler output to /tmp instead of project root
The profiler was creating an argent-profiler-cwd/ directory inside the
user's project root. Output is now written to /tmp/argent-profiler-cwd/
using os.tmpdir() so no artifacts are left in the project tree.
* fix: remove project_root from profiler tools, drop getDebugDir param
No backwards compatibility needed — project_root is stripped from
ios-profiler-start and profiler-load schemas entirely, and getDebugDir
takes no arguments now that the path is always /tmp/argent-profiler-cwd/.
* fix: remove stale project_root from skill docs, add dump.test.ts
- SKILL.md and diagnostic-tools.md still referenced project_root for
profiler-load after it was removed from the schema — now corrected
- Add 17 tests covering getDebugDir, writeDump, writeDumpCompact,
readCpuProfile, and readCommitTree (all passing)
Check for newer @argent/tool-server versions on npm at startup and every
hour. The result is stored in a runtime flag (updateAvailable) — no user
notification or auto-install behavior is wired up yet.
ARG-79
* ci: add description quality workflow for tools and skills
Adds a GitHub Actions workflow that gates PRs on tool description quality
using SpiderShield (threshold 3.0/10 against current 3.3 baseline) and
informally grades skill SKILL.md frontmatter with a self-contained Node.js
grader. Includes extract-tools.mjs for converting ToolDefinition objects to
MCP tools/list JSON and grade-skills.mjs for scoring skill files.
* ci: fix profiler skill description and enforce 10.0 skill quality gate
* ci: split description quality into two separate scoped workflows
* ci: raise tool description quality gate to 10.0
* feat: add Codex CLI adapter for MCP config management
Add support for OpenAI's Codex CLI alongside existing editors. The adapter
reads/writes TOML config at ~/.codex/config.toml and <root>/.codex/config.toml,
using the smol-toml library. Includes full test coverage and docs update.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* fix: remove incorrect Codex rules/agents copy targets
Codex's .codex/rules/ is for execpolicy (Starlark security rules), not
model instructions. Codex uses AGENTS.md and .agents/skills/ for context
injection, so directory-based rules/agents copying doesn't apply.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat: inject argent rules into Codex developer_instructions
Codex has no rules/ directory for model instructions — .codex/rules/ is
for execpolicy (Starlark security rules). Instead, inject rule content
into the developer_instructions field in config.toml, delimited by
markers for clean update/removal.
- Reads .md rule files, strips YAML frontmatter, concatenates content
- Injects into developer_instructions with argent section markers
- Preserves existing user developer_instructions
- Replaces argent section on re-inject (idempotent)
- Uninstall cleans up argent section from config.toml
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* chore: remove stale developer comments
Removed informal, person-attributed dead-code comment from paste.ts.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* chore: remove remaining stale comment in mcp/src/index.ts
Remove the mid-development reassurance note "// TOOLS_URL is now updated"
from the fetchWithReconnect retry path (ARG-18 follow-up).
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: remove dangling reference to non-existent docs/cli-bridge-guide.md
The file referenced in the bridge command's help text was never created.
Remove the misleading pointer so users aren't sent to a 404.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: clean up stale identifiers and dev artifacts before open-source release
- Rename injected JS globals: __rn_mcp_installed__ → __argent_profiler_installed__,
__rn_mcp_roots__ → __argent_roots__, __rn_mcp_commit_capture__ → __argent_commit_capture__,
__RN_DEVTOOLS_MCP_COMMITS__ → __ARGENT_DEVTOOLS_COMMITS__ across the profiler pipeline
- Route server startup and idle-shutdown logs to stderr (not stdout, which is the MCP protocol pipe)
- Fix broken test expecting --force flag that does not exist in globalInstallCommand
- Replace stale 'radon' fixture key in mcp-configs test with neutral 'other-tool'
- Fix non-interpolating ${port} placeholder and typo 'desctructive' in stop-metro description
- Fix typos in tool descriptions: DELAGATED, environemnt
- Fix stale tool reference debugger-console-logs → debugger-log-registry in two skill files
- Fix typos in skill docs: accesisibility, sequentialsimulator, mutliple tines, necesserily, informaiton
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* docs: update installation guide to streamline setup process and add local tarball installation instructions
* docs: remove INSTALL.md and RELEASING.md, update CONTRIBUTING.md to streamline release process, and adjust README.md to reflect changes
* chore: remove unused agentic files
* chore: remove deprecated configuration and script files, add new setup-in-workspace script for argent installation
Satisfies both RN >= 0.85 Metro (which requires an Origin header) and
Expo's dev server (which does an exact match against its serverBaseUrl,
127.0.0.1, rejecting connections with Origin: localhost).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
* fix: streamline installation prompt in CLI initialization
* feat: enhance CLI initialization to support installation from tarball
* fix: update installation prompt label in CLI initialization for clarity
* feat: add Gemini CLI MCP adapter
Adds a new adapter for Gemini CLI so that `argent init` detects and configures the MCP server in ~/.gemini/settings.json. Gemini CLI uses the same mcpServers format as Cursor/Windsurf.
Closes ARG-38
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: tighten Gemini detect(), add tests, document getCopyTargets gap
- detect() now checks for ~/.gemini/settings.json (not just the dir) to
avoid false positives from Google Cloud SDK creating ~/.gemini
- Add full Gemini adapter test suite (7 tests: write, remove, paths,
preserve existing settings)
- Add copyRulesAndAgents test confirming Gemini returns empty (intentional)
- Fix ALL_ADAPTERS count assertion (5 → 6)
- Add comment in getCopyTargets switch explaining Windsurf/Zed/Gemini omission
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: revert detect() to dirExists — gcloud does not create ~/.gemini
The previous change switched to checking settings.json existence with
a comment claiming ~/.gemini could be created by Google Cloud SDK.
That claim is unsubstantiated — gcloud uses ~/.config/gcloud exclusively.
Reverted to the simpler dirExists check, consistent with other adapters.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: support project-level Gemini config at <root>/.gemini/settings.json
Gemini CLI loads workspace settings from <cwd>/.gemini/settings.json
(confirmed in gemini-cli-core/dist/src/config/storage.js getWorkspaceSettingsPath)
and these take precedence over global user settings. projectPath() was
incorrectly returning null, making Gemini global-only like Windsurf.
Updated projectPath() to return the correct project path and fixed the
corresponding test assertion.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: detect Gemini by local .gemini dir in addition to global
detectAdapters() would miss Gemini when a user only has a project-local
.gemini/ directory and no global ~/.gemini. Mirrors the Cursor/VS Code
pattern of checking both homedir and cwd.
Also adds a test covering the local detection path.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* cleanup: reformat
* fix: add config case for gemini
* fix: correct copyRulesAndAgents test for Gemini adapter
The test used scope:"global" and asserted an empty result, based on a
stale assumption that getCopyTargets had no Gemini case. The final commit
in this PR added that case, making the test both wrong (failed assertion)
and unsafe (wrote files into the real ~/.gemini on the test runner).
Switch to scope:"local" so writes go into tmpDir/.gemini, and assert
that rules and agents are actually copied there.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* test: mock homedir in copyRulesAndAgents, add global-scope Gemini test
Replace the previous local-only fix with a proper vi.mock("node:os")
that intercepts the homedir binding inside mcp-configs.ts. A module-level
homedirOverride variable (read at call time, not factory time) lets each
test redirect homedir to a path inside tmpDir.
- Adds scope:"global" Gemini test writing to tmpDir/home/.gemini/
- Adds afterEach in copyRulesAndAgents describe to reset the override
- Keeps existing scope:"local" Gemini test
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* feat: add addAllowlist/removeAllowlist to Gemini adapter
Gemini CLI supports trust:true per-server in settings.json to bypass
tool-call confirmations. Wire it up via the addAllowlist interface so
argent init can offer auto-approve for Gemini the same as other editors.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* chore: remove unused exported types and interfaces
Remove ServiceDefinition interface, ServiceRuntimeError and
ServiceDisposalError classes from the registry package, and
unexport ContentBlock type from the mcp package — none are
imported or referenced anywhere in the codebase.
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* fix: re-export ContentBlock type for consumer type annotations
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
* feat: implement tool-server termination in postinstall and CLI commands
* feat: add aliases for install and uninstall commands in CLI
* feat: enhance CLI initialization with global/local installation options and update checks
* feat: implement allowlist management for MCP tools in CLI initialization, update, and uninstall processes
* refactor: rename RADON references to ARGENT across the codebase
* Merge main into branch and complete ARGENT rename in new files
Merges main's changes: modular CLI architecture, UI package deprecation,
db tool removal, skills/agents prefix rename, and MCP server consolidation.
Extends the RADON→ARGENT rename to cover new files introduced in main
(ARGENT_MCP_LOG, ARGENT_TOOLS_URL env vars, argent-skills bin).
Made-with: Cursor
* fix: rename RADON_MCP_LOG in observe.cjs, regenerate lockfile for argent-skills bin
Made-with: Cursor
* chore: remove accidental PUBLIC_RELEASE_AUDIT.md
Removes the console.log('[rn-mcp:render]', ...) call inside
FIBER_ROOT_TRACKER_SCRIPT that was being injected via cdp.evaluate()
into the user's React Native app process. Also removes the now-dead
stats-collection loop that existed solely to feed that log line —
render data is read separately by the profiler tools via
COLLECT_RENDERS_SCRIPT walking hook.__rn_mcp_roots__ directly.
Co-authored-by: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>