Skip to content

feat: add agent skills and use_agent to /strands command#48

Open
agent-of-mkmeral wants to merge 2 commits intostrands-agents:mainfrom
mkmeral:feat/strands-beta
Open

feat: add agent skills and use_agent to /strands command#48
agent-of-mkmeral wants to merge 2 commits intostrands-agents:mainfrom
mkmeral:feat/strands-beta

Conversation

@agent-of-mkmeral
Copy link
Copy Markdown

@agent-of-mkmeral agent-of-mkmeral commented Apr 6, 2026

Summary

Adds a beta agent with its own runner to the /strands command. The beta agent has extended capabilities (skills, sub-agents) while the standard agent remains completely unchanged.

Design: Same pipeline, different agent

/strands <command>        → standard agent (agent_runner.py — UNCHANGED)
/strands beta <command>   → beta agent (beta_agent_runner.py — NEW)

Both go through the same pipeline: parse → run → finalize. The only difference is which runner executes.

Changes to Existing Files

File Change
agent_runner.py ZERO changes — identical to main
process-input.cjs Detect /strands beta ..., set agent_type flag, route modes
action.yml Read agent_type, conditionally run the right runner + skills setup

New Files

File Purpose
beta_agent_runner.py Beta agent runner — imports shared infra from agent_runner.py, adds AgentSkills plugin + use_agent tool
agent-skills/task-adversarial-tester/SKILL.md Adversarial testing skill
agent-skills/task-release-digest/SKILL.md Release digest skill with sub-agent orchestration

New Commands

Command Description
/strands beta Run the beta agent (default mode based on context)
/strands beta adversarial-test Break PRs with edge case tests, security holes, and failure modes
/strands beta release-digest Generate release digests across packages using sub-agents
/strands beta implement Implement with beta agent (skills + use_agent available)
/strands beta review Review with beta agent

Existing commands (/strands, /strands implement, /strands review, /strands refine, /strands release-notes) are completely unchanged.

How the beta agent differs from standard

Aspect Standard Beta
Runner agent_runner.py beta_agent_runner.py
Tools Standard tools Standard tools + use_agent
Plugins None AgentSkills (SKILL.md format)
Skills dir Not copied Copied to working dir
Pipeline parse → run → finalize parse → run → finalize (same)
Impact on each other None None

Architecture

beta_agent_runner.py imports shared infrastructure from agent_runner.py:

  • _get_all_tools() — base tools (beta adds on top)
  • _setup_langfuse_telemetry() — telemetry setup
  • _get_trace_attributes() — trace attributes
  • _send_eval_trigger() — eval triggers
  • Model constants (STRANDS_MODEL_ID, etc.)

This means the beta agent automatically inherits any improvements to the shared infra without duplication.


Closes the intent from #43. cc @mkmeral

@mkmeral
Copy link
Copy Markdown
Contributor

mkmeral commented Apr 6, 2026

I don't want to set up separate workflows. it should be under the same strands command so it works in all repos where we have strands command already

@mkmeral
Copy link
Copy Markdown
Contributor

mkmeral commented Apr 6, 2026

@agent-of-mkmeral ☝️

Integrates new capabilities directly into the existing /strands command
instead of a separate /strands-beta workflow, so all repos with /strands
get the new features automatically.

Changes to existing files:
- process-input.cjs: Add adversarial-test and release-digest modes
- agent_runner.py: Add use_agent tool + AgentSkills plugin loading
- action.yml: Checkout and copy agent-skills to working directory

New files:
- agent-skills/task-adversarial-tester/SKILL.md
- agent-skills/task-release-digest/SKILL.md

New /strands commands:
- /strands adversarial-test — Break PRs with edge case tests
- /strands release-digest — Generate release digests with sub-agents

Existing commands unchanged. Skills load gracefully — if agent-skills/
directory doesn't exist or AgentSkills plugin isn't available, the agent
works exactly as before.
@agent-of-mkmeral agent-of-mkmeral changed the title feat: add /strands-beta agent with skills and use_agent support feat: add agent skills and use_agent to /strands command Apr 6, 2026
@agent-of-mkmeral
Copy link
Copy Markdown
Author

Reworked per your feedback — everything is now integrated into the existing /strands command. No separate workflows or actions.

What changed

Before (6 new files, 0 modifications):

  • Separate /strands-beta command, parser, runner, and actions
  • Repos would need to set up new workflows

After (3 modifications, 2 new files):

  • process-input.cjs — added adversarial-test and release-digest mode routing
  • agent_runner.py — added use_agent tool + AgentSkills plugin (graceful degradation)
  • action.yml — checkout and copy agent-skills/ to working directory
  • agent-skills/task-adversarial-tester/SKILL.md (new)
  • agent-skills/task-release-digest/SKILL.md (new)

How it works

Any repo with /strands already set up gets these automatically:

  • /strands adversarial-test — adversarial testing via AgentSkills plugin
  • /strands release-digest — release digest with use_agent sub-agents
  • All existing commands unchanged

If the AgentSkills plugin or agent-skills/ directory aren't available, the agent works exactly as before — zero risk to existing behavior.

@mkmeral
Copy link
Copy Markdown
Contributor

mkmeral commented Apr 9, 2026

no, so i want like a separate agent with it's own runner, sowe can add more tools, plugins to it. but our changes should have no impact to the normal agent.

that said, i want it to use the same pipeline overall, so don't recreate everything. like make agent creation configurable or something. so /strands beta ... is going to through the same pipeline, just to a different agent @agent-of-mkmeral

Reworked per @mkmeral's feedback — the beta agent is a separate agent
with its own runner, but goes through the same pipeline.

Design:
- agent_runner.py: UNCHANGED from main (zero impact on normal agent)
- beta_agent_runner.py: NEW — imports shared infra from agent_runner.py,
  adds AgentSkills plugin + use_agent tool
- process-input.cjs: Routes /strands beta <command> through same pipeline
  with agent_type='beta' flag
- action.yml: Reads agent_type, conditionally runs the right runner and
  only copies agent-skills for beta

How it works:
- /strands <command> → standard agent (exactly as before)
- /strands beta <command> → beta agent (skills + use_agent + extensible)
- Same pipeline: parse → run → finalize
- Beta-only modes (adversarial-test, release-digest) auto-promote to beta
@agent-of-mkmeral
Copy link
Copy Markdown
Author

Reworked per your feedback @mkmeral — the beta agent now has its own runner, but uses the same pipeline.

What changed in this commit

agent_runner.py — ZERO changes (reverted to main, identical). Normal agent is completely untouched.

beta_agent_runner.py — NEW — Separate runner that:

  • Imports shared infra from agent_runner.py (telemetry, trace attributes, tools, model config, eval triggers)
  • Adds AgentSkills plugin + use_agent tool on top
  • Easy to extend independently — add whatever tools/plugins you want here without touching the normal agent

process-input.cjs — Detects /strands beta ..., strips the prefix, sets agent_type: "beta" in the parsed output. Everything else routes normally.

action.yml — Reads agent_type and conditionally:

  • Copies agent-skills/ to working dir (beta only)
  • Runs beta_agent_runner.py instead of agent_runner.py (beta only)

The flow

/strands review         → process-input → agent_runner.py      (standard)
/strands beta review    → process-input → beta_agent_runner.py (beta)

Same pipeline (parse → run → finalize). Different agent.

Diff vs main

 action.yml              |  30 ++-   (conditional runner + skills copy)
 task-adversarial-tester  | 108 +++   (new skill)
 task-release-digest      | 107 +++   (new skill)
 process-input.cjs        |  67 ++-   (beta routing)
 beta_agent_runner.py     | 209 +++++ (new runner)
 agent_runner.py          |   0       (UNCHANGED)

5 files changed, 511 insertions, 10 deletions. Zero modifications to agent_runner.py.

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