AIA의 기능은 PROMPT_ID에 해당하는 텍스트 파일(예: summarize.txt
)을 프롬프트 디렉터리에 저장하는 간단하면서도 강력한 파일 기반 구조를 중심으로 설계되었습니다. AIA_PROMPTS_DIR
환경 변수를 통해 이 디렉터리의 경로를 설정할 수 있으며, 하위 디렉터리를 활용하여 프롬프트를 논리적으로 정리할 수 있습니다. AIA는 ‘프롬프트’(수행할 작업)와 ‘역할’(AI의 페르소나)을 명확히 분리하여 LLM에 정확한 지침을 제공합니다. 역할은 AIA_ROLES_DIR
에 저장되며, 프롬프트 파일 내에는 사용자 전용 주석을 추가할 수 있어, AI로 전송되기 전에 자동으로 제거됩니다.
기본적으로 AIA는 명령줄 인수로 전달된 파일이나 표준 입력(STDIN)에서 입력을 처리하고, 그 결과를 temp.md
파일에 저장합니다. 이러한 입출력 방식은 명령줄 옵션, 환경 변수, 또는 중앙 구성 파일을 통해 유연하게 변경할 수 있습니다. 컨텍스트는 CLI 인수, 파일 리디렉션, 파이프된 콘텐츠 세 가지 방식으로 프롬프트에 추가될 수 있습니다. CLI 인수는 파일 내용을 변경 없이 ‘있는 그대로’ 처리하며, 파일 리디렉션과 파이프된 콘텐츠는 셸 또는 ERB 통합 문을 실행합니다. 하지만 Ruby의 STDIN 제한으로 인해 파이프된 내용과 리디렉션된 파일 내용이 동시에 제공될 경우 파이프된 내용은 무시되므로, 필요시 외부에서 내용을 연결해야 합니다.
AIA는 명령줄의 1등 시민으로서, 데이터를 파이프하고 내보낼 수 있어 셸 스크립트 및 워크플로우의 강력한 구성 요소가 됩니다. ask
와 같은 셸 함수를 만들어 빠르게 질문하거나, $(date)
와 같은 셸 명령을 프롬프트에 삽입하여 동적인 컨텍스트를 제공할 수 있습니다. 또한, 프롬프트를 실행 가능한 파일로 만들어 git commit
메시지 생성과 같은 작업을 자동화하는 것도 가능합니다.
동적 프롬프트는 AIA의 핵심 기능 중 하나입니다. [PARAMETER_NAME]
구문을 사용하여 재사용 가능한 프롬프트를 만들 수 있으며, AIA는 실행 시 각 매개변수의 값을 요청하고 이전에 사용한 값을 기억하여 재사용을 돕습니다. 셸 통합을 통해 시스템 정보를 프롬프트에 직접 포함시킬 수 있으며, ERB(Embedded Ruby) 지원을 통해 프롬프트 내에서 조건부 로직이나 루프와 같은 복잡한 Ruby 코드를 실행하여 훨씬 더 동적인 콘텐츠를 생성할 수 있습니다.
AIA 지시문(Directives)은 //
접두사가 붙는 특수 명령으로, 프롬프트 내에서 AIA의 동작을 세밀하게 제어하고, 콘텐츠를 주입하며, 워크플로우를 관리합니다. //include
는 파일 내용을 삽입하고, //shell
은 셸 명령의 출력을 삽입하며, //ruby
는 Ruby 코드 실행 결과를 삽입합니다. //config
, //model
, //next
, //pipeline
과 같은 지시문은 AIA의 동작 방식이나 워크플로우 흐름을 제어합니다. 또한, //help
, //review
등은 주로 대화형 채팅 모드에서 세션을 관리하는 데 사용됩니다. 사용자는 AIA::Directives
클래스에 private 메서드를 정의하여 자신만의 사용자 지정 지시문을 쉽게 추가할 수 있습니다.